From 93e9fca7669fc33a3a0f97e11d4a180317f279ac Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 2 Nov 2024 17:30:10 +0100 Subject: [PATCH 001/161] refactor(SQL/legacy): Add primary key to vehicles table --- [SQL]/legacy.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/[SQL]/legacy.sql b/[SQL]/legacy.sql index 308c608c9..532475239 100644 --- a/[SQL]/legacy.sql +++ b/[SQL]/legacy.sql @@ -427,10 +427,12 @@ CREATE TABLE `user_licenses` ( -- CREATE TABLE `vehicles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(60) NOT NULL, `model` varchar(60) NOT NULL, `price` int(11) NOT NULL, - `category` varchar(60) DEFAULT NULL + `category` varchar(60) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- From 86c5e64d9fe239a5f922883c8af9eca6d0898be5 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 5 Nov 2024 08:16:41 +0100 Subject: [PATCH 002/161] replace `id` PK with `model` --- [SQL]/legacy.sql | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/[SQL]/legacy.sql b/[SQL]/legacy.sql index 532475239..b041f32f4 100644 --- a/[SQL]/legacy.sql +++ b/[SQL]/legacy.sql @@ -427,12 +427,10 @@ CREATE TABLE `user_licenses` ( -- CREATE TABLE `vehicles` ( - `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(60) NOT NULL, `model` varchar(60) NOT NULL, `price` int(11) NOT NULL, - `category` varchar(60) DEFAULT NULL, - PRIMARY KEY (`id`) + `category` varchar(60) DEFAULT NULL ) ENGINE=InnoDB; -- @@ -823,6 +821,13 @@ ALTER TABLE `licenses` ALTER TABLE `owned_vehicles` ADD PRIMARY KEY (`plate`); +-- +-- +-- Indexes for table `vehicles` +-- +ALTER TABLE `vehicles` + ADD PRIMARY KEY (`model`); + -- -- Indexes for table `rented_vehicles` -- From 26d229d36b8060c8ca30af1092fd020066f47f50 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 9 Nov 2024 08:23:20 +0000 Subject: [PATCH 003/161] experimental: Class and Point imports --- [core]/es_extended/client/imports/class.lua | 21 +++++++ [core]/es_extended/client/imports/point.lua | 44 +++++++++++++++ [core]/es_extended/client/main.lua | 2 +- [core]/es_extended/client/modules/points.lua | 58 ++++++++++++++++++++ [core]/es_extended/fxmanifest.lua | 2 + [core]/es_extended/imports.lua | 19 +++++++ 6 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 [core]/es_extended/client/imports/class.lua create mode 100644 [core]/es_extended/client/imports/point.lua create mode 100644 [core]/es_extended/client/modules/points.lua diff --git a/[core]/es_extended/client/imports/class.lua b/[core]/es_extended/client/imports/class.lua new file mode 100644 index 000000000..0b21d9983 --- /dev/null +++ b/[core]/es_extended/client/imports/class.lua @@ -0,0 +1,21 @@ +local class = {} +class.__index = class + +function class:new(...) + local instance = setmetatable({}, self) + if instance.constructor then + local ret = instance:constructor(...) + if type(ret) == 'table' then + return ret + end + end + return instance +end + +function Class(body, heritage) + local prototype = body or {} + prototype.__index = prototype + return setmetatable(prototype, heritage or class) +end + +return Class \ No newline at end of file diff --git a/[core]/es_extended/client/imports/point.lua b/[core]/es_extended/client/imports/point.lua new file mode 100644 index 000000000..2e4a7b9a5 --- /dev/null +++ b/[core]/es_extended/client/imports/point.lua @@ -0,0 +1,44 @@ +Point = ESX.Class() + +function Point:constructor(properties) + self.coords = properties.coords + self.hidden = properties.hidden or false + self.inside = properties.inside or function() end + self.enter = properties.enter or function() end + self.leave = properties.leave or function() end + self.handle = ESX.CreatePointIntenal(properties.coords, properties.distance, properties.hidden, function() + self.nearby = true + if self.enter then + self:enter() + end + if self.inside then + CreateThread(function() + while self.nearby do + local coords = GetEntityCoords(ESX.PlayerData.ped) + self.currDistance = #(coords - self.coords) + self:inside() + Wait(0) + end + end) + end + end, function() + self.nearby = false + if self.leave then + self:leave() + end + end) +end + +function Point:delete() + ESX.RemovePointInternal(self.handle) +end + +function Point:toggle(hidden) + if hidden == nil then + hidden = not self.hidden + end + self.hidden = hidden + ESX.HidePointInternal(self.handle, hidden) +end + +return Point \ No newline at end of file diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 8599666d6..25a79182c 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -54,7 +54,7 @@ ESX.SecureNetEvent("esx:playerLoaded", function(xPlayer, _, skin) end Actions:Init() - + StartPointsLoop() StartServerSyncLoops() end) diff --git a/[core]/es_extended/client/modules/points.lua b/[core]/es_extended/client/modules/points.lua new file mode 100644 index 000000000..2723bee31 --- /dev/null +++ b/[core]/es_extended/client/modules/points.lua @@ -0,0 +1,58 @@ +local points = {} + +function ESX.CreatePointIntenal(coords, distance, hidden, enter, leave) + local point = { + coords = coords, + distance = distance, + hidden = hidden, + enter = enter, + leave = leave, + resource = GetInvokingResource() + } + local handle = ESX.Table.SizeOf(points) + 1 + points[handle] = point + return handle +end + +function ESX.RemovePointInternal(handle) + points[handle] = nil +end + +function ESX.HidePointInternal(handle, hidden) + if points[handle] then + points[handle].hidden = hidden + end +end + +function StartPointsLoop() + CreateThread(function() + while true do + local coords = GetEntityCoords(ESX.PlayerData.ped) + for i=1, #points do + local point = points[i] + local distance = #(coords - point.coords) + + if not point.hidden and distance <= point.distance then + if not point.nearby then + points[i].nearby = true + points[i].enter() + end + point.currentDistance = distance + elseif point.nearby then + points[i].nearby = false + points[i].leave() + end + end + Wait(500) + end + end) +end + + +AddEventHandler('onResourceStop', function(resource) + for i=1, #points do + if points[i].resource == resource then + points[i] = nil + end + end +end) diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 1723b9400..13ebbc40e 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -45,6 +45,7 @@ client_scripts { 'client/modules/wrapper.lua', 'client/modules/callback.lua', 'client/modules/adjustments.lua', + 'client/modules/points.lua', 'client/main.lua', @@ -73,6 +74,7 @@ files { 'html/fonts/pdown.ttf', 'html/fonts/bankgothic.ttf', + "client/imports/*.lua", } dependencies { diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 7357675e1..f1483d0a5 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -21,4 +21,23 @@ if not IsDuplicityVersion() then -- Only register this event for the client ESX.PlayerLoaded = false ESX.PlayerData = {} end) + + local external = {{"Class", "class.lua"}, {"Point", "point.lua"}} + for i=1, #external do + local module = external[i] + local path = string.format("client/imports/%s", module[2]) + + local file = LoadResourceFile("es_extended", path) + if file then + local fn, err = load(file, ('@@es_extended/%s'):format(path)) + + if not fn or err then + return error(('\n^1Error importing module (%s)'):format(external[i])) + end + + ESX[module[1]] = fn() + else + return error(('\n^1Error loading module (%s)'):format(external[i])) + end + end end From 483fee8602fa54de4e105ac9d0a12e5d3c94798e Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 9 Nov 2024 09:34:49 +0100 Subject: [PATCH 004/161] fix(client/modules/points): safely iterate over sparse points table --- [core]/es_extended/client/modules/points.lua | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/client/modules/points.lua b/[core]/es_extended/client/modules/points.lua index 2723bee31..f7bd2191a 100644 --- a/[core]/es_extended/client/modules/points.lua +++ b/[core]/es_extended/client/modules/points.lua @@ -28,8 +28,7 @@ function StartPointsLoop() CreateThread(function() while true do local coords = GetEntityCoords(ESX.PlayerData.ped) - for i=1, #points do - local point = points[i] + for i, point in pairs(points) do local distance = #(coords - point.coords) if not point.hidden and distance <= point.distance then @@ -50,9 +49,9 @@ end AddEventHandler('onResourceStop', function(resource) - for i=1, #points do - if points[i].resource == resource then - points[i] = nil - end - end + for i, point in pairs(points) do + if point.resource == resource then + points[i] = nil + end + end end) From 75088230e439fba9712059586491559ce9a26d66 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 9 Nov 2024 09:39:18 +0100 Subject: [PATCH 005/161] refactor(client/modules/points): Fix function name typo --- [core]/es_extended/client/imports/point.lua | 2 +- [core]/es_extended/client/modules/points.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/imports/point.lua b/[core]/es_extended/client/imports/point.lua index 2e4a7b9a5..55ec92bca 100644 --- a/[core]/es_extended/client/imports/point.lua +++ b/[core]/es_extended/client/imports/point.lua @@ -6,7 +6,7 @@ function Point:constructor(properties) self.inside = properties.inside or function() end self.enter = properties.enter or function() end self.leave = properties.leave or function() end - self.handle = ESX.CreatePointIntenal(properties.coords, properties.distance, properties.hidden, function() + self.handle = ESX.CreatePointInternal(properties.coords, properties.distance, properties.hidden, function() self.nearby = true if self.enter then self:enter() diff --git a/[core]/es_extended/client/modules/points.lua b/[core]/es_extended/client/modules/points.lua index f7bd2191a..fee318be6 100644 --- a/[core]/es_extended/client/modules/points.lua +++ b/[core]/es_extended/client/modules/points.lua @@ -1,6 +1,6 @@ local points = {} -function ESX.CreatePointIntenal(coords, distance, hidden, enter, leave) +function ESX.CreatePointInternal(coords, distance, hidden, enter, leave) local point = { coords = coords, distance = distance, From b780e980987030a36e2c808425670fadb560adba Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 9 Nov 2024 10:41:25 +0000 Subject: [PATCH 006/161] feat(esx_notifty): new design --- [core]/esx_notify/Notify.lua | 2 +- [core]/esx_notify/fxmanifest.lua | 2 +- [core]/esx_notify/nui/css/style.css | 15 +++++++++------ [core]/esx_notify/nui/js/script.js | 10 +++++----- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/[core]/esx_notify/Notify.lua b/[core]/esx_notify/Notify.lua index 26dacd06d..a1a173422 100644 --- a/[core]/esx_notify/Notify.lua +++ b/[core]/esx_notify/Notify.lua @@ -1,4 +1,4 @@ -local Debug = ESX.GetConfig().EnableDebug +local Debug = true ---@param notificatonType string the notification type ---@param length number the length of the notification diff --git a/[core]/esx_notify/fxmanifest.lua b/[core]/esx_notify/fxmanifest.lua index c213e0e3c..456107c77 100644 --- a/[core]/esx_notify/fxmanifest.lua +++ b/[core]/esx_notify/fxmanifest.lua @@ -2,7 +2,7 @@ fx_version 'adamant' lua54 'yes' game 'gta5' -version '1.11.1' +version '1.11.0' author 'ESX-Framework' description 'A beautiful and simple NUI notification system for ESX' diff --git a/[core]/esx_notify/nui/css/style.css b/[core]/esx_notify/nui/css/style.css index 08fc8c539..6dc292903 100644 --- a/[core]/esx_notify/nui/css/style.css +++ b/[core]/esx_notify/nui/css/style.css @@ -32,8 +32,8 @@ body { min-width: 20rem; width: fit-content; height: 3.5rem; - background: rgba(5, 5, 5, 0.9); - border-radius: 0.5rem; + background: rgba(15, 15, 15, 0.9); + border-radius: 0.4rem; margin-top: 0.5rem; animation: anim 300ms ease-in-out; align-items: center; @@ -47,24 +47,27 @@ body { #root .icon { float: left; - color: #fff; } #root .text { display: inline-block; + color: #fff; margin-left: 0.5rem; } #root .error { - border-bottom: 3px solid #c0392b; + color: #c0392b; + border: 2px solid #c0392b; } #root .success { - border-bottom: 3px solid #2ecc71; + color: #2ecc71; + border: 2px solid #2ecc71; } #root .info { - border-bottom: 3px solid #2980b9; + color: #fb9b04; + border: 2px solid #fb9b04; } .material-symbols-outlined { diff --git a/[core]/esx_notify/nui/js/script.js b/[core]/esx_notify/nui/js/script.js index edb90cb0f..54c89967c 100644 --- a/[core]/esx_notify/nui/js/script.js +++ b/[core]/esx_notify/nui/js/script.js @@ -15,15 +15,15 @@ const types = { // the color codes example `i ~r~love~s~ donuts` const codes = { - "~r~": "red", + "~r~": "#c0392b", "~b~": "#378cbf", - "~g~": "green", + "~g~": "#2ecc71", "~y~": "yellow", "~p~": "purple", "~c~": "grey", "~m~": "#212121", "~u~": "black", - "~o~": "orange", + "~o~": "#fb9b04", }; w.addEventListener("message", (event) => { @@ -67,8 +67,8 @@ notification = (data) => { `).appendTo(`#root`); setTimeout(() => { - notification.fadeOut(700); - }, data.length); + notification.fadeOut(70); + }, 10000); return notification; }; From 3b6baa31523b5e1f88ce1b2b8e7e0be9d9532938 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 9 Nov 2024 10:42:03 +0000 Subject: [PATCH 007/161] feat(esx_textui): new design --- [core]/esx_textui/nui/css/style.css | 36 +++++++++++++++++++++++------ [core]/esx_textui/nui/js/script.js | 20 +++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/[core]/esx_textui/nui/css/style.css b/[core]/esx_textui/nui/css/style.css index 185fa8951..bf0d00b79 100644 --- a/[core]/esx_textui/nui/css/style.css +++ b/[core]/esx_textui/nui/css/style.css @@ -1,6 +1,6 @@ :root { --color: white; - --bgColor: #212121; + --bgColor: rgba(15, 15, 15, 0.9); } * { @@ -24,22 +24,32 @@ body { min-width: 15%; width: fit-content; height: 50px; - background: rgba(5, 5, 5, 0.9); + background: rgba(15, 15, 15, 0.9); border-radius: 0.5rem; - animation: growDown 300ms ease-in-out; align-items: center; } +.fadeIn { + animation: growUp 300ms ease-in-out; +} + +.fadeOut { + animation: growDown 300ms ease-in-out; +} + .error { - border-left: 5px solid #c0392b; + border-left: 3px solid #c0392b; + border-right: 3px solid #c0392b; } .success { - border-left: 5px solid #2ecc71; + border-left: 3px solid #2ecc71; + border-right: 3px solid #2ecc71; } .info { - border-left: 5px solid #2980b9; + border-left: 3px solid #fb9b04; + border-right: 3px solid #fb9b04; } .innerText { @@ -61,10 +71,22 @@ body { } @keyframes growDown { + 0% { + transform: scaleY(1); + } + 50% { + transform: scaleY(1.1); + } + 100% { + transform: scaleY(0); + } +} + +@keyframes growUp { 0% { transform: scaleY(0); } - 80% { + 50% { transform: scaleY(1.1); } 100% { diff --git a/[core]/esx_textui/nui/js/script.js b/[core]/esx_textui/nui/js/script.js index 2b625e7a9..9bbd5c6d1 100644 --- a/[core]/esx_textui/nui/js/script.js +++ b/[core]/esx_textui/nui/js/script.js @@ -20,15 +20,15 @@ const types = { // the color codes example `i ~r~love~s~ donuts` const codes = { - "~r~": "red", + "~r~": "#c0392b", "~b~": "#378cbf", - "~g~": "green", + "~g~": "#2ecc71", "~y~": "yellow", "~p~": "purple", "~c~": "grey", "~m~": "#212121", "~u~": "black", - "~o~": "orange", + "~o~": "#fb9b04", }; w.addEventListener("message", (event) => { @@ -47,7 +47,11 @@ w.addEventListener("message", (event) => { } } else if (event.data.action === "hide") { if (lastType !== "") { - doc.getElementById(lastType).style.display = "none"; + doc.getElementById(lastType).classList.add("fadeOut"); + setTimeout(() => { + doc.getElementById(lastType).classList.remove("fadeOut"); + doc.getElementById(lastType).style.display = "none"; + }, 300); } else { console.log("There isn't a textUI displaying!?"); } @@ -78,6 +82,10 @@ notification = (data) => { } doc.getElementById(types[data.type]["id"]).style.display = "block"; - lastType = types[data.type]["id"]; - doc.getElementById(types[data.type]["message"]).innerHTML = data["message"]; + doc.getElementById(types[data.type]["id"]).classList.add("fadeIn"); + setTimeout(() => { + doc.getElementById(types[data.type]["id"]).classList.remove("fadeIn"); + lastType = types[data.type]["id"]; + doc.getElementById(types[data.type]["message"]).innerHTML = data["message"]; + }, 300); }; From 5ae1b3656456dd9bbbbeda9cdc6c5add9e9f0b41 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 9 Nov 2024 10:43:09 +0000 Subject: [PATCH 008/161] fix(esx_notify): disable debug mode --- [core]/esx_notify/Notify.lua | 2 +- [core]/esx_notify/fxmanifest.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/esx_notify/Notify.lua b/[core]/esx_notify/Notify.lua index a1a173422..26dacd06d 100644 --- a/[core]/esx_notify/Notify.lua +++ b/[core]/esx_notify/Notify.lua @@ -1,4 +1,4 @@ -local Debug = true +local Debug = ESX.GetConfig().EnableDebug ---@param notificatonType string the notification type ---@param length number the length of the notification diff --git a/[core]/esx_notify/fxmanifest.lua b/[core]/esx_notify/fxmanifest.lua index 456107c77..c213e0e3c 100644 --- a/[core]/esx_notify/fxmanifest.lua +++ b/[core]/esx_notify/fxmanifest.lua @@ -2,7 +2,7 @@ fx_version 'adamant' lua54 'yes' game 'gta5' -version '1.11.0' +version '1.11.1' author 'ESX-Framework' description 'A beautiful and simple NUI notification system for ESX' From c09ce093582e087039ea34c0c8fcf10aa78a5bfe Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 9 Nov 2024 10:58:34 +0000 Subject: [PATCH 009/161] feat(esx_progressbar): New styling --- [core]/esx_progressbar/nui/index.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/[core]/esx_progressbar/nui/index.html b/[core]/esx_progressbar/nui/index.html index 0ea3bd931..beb84d1b0 100644 --- a/[core]/esx_progressbar/nui/index.html +++ b/[core]/esx_progressbar/nui/index.html @@ -28,7 +28,7 @@ min-width: 15%; width: fit-content; height: 45px; - background-color: rgba(5, 5, 5, 0.8); + background-color: rgba(15, 15, 15, 0.9); border-radius: 5px; animation: growDown 300ms ease-in-out; padding-right: 10px; @@ -41,8 +41,8 @@ right: 0; height: 2px; width: 100%; - border-radius: 20px; - background: linear-gradient(to right, #0052d4, #4364f7, #6fb1fc); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ + border-radius: 15px; + background: linear-gradient(to right, #b84f05, #de7301, #fb9b04); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ } .icon { @@ -61,7 +61,7 @@ p { flex: auto; word-wrap: break-word; - margin-left: 30px; + margin-left: 35px; margin-top: 15px; } @@ -69,6 +69,7 @@ float: left; margin-left: 5px; font-size: 20px; + color: #fb9b04; } @keyframes growDown { From 3a1adc897905e80240d907715741a91a883f6266 Mon Sep 17 00:00:00 2001 From: iSentrie Date: Sat, 9 Nov 2024 17:20:49 +0200 Subject: [PATCH 010/161] es_extended(server/main.lua): return if no weapon return if target has no weapon --- [core]/es_extended/server/main.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 1b9c75221..57108b323 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -462,6 +462,7 @@ if not Config.CustomInventory then if not targetXPlayer.hasWeapon(itemName) then sourceXPlayer.showNotification(TranslateCap("gave_weapon_noweapon", targetXPlayer.name)) targetXPlayer.showNotification(TranslateCap("received_weapon_noweapon", sourceXPlayer.name, weapon.label)) + return end local _, weaponObject = ESX.GetWeapon(itemName) @@ -502,7 +503,8 @@ if not Config.CustomInventory then if itemCount == nil or itemCount < 1 then return xPlayer.showNotification(TranslateCap("imp_invalid_amount")) end - local account = xPlayer.getAccount(itemName) + + local account = xPlayer.getAccount(itemName) if itemCount > account.money or account.money < 1 then return xPlayer.showNotification(TranslateCap("imp_invalid_amount")) From 247b70a56dc431e996efe798bba6c063ce3afdf3 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:37:32 +0100 Subject: [PATCH 011/161] add locale --- [core]/es_extended/locales/en.lua | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index 10a0bdd5f..c0b71869b 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -378,4 +378,37 @@ Locales["en"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "classic black", + ["tint_classic_gray"] = "classic gray", + ["tint_classic_two_tone"] = "classic two-tone", + ["tint_classic_white"] = "classic white", + ["tint_classic_beige"] = "classic beige", + ["tint_classic_green"] = "classic green", + ["tint_classic_blue"] = "classic blue", + ["tint_classic_earth"] = "classic earth", + ["tint_classic_brown_black"] = "classic brown-black", + ["tint_contrast_red"] = "contrast red", + ["tint_contrast_blue"] = "contrast blue", + ["tint_contrast_yellow"] = "contrast yellow", + ["tint_contrast_orange"] = "contrast orange", + ["tint_bold_pink"] = "bold pink", + ["tint_bold_purple_yellow"] = "bold purple-yellow", + ["tint_bold_orange"] = "bold orange", + ["tint_bold_green_purple"] = "bold green-purple", + ["tint_bold_red_feat"] = "bold red feat", + ["tint_bold_green_feat"] = "bold green feat", + ["tint_bold_cyan_feat"] = "bold cyan feat", + ["tint_bold_yellow_feat"] = "bold yellow feat", + ["tint_bold_red_white"] = "bold red-white", + ["tint_bold_blue_white"] = "bold blue-white", + ["tint_metallic_gold"] = "metallic gold", + ["tint_metallic_platinum"] = "metallic platinum", + ["tint_metallic_gray_lilac"] = "metallic gray-lilac", + ["tint_metallic_purple_lime"] = "metallic purple-lime", + ["tint_metallic_red"] = "metallic red", + ["tint_metallic_green"] = "metallic green", + ["tint_metallic_blue"] = "metallic blue", + ["tint_metallic_white_aqua"] = "metallic white-aqua", + ["tint_metallic_red_yellow"] = "metallic red-yellow", } From 5af7bd38a9e01ce1263696763a5320d96d8de9ee Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:37:54 +0100 Subject: [PATCH 012/161] add ai-generated locales --- [core]/es_extended/locales/cs.lua | 32 +++++++++++++++++++++++++++ [core]/es_extended/locales/de.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/el.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/es.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/fi.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/fr.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/he.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/hu.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/id.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/it.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/nl.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/pl.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/sl.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/sr.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/sv.lua | 33 ++++++++++++++++++++++++++++ [core]/es_extended/locales/zh-cn.lua | 33 ++++++++++++++++++++++++++++ 16 files changed, 527 insertions(+) diff --git a/[core]/es_extended/locales/cs.lua b/[core]/es_extended/locales/cs.lua index 0e9d3a92b..a9b278fd7 100644 --- a/[core]/es_extended/locales/cs.lua +++ b/[core]/es_extended/locales/cs.lua @@ -368,4 +368,36 @@ Locales["cs"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_gray"] = "klasická šedá", + ["tint_classic_two_tone"] = "klasická dvoutónová", + ["tint_classic_white"] = "klasická bílá", + ["tint_classic_beige"] = "klasická béžová", + ["tint_classic_green"] = "klasická zelená", + ["tint_classic_blue"] = "klasická modrá", + ["tint_classic_earth"] = "klasická hnědá", + ["tint_classic_brown_black"] = "klasická hnědá-černá", + ["tint_contrast_red"] = "kontrastní červená", + ["tint_contrast_blue"] = "kontrastní modrá", + ["tint_contrast_yellow"] = "kontrastní žlutá", + ["tint_contrast_orange"] = "kontrastní oranžová", + ["tint_bold_pink"] = "odvážná růžová", + ["tint_bold_purple_yellow"] = "odvážná fialovo-žlutá", + ["tint_bold_orange"] = "odvážná oranžová", + ["tint_bold_green_purple"] = "odvážná zeleno-fialová", + ["tint_bold_red_feat"] = "odvážná červená feat", + ["tint_bold_green_feat"] = "odvážná zelená feat", + ["tint_bold_cyan_feat"] = "odvážná azurová feat", + ["tint_bold_yellow_feat"] = "odvážná žlutá feat", + ["tint_bold_red_white"] = "odvážná červená bílá", + ["tint_bold_blue_white"] = "odvážná modrá bílá", + ["tint_metallic_gold"] = "metalická zlatá", + ["tint_metallic_platinum"] = "metalická platina", + ["tint_metallic_gray_lilac"] = "metalická šedá lila", + ["tint_metallic_purple_lime"] = "metalická fialová limetka", + ["tint_metallic_red"] = "metalická červená", + ["tint_metallic_green"] = "metalická zelená", + ["tint_metallic_blue"] = "metalická modrá", + ["tint_metallic_white_aqua"] = "metalická bílá aqua", + ["tint_metallic_red_yellow"] = "metalická červená žlutá", } diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index cbdb524dd..6490f8e71 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -378,4 +378,37 @@ Locales["de"] = { ["tint_lspd"] = "Blau", ["tint_orange"] = "Orange", ["tint_platinum"] = "Platin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klassisches Schwarz", + ["tint_classic_gray"] = "klassisches Grau", + ["tint_classic_two_tone"] = "klassisches Zwei-Ton", + ["tint_classic_white"] = "klassisches Weiß", + ["tint_classic_beige"] = "klassisches Beige", + ["tint_classic_green"] = "klassisches Grün", + ["tint_classic_blue"] = "klassisches Blau", + ["tint_classic_earth"] = "klassisches Erdfarben", + ["tint_classic_brown_black"] = "klassisches Braun-Schwarz", + ["tint_contrast_red"] = "Kontrast Rot", + ["tint_contrast_blue"] = "Kontrast Blau", + ["tint_contrast_yellow"] = "Kontrast Gelb", + ["tint_contrast_orange"] = "Kontrast Orange", + ["tint_bold_pink"] = "fette Pink", + ["tint_bold_purple_yellow"] = "fette Lila-Gelb", + ["tint_bold_orange"] = "fette Orange", + ["tint_bold_green_purple"] = "fette Grün-Lila", + ["tint_bold_red_feat"] = "fette Rot feat", + ["tint_bold_green_feat"] = "fette Grün feat", + ["tint_bold_cyan_feat"] = "fette Cyan feat", + ["tint_bold_yellow_feat"] = "fette Gelb feat", + ["tint_bold_red_white"] = "fette Rot Weiß", + ["tint_bold_blue_white"] = "fette Blau Weiß", + ["tint_metallic_gold"] = "metallisches Gold", + ["tint_metallic_platinum"] = "metallisches Platin", + ["tint_metallic_gray_lilac"] = "metallisches Grau-Lila", + ["tint_metallic_purple_lime"] = "metallisches Lila-Limette", + ["tint_metallic_red"] = "metallisches Rot", + ["tint_metallic_green"] = "metallisches Grün", + ["tint_metallic_blue"] = "metallisches Blau", + ["tint_metallic_white_aqua"] = "metallisches Weiß-Aqua", + ["tint_metallic_red_yellow"] = "metallisches Rot-Gelb", } diff --git a/[core]/es_extended/locales/el.lua b/[core]/es_extended/locales/el.lua index 1de660c6f..ba1d1ab0b 100644 --- a/[core]/es_extended/locales/el.lua +++ b/[core]/es_extended/locales/el.lua @@ -378,4 +378,37 @@ Locales["el"] = { ["tint_lspd"] = "μπλε δέρμα", ["tint_orange"] = "πορτοκαλί δέρμα", ["tint_platinum"] = "πλατίνενο δέρμα", + -- MK2 Weapon Tints + ["tint_classic_black"] = "κλασικό μαύρο", + ["tint_classic_gray"] = "κλασικό γκρι", + ["tint_classic_two_tone"] = "κλασικό δίχρωμο", + ["tint_classic_white"] = "κλασικό λευκό", + ["tint_classic_beige"] = "κλασικό μπεζ", + ["tint_classic_green"] = "κλασικό πράσινο", + ["tint_classic_blue"] = "κλασικό μπλε", + ["tint_classic_earth"] = "κλασική γή", + ["tint_classic_brown_black"] = "κλασικό καφέ-μαύρο", + ["tint_contrast_red"] = "αντίθεση κόκκινο", + ["tint_contrast_blue"] = "αντίθεση μπλε", + ["tint_contrast_yellow"] = "αντίθεση κίτρινο", + ["tint_contrast_orange"] = "αντίθεση πορτοκαλί", + ["tint_bold_pink"] = "τολμηρό ροζ", + ["tint_bold_purple_yellow"] = "τολμηρό μοβ-κίτρινο", + ["tint_bold_orange"] = "τολμηρό πορτοκαλί", + ["tint_bold_green_purple"] = "τολμηρό πράσινο-μοβ", + ["tint_bold_red_feat"] = "τολμηρό κόκκινο feat", + ["tint_bold_green_feat"] = "τολμηρό πράσινο feat", + ["tint_bold_cyan_feat"] = "τολμηρό κυανό feat", + ["tint_bold_yellow_feat"] = "τολμηρό κίτρινο feat", + ["tint_bold_red_white"] = "τολμηρό κόκκινο λευκό", + ["tint_bold_blue_white"] = "τολμηρό μπλε λευκό", + ["tint_metallic_gold"] = "μεταλλικό χρυσό", + ["tint_metallic_platinum"] = "μεταλλικό πλατίνα", + ["tint_metallic_gray_lilac"] = "μεταλλικό γκρι λιλά", + ["tint_metallic_purple_lime"] = "μεταλλικό μοβ-λάιμ", + ["tint_metallic_red"] = "μεταλλικό κόκκινο", + ["tint_metallic_green"] = "μεταλλικό πράσινο", + ["tint_metallic_blue"] = "μεταλλικό μπλε", + ["tint_metallic_white_aqua"] = "μεταλλικό λευκό aqua", + ["tint_metallic_red_yellow"] = "μεταλλικό κόκκινο-κίτρινο", } diff --git a/[core]/es_extended/locales/es.lua b/[core]/es_extended/locales/es.lua index 9ee9a33b2..1b085880c 100644 --- a/[core]/es_extended/locales/es.lua +++ b/[core]/es_extended/locales/es.lua @@ -363,6 +363,39 @@ Locales["es"] = { ["tint_lspd"] = "Skin Azul", ["tint_orange"] = "Skin Naranja", ["tint_platinum"] = "Skin Plata", + -- MK2 Weapon Tints + ["tint_classic_black"] = "negro clásico", + ["tint_classic_gray"] = "gris clásico", + ["tint_classic_two_tone"] = "dos tonos clásicos", + ["tint_classic_white"] = "blanco clásico", + ["tint_classic_beige"] = "beige clásico", + ["tint_classic_green"] = "verde clásico", + ["tint_classic_blue"] = "azul clásico", + ["tint_classic_earth"] = "tierra clásica", + ["tint_classic_brown_black"] = "marrón negro clásico", + ["tint_contrast_red"] = "rojo de contraste", + ["tint_contrast_blue"] = "azul de contraste", + ["tint_contrast_yellow"] = "amarillo de contraste", + ["tint_contrast_orange"] = "naranja de contraste", + ["tint_bold_pink"] = "rosa atrevida", + ["tint_bold_purple_yellow"] = "púrpura amarilla atrevida", + ["tint_bold_orange"] = "naranja atrevido", + ["tint_bold_green_purple"] = "verde púrpura atrevido", + ["tint_bold_red_feat"] = "rojo atrevido feat", + ["tint_bold_green_feat"] = "verde atrevido feat", + ["tint_bold_cyan_feat"] = "cian atrevido feat", + ["tint_bold_yellow_feat"] = "amarillo atrevido feat", + ["tint_bold_red_white"] = "rojo blanco atrevido", + ["tint_bold_blue_white"] = "azul blanco atrevido", + ["tint_metallic_gold"] = "oro metálico", + ["tint_metallic_platinum"] = "platino metálico", + ["tint_metallic_gray_lilac"] = "gris lila metálico", + ["tint_metallic_purple_lime"] = "púrpura lima metálico", + ["tint_metallic_red"] = "rojo metálico", + ["tint_metallic_green"] = "verde metálico", + ["tint_metallic_blue"] = "azul metálico", + ["tint_metallic_white_aqua"] = "blanco aqua metálico", + ["tint_metallic_red_yellow"] = "rojo amarillo metálico", -- Duty related ["stopped_duty"] = "Has salido de servicio.", diff --git a/[core]/es_extended/locales/fi.lua b/[core]/es_extended/locales/fi.lua index 983fa79b8..4d71ff482 100644 --- a/[core]/es_extended/locales/fi.lua +++ b/[core]/es_extended/locales/fi.lua @@ -237,4 +237,37 @@ Locales["fi"] = { ["tint_lspd"] = "Sininen ulkokuori", ["tint_orange"] = "Oranssi ulkokuori", ["tint_platinum"] = "Platina ulkokuori", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klassinen musta", + ["tint_classic_gray"] = "klassinen harmaa", + ["tint_classic_two_tone"] = "klassinen kaksivärinen", + ["tint_classic_white"] = "klassinen valkoinen", + ["tint_classic_beige"] = "klassinen beessi", + ["tint_classic_green"] = "klassinen vihreä", + ["tint_classic_blue"] = "klassinen sininen", + ["tint_classic_earth"] = "klassinen maa", + ["tint_classic_brown_black"] = "klassinen ruskea-musta", + ["tint_contrast_red"] = "kontrastinen punainen", + ["tint_contrast_blue"] = "kontrastinen sininen", + ["tint_contrast_yellow"] = "kontrastinen keltainen", + ["tint_contrast_orange"] = "kontrastinen oranssi", + ["tint_bold_pink"] = "rohkea vaaleanpunainen", + ["tint_bold_purple_yellow"] = "rohkea violetti-keltainen", + ["tint_bold_orange"] = "rohkea oranssi", + ["tint_bold_green_purple"] = "rohkea vihreä-violetti", + ["tint_bold_red_feat"] = "rohkea punainen feat", + ["tint_bold_green_feat"] = "rohkea vihreä feat", + ["tint_bold_cyan_feat"] = "rohkea syaani feat", + ["tint_bold_yellow_feat"] = "rohkea keltainen feat", + ["tint_bold_red_white"] = "rohkea punainen valkoinen", + ["tint_bold_blue_white"] = "rohkea sininen valkoinen", + ["tint_metallic_gold"] = "metallinen kulta", + ["tint_metallic_platinum"] = "metallinen platina", + ["tint_metallic_gray_lilac"] = "metallinen harmaa lila", + ["tint_metallic_purple_lime"] = "metallinen violetti limetti", + ["tint_metallic_red"] = "metallinen punainen", + ["tint_metallic_green"] = "metallinen vihreä", + ["tint_metallic_blue"] = "metallinen sininen", + ["tint_metallic_white_aqua"] = "metallinen valkoinen aqua", + ["tint_metallic_red_yellow"] = "metallinen punainen keltainen", } diff --git a/[core]/es_extended/locales/fr.lua b/[core]/es_extended/locales/fr.lua index 44760c691..3792406e2 100644 --- a/[core]/es_extended/locales/fr.lua +++ b/[core]/es_extended/locales/fr.lua @@ -378,4 +378,37 @@ Locales["fr"] = { ["tint_lspd"] = "skin bleu", ["tint_orange"] = "skin orange", ["tint_platinum"] = "skin platine", + -- MK2 Weapon Tints + ["tint_classic_black"] = "noir classique", + ["tint_classic_gray"] = "gris classique", + ["tint_classic_two_tone"] = "deux tons classiques", + ["tint_classic_white"] = "blanc classique", + ["tint_classic_beige"] = "beige classique", + ["tint_classic_green"] = "vert classique", + ["tint_classic_blue"] = "bleu classique", + ["tint_classic_earth"] = "terre classique", + ["tint_classic_brown_black"] = "marron noir classique", + ["tint_contrast_red"] = "rouge contrasté", + ["tint_contrast_blue"] = "bleu contrasté", + ["tint_contrast_yellow"] = "jaune contrasté", + ["tint_contrast_orange"] = "orange contrasté", + ["tint_bold_pink"] = "rose audacieux", + ["tint_bold_purple_yellow"] = "violet jaune audacieux", + ["tint_bold_orange"] = "orange audacieux", + ["tint_bold_green_purple"] = "vert violet audacieux", + ["tint_bold_red_feat"] = "rouge audacieux feat", + ["tint_bold_green_feat"] = "vert audacieux feat", + ["tint_bold_cyan_feat"] = "cyan audacieux feat", + ["tint_bold_yellow_feat"] = "jaune audacieux feat", + ["tint_bold_red_white"] = "rouge blanc audacieux", + ["tint_bold_blue_white"] = "bleu blanc audacieux", + ["tint_metallic_gold"] = "or métallique", + ["tint_metallic_platinum"] = "platine métallique", + ["tint_metallic_gray_lilac"] = "gris lilas métallique", + ["tint_metallic_purple_lime"] = "violet lime métallique", + ["tint_metallic_red"] = "rouge métallique", + ["tint_metallic_green"] = "vert métallique", + ["tint_metallic_blue"] = "bleu métallique", + ["tint_metallic_white_aqua"] = "blanc aqua métallique", + ["tint_metallic_red_yellow"] = "rouge jaune métallique", } diff --git a/[core]/es_extended/locales/he.lua b/[core]/es_extended/locales/he.lua index 12ebc9e5f..d6216573b 100644 --- a/[core]/es_extended/locales/he.lua +++ b/[core]/es_extended/locales/he.lua @@ -372,4 +372,37 @@ Locales["he"] = { ["tint_lspd"] = "צבע כחול", ["tint_orange"] = "צבע כתום", ["tint_platinum"] = "צבע פלטינה", + -- MK2 Weapon Tints + ["tint_classic_black"] = "שחור קלאסי", + ["tint_classic_gray"] = "אפור קלאסי", + ["tint_classic_two_tone"] = "קלאסי דו-גוני", + ["tint_classic_white"] = "לבן קלאסי", + ["tint_classic_beige"] = "בז' קלאסי", + ["tint_classic_green"] = "ירוק קלאסי", + ["tint_classic_blue"] = "כחול קלאסי", + ["tint_classic_earth"] = "אדמה קלאסית", + ["tint_classic_brown_black"] = "חום שחור קלאסי", + ["tint_contrast_red"] = "אדום קונטרסט", + ["tint_contrast_blue"] = "כחול קונטרסט", + ["tint_contrast_yellow"] = "צהוב קונטרסט", + ["tint_contrast_orange"] = "כתום קונטרסט", + ["tint_bold_pink"] = "ורוד נועז", + ["tint_bold_purple_yellow"] = "סגול צהוב נועז", + ["tint_bold_orange"] = "כתום נועז", + ["tint_bold_green_purple"] = "ירוק סגול נועז", + ["tint_bold_red_feat"] = "אדום נועז feat", + ["tint_bold_green_feat"] = "ירוק נועז feat", + ["tint_bold_cyan_feat"] = "סיאן נועז feat", + ["tint_bold_yellow_feat"] = "צהוב נועז feat", + ["tint_bold_red_white"] = "אדום לבן נועז", + ["tint_bold_blue_white"] = "כחול לבן נועז", + ["tint_metallic_gold"] = "זהב מתכתי", + ["tint_metallic_platinum"] = "פלטינה מתכתית", + ["tint_metallic_gray_lilac"] = "אפור לילך מתכתי", + ["tint_metallic_purple_lime"] = "סגול ליים מתכתי", + ["tint_metallic_red"] = "אדום מתכתי", + ["tint_metallic_green"] = "ירוק מתכתי", + ["tint_metallic_blue"] = "כחול מתכתי", + ["tint_metallic_white_aqua"] = "לבן aqua מתכתי", + ["tint_metallic_red_yellow"] = "אדום צהוב מתכתי", } diff --git a/[core]/es_extended/locales/hu.lua b/[core]/es_extended/locales/hu.lua index 6971d6623..8e1e1d385 100644 --- a/[core]/es_extended/locales/hu.lua +++ b/[core]/es_extended/locales/hu.lua @@ -374,6 +374,39 @@ Locales["hu"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klasszikus fekete", + ["tint_classic_gray"] = "klasszikus szürke", + ["tint_classic_two_tone"] = "klasszikus két szín", + ["tint_classic_white"] = "klasszikus fehér", + ["tint_classic_beige"] = "klasszikus bézs", + ["tint_classic_green"] = "klasszikus zöld", + ["tint_classic_blue"] = "klasszikus kék", + ["tint_classic_earth"] = "klasszikus föld", + ["tint_classic_brown_black"] = "klasszikus barna-fekete", + ["tint_contrast_red"] = "kontraszt piros", + ["tint_contrast_blue"] = "kontraszt kék", + ["tint_contrast_yellow"] = "kontraszt sárga", + ["tint_contrast_orange"] = "kontraszt narancs", + ["tint_bold_pink"] = "merész rózsaszín", + ["tint_bold_purple_yellow"] = "merész lila-sárga", + ["tint_bold_orange"] = "merész narancs", + ["tint_bold_green_purple"] = "merész zöld-lila", + ["tint_bold_red_feat"] = "merész piros feat", + ["tint_bold_green_feat"] = "merész zöld feat", + ["tint_bold_cyan_feat"] = "merész cián feat", + ["tint_bold_yellow_feat"] = "merész sárga feat", + ["tint_bold_red_white"] = "merész piros fehér", + ["tint_bold_blue_white"] = "merész kék fehér", + ["tint_metallic_gold"] = "metál arany", + ["tint_metallic_platinum"] = "metál platina", + ["tint_metallic_gray_lilac"] = "metál szürke lila", + ["tint_metallic_purple_lime"] = "metál lila lime", + ["tint_metallic_red"] = "metál piros", + ["tint_metallic_green"] = "metál zöld", + ["tint_metallic_blue"] = "metál kék", + ["tint_metallic_white_aqua"] = "metál fehér aqua", + ["tint_metallic_red_yellow"] = "metál piros sárga", -- Duty related ["stopped_duty"] = "Leadtad a szolgálatot.", diff --git a/[core]/es_extended/locales/id.lua b/[core]/es_extended/locales/id.lua index 1d7d1d822..bbd2587c7 100644 --- a/[core]/es_extended/locales/id.lua +++ b/[core]/es_extended/locales/id.lua @@ -378,4 +378,37 @@ Locales["id"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "hitam klasik", + ["tint_classic_gray"] = "abu-abu klasik", + ["tint_classic_two_tone"] = "dua warna klasik", + ["tint_classic_white"] = "putih klasik", + ["tint_classic_beige"] = "beige klasik", + ["tint_classic_green"] = "hijau klasik", + ["tint_classic_blue"] = "biru klasik", + ["tint_classic_earth"] = "tanah klasik", + ["tint_classic_brown_black"] = "coklat hitam klasik", + ["tint_contrast_red"] = "merah kontras", + ["tint_contrast_blue"] = "biru kontras", + ["tint_contrast_yellow"] = "kuning kontras", + ["tint_contrast_orange"] = "oren kontras", + ["tint_bold_pink"] = "pink berani", + ["tint_bold_purple_yellow"] = "ungu kuning berani", + ["tint_bold_orange"] = "oren berani", + ["tint_bold_green_purple"] = "hijau ungu berani", + ["tint_bold_red_feat"] = "merah berani feat", + ["tint_bold_green_feat"] = "hijau berani feat", + ["tint_bold_cyan_feat"] = "sian berani feat", + ["tint_bold_yellow_feat"] = "kuning berani feat", + ["tint_bold_red_white"] = "merah putih berani", + ["tint_bold_blue_white"] = "biru putih berani", + ["tint_metallic_gold"] = "emas metalik", + ["tint_metallic_platinum"] = "platina metalik", + ["tint_metallic_gray_lilac"] = "abu-abu lilac metalik", + ["tint_metallic_purple_lime"] = "ungu jeruk nipis metalik", + ["tint_metallic_red"] = "merah metalik", + ["tint_metallic_green"] = "hijau metalik", + ["tint_metallic_blue"] = "biru metalik", + ["tint_metallic_white_aqua"] = "putih aqua metalik", + ["tint_metallic_red_yellow"] = "merah kuning metalik", } diff --git a/[core]/es_extended/locales/it.lua b/[core]/es_extended/locales/it.lua index 24280c155..8a7caf594 100644 --- a/[core]/es_extended/locales/it.lua +++ b/[core]/es_extended/locales/it.lua @@ -378,4 +378,37 @@ Locales["it"] = { ["tint_lspd"] = "color blu", ["tint_orange"] = "color arancio", ["tint_platinum"] = "color platino", + -- MK2 Weapon Tints + ["tint_classic_black"] = "nero classico", + ["tint_classic_gray"] = "grigio classico", + ["tint_classic_two_tone"] = "due toni classico", + ["tint_classic_white"] = "bianco classico", + ["tint_classic_beige"] = "beige classico", + ["tint_classic_green"] = "verde classico", + ["tint_classic_blue"] = "blu classico", + ["tint_classic_earth"] = "terra classica", + ["tint_classic_brown_black"] = "marrone nero classico", + ["tint_contrast_red"] = "rosso contrastante", + ["tint_contrast_blue"] = "blu contrastante", + ["tint_contrast_yellow"] = "giallo contrastante", + ["tint_contrast_orange"] = "arancione contrastante", + ["tint_bold_pink"] = "rosa audace", + ["tint_bold_purple_yellow"] = "viola giallo audace", + ["tint_bold_orange"] = "arancione audace", + ["tint_bold_green_purple"] = "verde viola audace", + ["tint_bold_red_feat"] = "rosso audace feat", + ["tint_bold_green_feat"] = "verde audace feat", + ["tint_bold_cyan_feat"] = "cyan audace feat", + ["tint_bold_yellow_feat"] = "giallo audace feat", + ["tint_bold_red_white"] = "rosso bianco audace", + ["tint_bold_blue_white"] = "blu bianco audace", + ["tint_metallic_gold"] = "oro metallico", + ["tint_metallic_platinum"] = "platino metallico", + ["tint_metallic_gray_lilac"] = "grigio lilla metallico", + ["tint_metallic_purple_lime"] = "viola lime metallico", + ["tint_metallic_red"] = "rosso metallico", + ["tint_metallic_green"] = "verde metallico", + ["tint_metallic_blue"] = "blu metallico", + ["tint_metallic_white_aqua"] = "bianco aqua metallico", + ["tint_metallic_red_yellow"] = "rosso giallo metallico", } diff --git a/[core]/es_extended/locales/nl.lua b/[core]/es_extended/locales/nl.lua index b6a699aca..2dee1716e 100644 --- a/[core]/es_extended/locales/nl.lua +++ b/[core]/es_extended/locales/nl.lua @@ -369,4 +369,37 @@ Locales["nl"] = { ["tint_lspd"] = "blauwe skin", ["tint_orange"] = "oranje skin", ["tint_platinum"] = "platina skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klassiek zwart", + ["tint_classic_gray"] = "klassiek grijs", + ["tint_classic_two_tone"] = "klassiek twee-tonig", + ["tint_classic_white"] = "klassiek wit", + ["tint_classic_beige"] = "klassiek beige", + ["tint_classic_green"] = "klassiek groen", + ["tint_classic_blue"] = "klassiek blauw", + ["tint_classic_earth"] = "klassieke aarde", + ["tint_classic_brown_black"] = "klassiek bruin zwart", + ["tint_contrast_red"] = "contrast rood", + ["tint_contrast_blue"] = "contrast blauw", + ["tint_contrast_yellow"] = "contrast geel", + ["tint_contrast_orange"] = "contrast oranje", + ["tint_bold_pink"] = "gedurfde roze", + ["tint_bold_purple_yellow"] = "gedurfde paarse geel", + ["tint_bold_orange"] = "gedurfde oranje", + ["tint_bold_green_purple"] = "gedurfde groene paarse", + ["tint_bold_red_feat"] = "gedurfde rode feat", + ["tint_bold_green_feat"] = "gedurfde groene feat", + ["tint_bold_cyan_feat"] = "gedurfde cyaan feat", + ["tint_bold_yellow_feat"] = "gedurfde gele feat", + ["tint_bold_red_white"] = "gedurfde rode witte", + ["tint_bold_blue_white"] = "gedurfde blauwe witte", + ["tint_metallic_gold"] = "metallisch goud", + ["tint_metallic_platinum"] = "metallisch platina", + ["tint_metallic_gray_lilac"] = "metallisch grijs lila", + ["tint_metallic_purple_lime"] = "metallisch paarse limo", + ["tint_metallic_red"] = "metallisch rood", + ["tint_metallic_green"] = "metallisch groen", + ["tint_metallic_blue"] = "metallisch blauw", + ["tint_metallic_white_aqua"] = "metallisch wit aqua", + ["tint_metallic_red_yellow"] = "metallisch rood geel", } diff --git a/[core]/es_extended/locales/pl.lua b/[core]/es_extended/locales/pl.lua index d50f91eb7..a9dceb4f1 100644 --- a/[core]/es_extended/locales/pl.lua +++ b/[core]/es_extended/locales/pl.lua @@ -236,4 +236,37 @@ Locales["pl"] = { ["tint_lspd"] = "niebieski skin", ["tint_orange"] = "pomarańczowy skin", ["tint_platinum"] = "platynowy skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klasyczna czerń", + ["tint_classic_gray"] = "klasyczny szary", + ["tint_classic_two_tone"] = "klasyczny dwutonowy", + ["tint_classic_white"] = "klasyczna biel", + ["tint_classic_beige"] = "klasyczny beż", + ["tint_classic_green"] = "klasyczna zieleń", + ["tint_classic_blue"] = "klasyczny niebieski", + ["tint_classic_earth"] = "klasyczna ziemia", + ["tint_classic_brown_black"] = "klasyczny brązowo-czarny", + ["tint_contrast_red"] = "kontrastowy czerwony", + ["tint_contrast_blue"] = "kontrastowy niebieski", + ["tint_contrast_yellow"] = "kontrastowy żółty", + ["tint_contrast_orange"] = "kontrastowy pomarańczowy", + ["tint_bold_pink"] = "odważny różowy", + ["tint_bold_purple_yellow"] = "odważny fioletowo-żółty", + ["tint_bold_orange"] = "odważny pomarańczowy", + ["tint_bold_green_purple"] = "odważny zielono-fioletowy", + ["tint_bold_red_feat"] = "odważny czerwony feat", + ["tint_bold_green_feat"] = "odważny zielony feat", + ["tint_bold_cyan_feat"] = "odważny cyjan feat", + ["tint_bold_yellow_feat"] = "odważny żółty feat", + ["tint_bold_red_white"] = "odważny czerwony biały", + ["tint_bold_blue_white"] = "odważny niebieski biały", + ["tint_metallic_gold"] = "złoto metaliczne", + ["tint_metallic_platinum"] = "platyna metaliczna", + ["tint_metallic_gray_lilac"] = "szaro-liliowe metaliczne", + ["tint_metallic_purple_lime"] = "fioletowo-limonkowe metaliczne", + ["tint_metallic_red"] = "czerwony metaliczny", + ["tint_metallic_green"] = "zielony metaliczny", + ["tint_metallic_blue"] = "niebieski metaliczny", + ["tint_metallic_white_aqua"] = "białe aqua metaliczne", + ["tint_metallic_red_yellow"] = "czerwono-żółte metaliczne", } diff --git a/[core]/es_extended/locales/sl.lua b/[core]/es_extended/locales/sl.lua index 2c3e1f8e8..da0c9de44 100644 --- a/[core]/es_extended/locales/sl.lua +++ b/[core]/es_extended/locales/sl.lua @@ -374,4 +374,37 @@ Locales["sl"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klasična črna", + ["tint_classic_gray"] = "klasična siva", + ["tint_classic_two_tone"] = "klasična dvo-tonska", + ["tint_classic_white"] = "klasična bela", + ["tint_classic_beige"] = "klasična bež", + ["tint_classic_green"] = "klasična zelena", + ["tint_classic_blue"] = "klasična modra", + ["tint_classic_earth"] = "klasična zemlja", + ["tint_classic_brown_black"] = "klasična rjava-črna", + ["tint_contrast_red"] = "kontrastna rdeča", + ["tint_contrast_blue"] = "kontrastna modra", + ["tint_contrast_yellow"] = "kontrastna rumena", + ["tint_contrast_orange"] = "kontrastna oranžna", + ["tint_bold_pink"] = "drzna roza", + ["tint_bold_purple_yellow"] = "drzna vijolično-rumena", + ["tint_bold_orange"] = "drzna oranžna", + ["tint_bold_green_purple"] = "drzna zelena-vijolična", + ["tint_bold_red_feat"] = "drzna rdeča feat", + ["tint_bold_green_feat"] = "drzna zelena feat", + ["tint_bold_cyan_feat"] = "drzna cian feat", + ["tint_bold_yellow_feat"] = "drzna rumena feat", + ["tint_bold_red_white"] = "drzna rdeča bela", + ["tint_bold_blue_white"] = "drzna modra bela", + ["tint_metallic_gold"] = "metalik zlato", + ["tint_metallic_platinum"] = "metalik platina", + ["tint_metallic_gray_lilac"] = "metalik siv lila", + ["tint_metallic_purple_lime"] = "metalik vijolična limona", + ["tint_metallic_red"] = "metalik rdeča", + ["tint_metallic_green"] = "metalik zelena", + ["tint_metallic_blue"] = "metalik modra", + ["tint_metallic_white_aqua"] = "metalik bela aqua", + ["tint_metallic_red_yellow"] = "metalik rdeče rumeno", } diff --git a/[core]/es_extended/locales/sr.lua b/[core]/es_extended/locales/sr.lua index 6aefa25bc..9ef517030 100644 --- a/[core]/es_extended/locales/sr.lua +++ b/[core]/es_extended/locales/sr.lua @@ -374,4 +374,37 @@ Locales["sr"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klasična crna", + ["tint_classic_gray"] = "klasična siva", + ["tint_classic_two_tone"] = "klasična dvo-tonska", + ["tint_classic_white"] = "klasična bela", + ["tint_classic_beige"] = "klasična bež", + ["tint_classic_green"] = "klasična zelena", + ["tint_classic_blue"] = "klasična plava", + ["tint_classic_earth"] = "klasična zemlja", + ["tint_classic_brown_black"] = "klasična braon-crna", + ["tint_contrast_red"] = "kontrastna crvena", + ["tint_contrast_blue"] = "kontrastna plava", + ["tint_contrast_yellow"] = "kontrastna žuta", + ["tint_contrast_orange"] = "kontrastna narandžasta", + ["tint_bold_pink"] = "drska roze", + ["tint_bold_purple_yellow"] = "drska ljubičasto-žuta", + ["tint_bold_orange"] = "drska narandžasta", + ["tint_bold_green_purple"] = "drska zelena-ljubičasta", + ["tint_bold_red_feat"] = "drska crvena feat", + ["tint_bold_green_feat"] = "drska zelena feat", + ["tint_bold_cyan_feat"] = "drska cijan feat", + ["tint_bold_yellow_feat"] = "drska žuta feat", + ["tint_bold_red_white"] = "drska crvena bela", + ["tint_bold_blue_white"] = "drska plava bela", + ["tint_metallic_gold"] = "metalik zlatna", + ["tint_metallic_platinum"] = "metalik platina", + ["tint_metallic_gray_lilac"] = "metalik siva lila", + ["tint_metallic_purple_lime"] = "metalik ljubičasta limeta", + ["tint_metallic_red"] = "metalik crvena", + ["tint_metallic_green"] = "metalik zelena", + ["tint_metallic_blue"] = "metalik plava", + ["tint_metallic_white_aqua"] = "metalik bela aqua", + ["tint_metallic_red_yellow"] = "metalik crvena-žuta", } diff --git a/[core]/es_extended/locales/sv.lua b/[core]/es_extended/locales/sv.lua index 193089a71..e528baca5 100644 --- a/[core]/es_extended/locales/sv.lua +++ b/[core]/es_extended/locales/sv.lua @@ -378,4 +378,37 @@ Locales["sv"] = { ["tint_lspd"] = "blue skin", ["tint_orange"] = "orange skin", ["tint_platinum"] = "platinum skin", + -- MK2 Weapon Tints + ["tint_classic_black"] = "klassisk svart", + ["tint_classic_gray"] = "klassisk grå", + ["tint_classic_two_tone"] = "klassisk tvåfärgad", + ["tint_classic_white"] = "klassisk vit", + ["tint_classic_beige"] = "klassisk beige", + ["tint_classic_green"] = "klassisk grön", + ["tint_classic_blue"] = "klassisk blå", + ["tint_classic_earth"] = "klassisk jord", + ["tint_classic_brown_black"] = "klassisk brun svart", + ["tint_contrast_red"] = "kontrast röd", + ["tint_contrast_blue"] = "kontrast blå", + ["tint_contrast_yellow"] = "kontrast gul", + ["tint_contrast_orange"] = "kontrast orange", + ["tint_bold_pink"] = "djärv rosa", + ["tint_bold_purple_yellow"] = "djärv lila gul", + ["tint_bold_orange"] = "djärv orange", + ["tint_bold_green_purple"] = "djärv grön lila", + ["tint_bold_red_feat"] = "djärv röd feat", + ["tint_bold_green_feat"] = "djärv grön feat", + ["tint_bold_cyan_feat"] = "djärv cyan feat", + ["tint_bold_yellow_feat"] = "djärv gul feat", + ["tint_bold_red_white"] = "djärv röd vit", + ["tint_bold_blue_white"] = "djärv blå vit", + ["tint_metallic_gold"] = "metalliskt guld", + ["tint_metallic_platinum"] = "metalliskt platina", + ["tint_metallic_gray_lilac"] = "metalliskt grå lila", + ["tint_metallic_purple_lime"] = "metalliskt lila lime", + ["tint_metallic_red"] = "metalliskt röd", + ["tint_metallic_green"] = "metalliskt grön", + ["tint_metallic_blue"] = "metalliskt blå", + ["tint_metallic_white_aqua"] = "metalliskt vitt aqua", + ["tint_metallic_red_yellow"] = "metalliskt röd gul", } diff --git a/[core]/es_extended/locales/zh-cn.lua b/[core]/es_extended/locales/zh-cn.lua index a8a1ad8e6..5971cc35b 100644 --- a/[core]/es_extended/locales/zh-cn.lua +++ b/[core]/es_extended/locales/zh-cn.lua @@ -374,4 +374,37 @@ Locales["zh-cn"] = { ["tint_lspd"] = "洛圣都警局色调", ["tint_orange"] = "橙色调", ["tint_platinum"] = "铂金色调", + -- MK2 Weapon Tints + ["tint_classic_black"] = "经典黑色", + ["tint_classic_gray"] = "经典灰色", + ["tint_classic_two_tone"] = "经典双色", + ["tint_classic_white"] = "经典白色", + ["tint_classic_beige"] = "经典米色", + ["tint_classic_green"] = "经典绿色", + ["tint_classic_blue"] = "经典蓝色", + ["tint_classic_earth"] = "经典大地色", + ["tint_classic_brown_black"] = "经典棕黑色", + ["tint_contrast_red"] = "对比红色", + ["tint_contrast_blue"] = "对比蓝色", + ["tint_contrast_yellow"] = "对比黄色", + ["tint_contrast_orange"] = "对比橙色", + ["tint_bold_pink"] = "大胆粉色", + ["tint_bold_purple_yellow"] = "大胆紫黄色", + ["tint_bold_orange"] = "大胆橙色", + ["tint_bold_green_purple"] = "大胆绿色紫色", + ["tint_bold_red_feat"] = "大胆红色feat", + ["tint_bold_green_feat"] = "大胆绿色feat", + ["tint_bold_cyan_feat"] = "大胆青色feat", + ["tint_bold_yellow_feat"] = "大胆黄色feat", + ["tint_bold_red_white"] = "大胆红白色", + ["tint_bold_blue_white"] = "大胆蓝白色", + ["tint_metallic_gold"] = "金属金色", + ["tint_metallic_platinum"] = "金属铂金", + ["tint_metallic_gray_lilac"] = "金属灰紫色", + ["tint_metallic_purple_lime"] = "金属紫色青柠", + ["tint_metallic_red"] = "金属红色", + ["tint_metallic_green"] = "金属绿色", + ["tint_metallic_blue"] = "金属蓝色", + ["tint_metallic_white_aqua"] = "金属白色水蓝", + ["tint_metallic_red_yellow"] = "金属红黄色", } From da0d13e8b9cd214065634ccf2ffa0f5b890b4cd4 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:42:33 +0100 Subject: [PATCH 013/161] add mk2 weapon tints --- [core]/es_extended/shared/config/weapons.lua | 59 ++++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index cbeecb54d..d26ab75ab 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -8,6 +8,41 @@ Config.DefaultWeaponTints = { [6] = TranslateCap("tint_orange"), [7] = TranslateCap("tint_platinum"), } +Config.MK2WeaponTints = { + [0] = TranslateCap('tint_classic_black'), + [1] = TranslateCap('tint_classic_gray'), + [2] = TranslateCap('tint_classic_two_tone'), + [3] = TranslateCap('tint_classic_white'), + [4] = TranslateCap('tint_classic_beige'), + [5] = TranslateCap('tint_classic_green'), + [6] = TranslateCap('tint_classic_blue'), + [7] = TranslateCap('tint_classic_earth'), + [8] = TranslateCap('tint_classic_brown_black'), + [9] = TranslateCap('tint_contrast_red'), + [10] = TranslateCap('tint_contrast_blue'), + [11] = TranslateCap('tint_contrast_yellow'), + [12] = TranslateCap('tint_contrast_orange'), + [13] = TranslateCap('tint_bold_pink'), + [14] = TranslateCap('tint_bold_purple_yellow'), + [15] = TranslateCap('tint_bold_orange'), + [16] = TranslateCap('tint_bold_green_purple'), + [17] = TranslateCap('tint_bold_red_feat'), + [18] = TranslateCap('tint_bold_green_feat'), + [19] = TranslateCap('tint_bold_cyan_feat'), + [20] = TranslateCap('tint_bold_yellow_feat'), + [21] = TranslateCap('tint_bold_red_white'), + [22] = TranslateCap('tint_bold_blue_white'), + [23] = TranslateCap('tint_metallic_gold'), + [24] = TranslateCap('tint_metallic_platinum'), + [25] = TranslateCap('tint_metallic_gray_lilac'), + [26] = TranslateCap('tint_metallic_purple_lime'), + [27] = TranslateCap('tint_metallic_red'), + [28] = TranslateCap('tint_metallic_green'), + [29] = TranslateCap('tint_metallic_blue'), + [30] = TranslateCap('tint_metallic_white_aqua'), + [31] = TranslateCap('tint_metallic_orange_yellow'), + [32] = TranslateCap('tint_metallic_red_yellow') +} Config.Weapons = { -- Melee @@ -111,7 +146,7 @@ Config.Weapons = { name = "WEAPON_REVOLVER_MK2", label = TranslateCap("weapon_revolver_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { 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` }, @@ -153,7 +188,7 @@ Config.Weapons = { name = "WEAPON_PISTOL_MK2", label = TranslateCap("weapon_pistol_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { 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` }, @@ -217,7 +252,7 @@ Config.Weapons = { name = "WEAPON_SNSPISTOL_MK2", label = TranslateCap("weapon_snspistol_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { 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` }, @@ -333,7 +368,7 @@ Config.Weapons = { name = "WEAPON_PUMPSHOTGUN_MK2", label = TranslateCap("weapon_pumpshotgun_mk2"), ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "shells_default", label = TranslateCap("component_shells_default"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_01` }, { name = "shells_incendiary", label = TranslateCap("component_shells_incendiary"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_INCENDIARY` }, @@ -400,7 +435,7 @@ Config.Weapons = { name = "WEAPON_COMBATMG_MK2", label = TranslateCap("weapon_combatmg_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MG` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { 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` }, @@ -525,7 +560,7 @@ Config.Weapons = { name = "WEAPON_SMG_MK2", label = TranslateCap("weapon_smg_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { 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` }, @@ -596,7 +631,7 @@ Config.Weapons = { name = "WEAPON_ASSAULTRIFLE_MK2", label = TranslateCap("weapon_assaultrifle_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_02` }, @@ -651,7 +686,7 @@ Config.Weapons = { name = "WEAPON_BULLPUPRIFLE_MK2", label = TranslateCap("weapon_bullpuprifle_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_02` }, @@ -707,7 +742,7 @@ Config.Weapons = { name = "WEAPON_CARBINERIFLE_MK2", label = TranslateCap("weapon_carbinerifle_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_02` }, @@ -788,7 +823,7 @@ Config.Weapons = { name = "WEAPON_SPECIALCARBINE_MK2", label = TranslateCap("weapon_specialcarbine_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_02` }, @@ -854,7 +889,7 @@ Config.Weapons = { name = "WEAPON_HEAVYSNIPER_MK2", label = TranslateCap("weapon_heavysniper_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_02` }, @@ -903,7 +938,7 @@ Config.Weapons = { name = "WEAPON_MARKSMANRIFLE_MK2", label = TranslateCap("weapon_marksmanrifle_mk2"), ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` }, - tints = Config.DefaultWeaponTints, + tints = Config.MK2WeaponTints, components = { { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_01` }, { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_02` }, From 2ab3cf21bc8663b7b4cb4c7992b50e60005ba3bd Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 10 Nov 2024 08:36:08 +0000 Subject: [PATCH 014/161] fix(es_extended/server): support routing buckets for /car --- [core]/es_extended/server/modules/commands.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/commands.lua b/[core]/es_extended/server/modules/commands.lua index dfb4baa5d..4e9d68625 100644 --- a/[core]/es_extended/server/modules/commands.lua +++ b/[core]/es_extended/server/modules/commands.lua @@ -95,10 +95,17 @@ ESX.RegisterCommand( }) end + local xRoutingBucket = GetPlayerRoutingBucket(xPlayer.source) + ESX.OneSync.SpawnVehicle(args.car, playerCoords, playerHeading, upgrades, function(networkId) if networkId then local vehicle = NetworkGetEntityFromNetworkId(networkId) - for _ = 1, 20 do + + if xRoutingBucket ~= 0 then + SetEntityRoutingBucket(vehicle, xRoutingBucket) + end + + for _ = 1, 100 do Wait(0) SetPedIntoVehicle(playerPed, vehicle, -1) @@ -106,6 +113,7 @@ ESX.RegisterCommand( break end end + if GetVehiclePedIsIn(playerPed, false) ~= vehicle then showError("[^1ERROR^7] The player could not be seated in the vehicle") end From f464bd185899e993a594ea2204ccf1da0dacefe2 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 10 Nov 2024 08:41:04 +0000 Subject: [PATCH 015/161] tweak(esx_progressbar): new colours --- [core]/esx_progressbar/nui/js/script.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/[core]/esx_progressbar/nui/js/script.js b/[core]/esx_progressbar/nui/js/script.js index 330fefb33..9ea8ec273 100644 --- a/[core]/esx_progressbar/nui/js/script.js +++ b/[core]/esx_progressbar/nui/js/script.js @@ -1,13 +1,13 @@ const codes = { - "~r~": "red", + "~r~": "#c0392b", "~b~": "#378cbf", - "~g~": "green", + "~g~": "#2ecc71", "~y~": "yellow", "~p~": "purple", "~c~": "grey", "~m~": "#212121", "~u~": "black", - "~o~": "orange", + "~o~": "#fb9b04", }; const elems = { From a1084d309fe3a58921d8b4c724e63a60aac2714a Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 10 Nov 2024 09:11:35 +0000 Subject: [PATCH 016/161] tweak(esx_menu_default): new theme, maybe --- [core]/esx_menu_default/html/css/app.css | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/[core]/esx_menu_default/html/css/app.css b/[core]/esx_menu_default/html/css/app.css index 4658b79de..a02d2a1d3 100644 --- a/[core]/esx_menu_default/html/css/app.css +++ b/[core]/esx_menu_default/html/css/app.css @@ -9,8 +9,9 @@ min-width: 350px; color: #fff; position: absolute; - background: rgba(33, 33, 33, 0); + background: rgba(15, 15, 15, 0.0); text-align: center; + border-radius: 5px; } .head { @@ -18,9 +19,9 @@ overflow: hidden; padding-bottom: 3px; text-align: center; - margin-bottom: 5px; white-space: nowrap; - background: rgba(10, 10, 10, 0.9); + background: rgba(10, 10, 10, 1); + border-bottom: 2px solid #fb9b04; } .menu .head { @@ -47,16 +48,14 @@ font-size: 13px; height: 16px; text-indent: 5px; - margin-top: 5px; - background: rgba(40, 40, 40, 0.8); - color: rgb(202, 202, 202); - border-radius: 5px; - margin-bottom: 6px; + background: rgba(30, 30, 30, 0.9); + color: rgb(243, 243, 243); } + .menu .menu-items .menu-item.selected { - border: 1px solid rgba(55, 55, 55, 0.9); - background: rgba(20, 20, 20, 0.9); + border: 1px solid #fb9c04ec; + background: rgba(15, 15, 15, 0.9); color: rgba(243, 243, 243); letter-spacing: 0.2px; font-weight: 500; @@ -68,7 +67,7 @@ } .menu.align-top-left { - left: 3rem; + left: 4rem; top: 0; } @@ -99,7 +98,7 @@ } .menu.align-bottom-left { - left: 3rem; + left: 4rem; bottom: 0; } From 970fcf7b07dab9aa0d3f5c987df791315dddf023 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 10 Nov 2024 10:04:30 +0000 Subject: [PATCH 017/161] fix(esx_textui): wipe last message --- [core]/esx_textui/nui/js/script.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/[core]/esx_textui/nui/js/script.js b/[core]/esx_textui/nui/js/script.js index 9bbd5c6d1..ffc54faa1 100644 --- a/[core]/esx_textui/nui/js/script.js +++ b/[core]/esx_textui/nui/js/script.js @@ -1,6 +1,6 @@ const w = window; const doc = document; -let lastType = ""; +let lastType = {}; // Gets the current icon it needs to use. const types = { @@ -33,8 +33,8 @@ const codes = { w.addEventListener("message", (event) => { if (event.data.action === "show") { - if (lastType) { - doc.getElementById(lastType).style.display = "none"; + if (lastType.id !== undefined) { + doc.getElementById(lastType["id"]).style.display = "none"; notification({ type: event.data.type, message: event.data.message, @@ -47,10 +47,11 @@ w.addEventListener("message", (event) => { } } else if (event.data.action === "hide") { if (lastType !== "") { - doc.getElementById(lastType).classList.add("fadeOut"); + doc.getElementById(lastType["id"]).classList.add("fadeOut"); setTimeout(() => { - doc.getElementById(lastType).classList.remove("fadeOut"); - doc.getElementById(lastType).style.display = "none"; + doc.getElementById(lastType["id"]).classList.remove("fadeOut"); + doc.getElementById(lastType["id"]).style.display = "none"; + doc.getElementById(lastType["message"]).innerHTML = ""; }, 300); } else { console.log("There isn't a textUI displaying!?"); @@ -85,7 +86,7 @@ notification = (data) => { doc.getElementById(types[data.type]["id"]).classList.add("fadeIn"); setTimeout(() => { doc.getElementById(types[data.type]["id"]).classList.remove("fadeIn"); - lastType = types[data.type]["id"]; + lastType = types[data.type]; doc.getElementById(types[data.type]["message"]).innerHTML = data["message"]; }, 300); }; From dc9a9b66ae8df0d912e3d650052996fa2a293f73 Mon Sep 17 00:00:00 2001 From: EinS4ckZwiebeln <66690565+EinS4ckZwiebeln@users.noreply.github.com> Date: Sun, 10 Nov 2024 12:52:37 +0100 Subject: [PATCH 018/161] validate player skin --- [core]/esx_skin/server/main.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/[core]/esx_skin/server/main.lua b/[core]/esx_skin/server/main.lua index 6538feb5b..60ec63dfe 100644 --- a/[core]/esx_skin/server/main.lua +++ b/[core]/esx_skin/server/main.lua @@ -1,4 +1,7 @@ RegisterNetEvent("esx_skin:save", function(skin) + if not skin or type(skin) ~= "table" then + return + end local xPlayer = ESX.GetPlayerFromId(source) if not ESX.GetConfig().CustomInventory then From a8940f59500bcf7a19eab1d6354be57f1574cfcc Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 10 Nov 2024 12:13:35 +0000 Subject: [PATCH 019/161] fix/feat(esx_notify): use correct length and add animations correctly --- [core]/esx_notify/nui/js/script.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/[core]/esx_notify/nui/js/script.js b/[core]/esx_notify/nui/js/script.js index 54c89967c..640025219 100644 --- a/[core]/esx_notify/nui/js/script.js +++ b/[core]/esx_notify/nui/js/script.js @@ -57,8 +57,9 @@ notification = (data) => { } } + const id = Math.floor(Math.random() * Math.random()); const notification = $(` -
+
${types[data.type] ? types[data.type]["icon"] : types["info"]["icon"]}

${data["message"]}

@@ -67,8 +68,16 @@ notification = (data) => { `).appendTo(`#root`); setTimeout(() => { - notification.fadeOut(70); - }, 10000); + document.getElementById(id).classList.remove("fadeIn"); + }, 300); + + setTimeout(() => { + document.getElementById(id).classList.add("fadeOut"); + + setTimeout(() => { + document.getElementById(id).remove(); + }, 400); + },data.length); return notification; }; From 40e43904d4260566a820a6c5d917f5223d384cbe Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 10 Nov 2024 14:11:40 +0100 Subject: [PATCH 020/161] refactor(locales): Remove unused duty locales --- [core]/es_extended/locales/es.lua | 4 ---- [core]/es_extended/locales/hu.lua | 4 ---- 2 files changed, 8 deletions(-) diff --git a/[core]/es_extended/locales/es.lua b/[core]/es_extended/locales/es.lua index 1b085880c..9d03a65d2 100644 --- a/[core]/es_extended/locales/es.lua +++ b/[core]/es_extended/locales/es.lua @@ -396,8 +396,4 @@ Locales["es"] = { ["tint_metallic_blue"] = "azul metálico", ["tint_metallic_white_aqua"] = "blanco aqua metálico", ["tint_metallic_red_yellow"] = "rojo amarillo metálico", - - -- Duty related - ["stopped_duty"] = "Has salido de servicio.", - ["started_duty"] = "Has entrado de servicio.", } diff --git a/[core]/es_extended/locales/hu.lua b/[core]/es_extended/locales/hu.lua index 8e1e1d385..5d3b230be 100644 --- a/[core]/es_extended/locales/hu.lua +++ b/[core]/es_extended/locales/hu.lua @@ -407,8 +407,4 @@ Locales["hu"] = { ["tint_metallic_blue"] = "metál kék", ["tint_metallic_white_aqua"] = "metál fehér aqua", ["tint_metallic_red_yellow"] = "metál piros sárga", - - -- Duty related - ["stopped_duty"] = "Leadtad a szolgálatot.", - ["started_duty"] = "Szolgálatba álltál.", } From a3fab28d1f08a7375060748b08e3473e9a3bc592 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 11 Nov 2024 20:36:00 +0000 Subject: [PATCH 021/161] fix: Cached Ped not being updated Correctly --- [core]/es_extended/client/modules/actions.lua | 10 ++++++++++ [core]/skinchanger/client/main.lua | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 455dcff02..1f495682a 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -145,8 +145,18 @@ function Actions:SlowLoop() end) end +function Actions:PedTrackingLoop() + CreateThread(function() + while ESX.PlayerLoaded do + self:TrackPed() + Wait(0) + end + end) +end + function Actions:Init() self:SlowLoop() + self:PedTrackingLoop() end Actions:Init() diff --git a/[core]/skinchanger/client/main.lua b/[core]/skinchanger/client/main.lua index e28aee171..76d5d4f22 100644 --- a/[core]/skinchanger/client/main.lua +++ b/[core]/skinchanger/client/main.lua @@ -44,7 +44,7 @@ function SkinChanger:DefaultModel(male, cb) local model = self:RequestModel(characterModel) SetPlayerModel(PlayerId(), model) - SetPedDefaultComponentVariation(playerPed) + SetPedDefaultComponentVariation(PlayerPedId()) SetModelAsNoLongerNeeded(model) From 4be87bb34f62f30e0943e8ffb247b868f11b8b15 Mon Sep 17 00:00:00 2001 From: luckie12 Date: Tue, 12 Nov 2024 23:53:02 +0100 Subject: [PATCH 022/161] Fix issues --- [core]/esx_identity/dist/assets/index-B6T-7u2-.css | 1 - [core]/esx_identity/dist/assets/index-CBKwBtku.css | 1 + .../dist/assets/{index-CaT4lk_v.js => index-Cmv_Bh-6.js} | 2 +- [core]/esx_identity/dist/index.html | 4 ++-- [core]/esx_identity/src/App.vue | 4 ++-- .../src/components/{HelloWorld.vue => Identity.vue} | 9 ++------- [core]/esx_identity/src/style.css | 7 ++++++- 7 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 [core]/esx_identity/dist/assets/index-B6T-7u2-.css create mode 100644 [core]/esx_identity/dist/assets/index-CBKwBtku.css rename [core]/esx_identity/dist/assets/{index-CaT4lk_v.js => index-Cmv_Bh-6.js} (98%) rename [core]/esx_identity/src/components/{HelloWorld.vue => Identity.vue} (88%) diff --git a/[core]/esx_identity/dist/assets/index-B6T-7u2-.css b/[core]/esx_identity/dist/assets/index-B6T-7u2-.css deleted file mode 100644 index e02998754..000000000 --- a/[core]/esx_identity/dist/assets/index-B6T-7u2-.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";body{font-family:sans-serif;overflow:hidden;background-color:transparent}.none{display:none}.dialog{width:477px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#080808;border-radius:8px;border:none;color:#fff;font-family:Poppins,sans-serif}.dialog__header{background-color:#040404;border-top-left-radius:8px;border-top-right-radius:8px;padding:20px;text-align:center}.dialog__header h1{font-weight:700;margin-bottom:0;font-size:30px}.dialog__header span{color:#fd9800}.dialog__body{padding-block:20px;padding-inline:65px}.dialog__body-hint{text-align:center;margin-bottom:20px}.dialog__body-form{display:flex;flex-direction:column;gap:35px;font-weight:600;font-size:15px}.dialog__form-submit{border:none;background-color:#fd9800;color:#fff;font-size:18px;font-weight:700;border-radius:4px;padding-block:5px}.dialog__form-submit i{margin-right:5px}.dialog__form-group{display:flex;align-items:center;justify-content:space-between;gap:30px;background-color:#040404;position:relative}.dialog__form-group--radio{gap:0}.dialog__form-group label{text-align:center;flex-grow:1;flex-shrink:1;padding-inline:20px}.dialog__form-group input{background-color:transparent;border:none;height:30px;width:180px;flex-shrink:0;color:#fff}.dialog__form-group input:focus{background-color:#0f0f0fe6;border:none;border-radius:5px;color:#fff;outline:none;box-shadow:none}.dialog__form-validation{position:relative}.dialog__form-validation i{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.dialog__form-radio{display:flex;align-items:center}.dialog__form-radio input{display:none}.dialog__form-radio label{display:flex;align-items:center;gap:10px;cursor:pointer}.dialog__form-radio input+label{height:30px;display:flex;align-items:center}.dialog__form-radio input:checked+label{color:#30a1fd;height:30px}.dialog__form-radio input:not(:checked)+label{color:#242424;height:30px}.dialog__form-message{position:absolute;top:35px;right:0;font-size:9px}.dialog__form-message--error{color:#733838}#male:checked+label{color:#30a1fd}#female:checked+label{color:#ff69b4}::placeholder{color:#242424;font-weight:600} diff --git a/[core]/esx_identity/dist/assets/index-CBKwBtku.css b/[core]/esx_identity/dist/assets/index-CBKwBtku.css new file mode 100644 index 000000000..1ad7fe3fb --- /dev/null +++ b/[core]/esx_identity/dist/assets/index-CBKwBtku.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";body{font-family:sans-serif;overflow:hidden;background-color:transparent}.none{display:none}.dialog{width:477px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#080808;border-radius:8px;border:none;color:#fff;font-family:Poppins,sans-serif}.dialog__header{background-color:#040404;border-top-left-radius:8px;border-top-right-radius:8px;padding:20px;text-align:center}.dialog__header h1{font-weight:700;margin-bottom:0;font-size:30px}.dialog__header span{color:#fd9800}.dialog__body{padding-block:20px;padding-inline:65px}.dialog__body-hint{text-align:center;margin-bottom:20px}.dialog__body-form{display:flex;flex-direction:column;gap:35px;font-weight:600;font-size:15px}.dialog__form-submit{border:none;background-color:#fd9800;color:#fff;font-size:18px;font-weight:700;border-radius:4px;padding-block:5px}.dialog__form-submit i{margin-right:5px}.dialog__form-group{display:flex;align-items:center;justify-content:space-between;gap:30px;background-color:#040404;position:relative}.dialog__form-group--radio{gap:0}.dialog__form-group label{flex-grow:1;flex-shrink:1;padding-inline:20px}.dialog__form-group input{background-color:transparent;border:none;height:30px;width:180px;flex-shrink:0;color:#fff}.dialog__form-group input:focus{background-color:#0f0f0fe6;border:none;border-radius:5px;color:#fff;outline:none;box-shadow:none}.dialog__form-validation{position:relative}.dialog__form-validation i{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.dialog__form-radio{display:flex;align-items:center}.dialog__form-radio input{display:none}.dialog__form-radio label{display:flex;align-items:center;gap:10px;cursor:pointer}.dialog__form-radio input+label{height:30px;display:flex;align-items:center}.dialog__form-radio input:checked+label{color:#30a1fd;height:30px}.dialog__form-radio input:not(:checked)+label{color:#242424;height:30px}.dialog__form-message{position:absolute;top:35px;right:0;font-size:9px}.dialog__form-message--error{color:#733838}#male:checked+label{color:#30a1fd}#female:checked+label{color:#ff69b4}::placeholder{color:#242424;font-weight:600}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none} diff --git a/[core]/esx_identity/dist/assets/index-CaT4lk_v.js b/[core]/esx_identity/dist/assets/index-Cmv_Bh-6.js similarity index 98% rename from [core]/esx_identity/dist/assets/index-CaT4lk_v.js rename to [core]/esx_identity/dist/assets/index-Cmv_Bh-6.js index 2936a3178..2eb455ba9 100644 --- a/[core]/esx_identity/dist/assets/index-CaT4lk_v.js +++ b/[core]/esx_identity/dist/assets/index-Cmv_Bh-6.js @@ -30,4 +30,4 @@ var Gf;function N(){return Gf.apply(null,arguments)}function cv(e){Gf=e}function [`+i+"] ";for(o in arguments[0])ge(arguments[0],o)&&(s+=o+": "+arguments[0][o]+", ");s=s.slice(0,-2)}else s=arguments[i];r.push(s)}Zf(e+` Arguments: `+Array.prototype.slice.call(r).join("")+` `+new Error().stack),n=!1}return t.apply(this,arguments)},t)}var Yl={};function Jf(e,t){N.deprecationHandler!=null&&N.deprecationHandler(e,t),Yl[e]||(Zf(t),Yl[e]=!0)}N.suppressDeprecationWarnings=!1;N.deprecationHandler=null;function Zt(e){return typeof Function<"u"&&e instanceof Function||Object.prototype.toString.call(e)==="[object Function]"}function dv(e){var t,n;for(n in e)ge(e,n)&&(t=e[n],Zt(t)?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function To(e,t){var n=En({},e),r;for(r in t)ge(t,r)&&(Ln(e[r])&&Ln(t[r])?(n[r]={},En(n[r],e[r]),En(n[r],t[r])):t[r]!=null?n[r]=t[r]:delete n[r]);for(r in e)ge(e,r)&&!ge(t,r)&&Ln(e[r])&&(n[r]=En({},n[r]));return n}function Ta(e){e!=null&&this.set(e)}var Do;Object.keys?Do=Object.keys:Do=function(e){var t,n=[];for(t in e)ge(e,t)&&n.push(t);return n};var hv={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function pv(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return Zt(r)?r.call(t,n):r}function Gt(e,t,n){var r=""+Math.abs(e),s=t-r.length,i=e>=0;return(i?n?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+r}var Da=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ms=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ki={},ar={};function K(e,t,n,r){var s=r;typeof r=="string"&&(s=function(){return this[r]()}),e&&(ar[e]=s),t&&(ar[t[0]]=function(){return Gt(s.apply(this,arguments),t[1],t[2])}),n&&(ar[n]=function(){return this.localeData().ordinal(s.apply(this,arguments),e)})}function _v(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function mv(e){var t=e.match(Da),n,r;for(n=0,r=t.length;n=0&&ms.test(e);)e=e.replace(ms,r),ms.lastIndex=0,n-=1;return e}var gv={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function vv(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(Da).map(function(r){return r==="MMMM"||r==="MM"||r==="DD"||r==="dddd"?r.slice(1):r}).join(""),this._longDateFormat[e])}var yv="Invalid date";function Ev(){return this._invalidDate}var bv="%d",Ov=/\d{1,2}/;function Sv(e){return this._ordinal.replace("%d",e)}var wv={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function xv(e,t,n,r){var s=this._relativeTime[n];return Zt(s)?s(e,t,n,r):s.replace(/%d/i,e)}function Tv(e,t){var n=this._relativeTime[e>0?"future":"past"];return Zt(n)?n(t):n.replace(/%s/i,t)}var $l={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function kt(e){return typeof e=="string"?$l[e]||$l[e.toLowerCase()]:void 0}function Aa(e){var t={},n,r;for(r in e)ge(e,r)&&(n=kt(r),n&&(t[n]=e[r]));return t}var Dv={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Av(e){var t=[],n;for(n in e)ge(e,n)&&t.push({unit:n,priority:Dv[n]});return t.sort(function(r,s){return r.priority-s.priority}),t}var Qf=/\d/,bt=/\d\d/,ed=/\d{3}/,ka=/\d{4}/,pi=/[+-]?\d{6}/,Re=/\d\d?/,td=/\d\d\d\d?/,nd=/\d\d\d\d\d\d?/,_i=/\d{1,3}/,Ca=/\d{1,4}/,mi=/[+-]?\d{1,6}/,mr=/\d+/,gi=/[+-]?\d+/,kv=/Z|[+-]\d\d:?\d\d/gi,vi=/Z|[+-]\d\d(?::?\d\d)?/gi,Cv=/[+-]?\d+(\.\d{1,3})?/,as=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,gr=/^[1-9]\d?/,Ma=/^([1-9]\d|\d)/,Bs;Bs={};function Y(e,t,n){Bs[e]=Zt(t)?t:function(r,s){return r&&n?n:t}}function Mv(e,t){return ge(Bs,e)?Bs[e](t._strict,t._locale):new RegExp(Fv(e))}function Fv(e){return cn(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,n,r,s,i){return n||r||s||i}))}function cn(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function xt(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function ce(e){var t=+e,n=0;return t!==0&&isFinite(t)&&(n=xt(t)),n}var Ao={};function xe(e,t){var n,r=t,s;for(typeof e=="string"&&(e=[e]),dn(t)&&(r=function(i,o){o[t]=ce(i)}),s=e.length,n=0;n68?1900:2e3)};var rd=vr("FullYear",!0);function Vv(){return yi(this.year())}function vr(e,t){return function(n){return n!=null?(sd(this,e,n),N.updateOffset(this,t),this):Zr(this,e)}}function Zr(e,t){if(!e.isValid())return NaN;var n=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return r?n.getUTCSeconds():n.getSeconds();case"Minutes":return r?n.getUTCMinutes():n.getMinutes();case"Hours":return r?n.getUTCHours():n.getHours();case"Date":return r?n.getUTCDate():n.getDate();case"Day":return r?n.getUTCDay():n.getDay();case"Month":return r?n.getUTCMonth():n.getMonth();case"FullYear":return r?n.getUTCFullYear():n.getFullYear();default:return NaN}}function sd(e,t,n){var r,s,i,o,a;if(!(!e.isValid()||isNaN(n))){switch(r=e._d,s=e._isUTC,t){case"Milliseconds":return void(s?r.setUTCMilliseconds(n):r.setMilliseconds(n));case"Seconds":return void(s?r.setUTCSeconds(n):r.setSeconds(n));case"Minutes":return void(s?r.setUTCMinutes(n):r.setMinutes(n));case"Hours":return void(s?r.setUTCHours(n):r.setHours(n));case"Date":return void(s?r.setUTCDate(n):r.setDate(n));case"FullYear":break;default:return}i=n,o=e.month(),a=e.date(),a=a===29&&o===1&&!yi(i)?28:a,s?r.setUTCFullYear(i,o,a):r.setFullYear(i,o,a)}}function Nv(e){return e=kt(e),Zt(this[e])?this[e]():this}function Uv(e,t){if(typeof e=="object"){e=Aa(e);var n=Av(e),r,s=n.length;for(r=0;r=0?(a=new Date(e+400,t,n,r,s,i,o),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,s,i,o),a}function Jr(e){var t,n;return e<100&&e>=0?(n=Array.prototype.slice.call(arguments),n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Hs(e,t,n){var r=7+t-n,s=(7+Jr(e,0,r).getUTCDay()-t)%7;return-s+r-1}function cd(e,t,n,r,s){var i=(7+n-r)%7,o=Hs(e,r,s),a=1+7*(t-1)+i+o,u,l;return a<=0?(u=e-1,l=Ur(u)+a):a>Ur(e)?(u=e+1,l=a-Ur(e)):(u=e,l=a),{year:u,dayOfYear:l}}function Xr(e,t,n){var r=Hs(e.year(),t,n),s=Math.floor((e.dayOfYear()-r-1)/7)+1,i,o;return s<1?(o=e.year()-1,i=s+fn(o,t,n)):s>fn(e.year(),t,n)?(i=s-fn(e.year(),t,n),o=e.year()+1):(o=e.year(),i=s),{week:i,year:o}}function fn(e,t,n){var r=Hs(e,t,n),s=Hs(e+1,t,n);return(Ur(e)-r+s)/7}K("w",["ww",2],"wo","week");K("W",["WW",2],"Wo","isoWeek");Y("w",Re,gr);Y("ww",Re,bt);Y("W",Re,gr);Y("WW",Re,bt);us(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=ce(e)});function Jv(e){return Xr(e,this._week.dow,this._week.doy).week}var Xv={dow:0,doy:6};function Qv(){return this._week.dow}function ey(){return this._week.doy}function ty(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function ny(e){var t=Xr(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}K("d",0,"do","day");K("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});K("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});K("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});K("e",0,0,"weekday");K("E",0,0,"isoWeekday");Y("d",Re);Y("e",Re);Y("E",Re);Y("dd",function(e,t){return t.weekdaysMinRegex(e)});Y("ddd",function(e,t){return t.weekdaysShortRegex(e)});Y("dddd",function(e,t){return t.weekdaysRegex(e)});us(["dd","ddd","dddd"],function(e,t,n,r){var s=n._locale.weekdaysParse(e,r,n._strict);s!=null?t.d=s:se(n).invalidWeekday=e});us(["d","e","E"],function(e,t,n,r){t[r]=ce(e)});function ry(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function sy(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Ia(e,t){return e.slice(t,7).concat(e.slice(0,t))}var iy="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),fd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),oy="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ay=as,uy=as,ly=as;function cy(e,t){var n=Vt(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?Ia(n,this._week.dow):e?n[e.day()]:n}function fy(e){return e===!0?Ia(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function dy(e){return e===!0?Ia(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function hy(e,t,n){var r,s,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=qt([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?t==="dddd"?(s=We.call(this._weekdaysParse,o),s!==-1?s:null):t==="ddd"?(s=We.call(this._shortWeekdaysParse,o),s!==-1?s:null):(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null):t==="dddd"?(s=We.call(this._weekdaysParse,o),s!==-1||(s=We.call(this._shortWeekdaysParse,o),s!==-1)?s:(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null)):t==="ddd"?(s=We.call(this._shortWeekdaysParse,o),s!==-1||(s=We.call(this._weekdaysParse,o),s!==-1)?s:(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null)):(s=We.call(this._minWeekdaysParse,o),s!==-1||(s=We.call(this._weekdaysParse,o),s!==-1)?s:(s=We.call(this._shortWeekdaysParse,o),s!==-1?s:null))}function py(e,t,n){var r,s,i;if(this._weekdaysParseExact)return hy.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(s=qt([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(s,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(s,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(s,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&t==="dddd"&&this._fullWeekdaysParse[r].test(e))return r;if(n&&t==="ddd"&&this._shortWeekdaysParse[r].test(e))return r;if(n&&t==="dd"&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function _y(e){if(!this.isValid())return e!=null?this:NaN;var t=Zr(this,"Day");return e!=null?(e=ry(e,this.localeData()),this.add(e-t,"d")):t}function my(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function gy(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=sy(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function vy(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(ge(this,"_weekdaysRegex")||(this._weekdaysRegex=ay),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function yy(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(ge(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=uy),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Ey(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(ge(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ly),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ra(){function e(c,f){return f.length-c.length}var t=[],n=[],r=[],s=[],i,o,a,u,l;for(i=0;i<7;i++)o=qt([2e3,1]).day(i),a=cn(this.weekdaysMin(o,"")),u=cn(this.weekdaysShort(o,"")),l=cn(this.weekdays(o,"")),t.push(a),n.push(u),r.push(l),s.push(a),s.push(u),s.push(l);t.sort(e),n.sort(e),r.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Pa(){return this.hours()%12||12}function by(){return this.hours()||24}K("H",["HH",2],0,"hour");K("h",["hh",2],0,Pa);K("k",["kk",2],0,by);K("hmm",0,0,function(){return""+Pa.apply(this)+Gt(this.minutes(),2)});K("hmmss",0,0,function(){return""+Pa.apply(this)+Gt(this.minutes(),2)+Gt(this.seconds(),2)});K("Hmm",0,0,function(){return""+this.hours()+Gt(this.minutes(),2)});K("Hmmss",0,0,function(){return""+this.hours()+Gt(this.minutes(),2)+Gt(this.seconds(),2)});function dd(e,t){K(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}dd("a",!0);dd("A",!1);function hd(e,t){return t._meridiemParse}Y("a",hd);Y("A",hd);Y("H",Re,Ma);Y("h",Re,gr);Y("k",Re,gr);Y("HH",Re,bt);Y("hh",Re,bt);Y("kk",Re,bt);Y("hmm",td);Y("hmmss",nd);Y("Hmm",td);Y("Hmmss",nd);xe(["H","HH"],ze);xe(["k","kk"],function(e,t,n){var r=ce(e);t[ze]=r===24?0:r});xe(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e});xe(["h","hh"],function(e,t,n){t[ze]=ce(e),se(n).bigHour=!0});xe("hmm",function(e,t,n){var r=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r)),se(n).bigHour=!0});xe("hmmss",function(e,t,n){var r=e.length-4,s=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r,2)),t[ln]=ce(e.substr(s)),se(n).bigHour=!0});xe("Hmm",function(e,t,n){var r=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r))});xe("Hmmss",function(e,t,n){var r=e.length-4,s=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r,2)),t[ln]=ce(e.substr(s))});function Oy(e){return(e+"").toLowerCase().charAt(0)==="p"}var Sy=/[ap]\.?m?\.?/i,wy=vr("Hours",!0);function xy(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var pd={calendar:hv,longDateFormat:gv,invalidDate:yv,ordinal:bv,dayOfMonthOrdinalParse:Ov,relativeTime:wv,months:Yv,monthsShort:id,week:Xv,weekdays:iy,weekdaysMin:oy,weekdaysShort:fd,meridiemParse:Sy},Ve={},Sr={},Qr;function Ty(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(s=Ei(i.slice(0,n).join("-")),s)return s;if(r&&r.length>=n&&Ty(i,r)>=n-1)break;n--}t++}return Qr}function Ay(e){return!!(e&&e.match("^[^/\\\\]*$"))}function Ei(e){var t=null,n;if(Ve[e]===void 0&&typeof Ds<"u"&&Ds&&Ds.exports&&Ay(e))try{t=Qr._abbr,n=require,n("./locale/"+e),wn(t)}catch{Ve[e]=null}return Ve[e]}function wn(e,t){var n;return e&&(dt(t)?n=pn(e):n=Va(e,t),n?Qr=n:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),Qr._abbr}function Va(e,t){if(t!==null){var n,r=pd;if(t.abbr=e,Ve[e]!=null)Jf("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Ve[e]._config;else if(t.parentLocale!=null)if(Ve[t.parentLocale]!=null)r=Ve[t.parentLocale]._config;else if(n=Ei(t.parentLocale),n!=null)r=n._config;else return Sr[t.parentLocale]||(Sr[t.parentLocale]=[]),Sr[t.parentLocale].push({name:e,config:t}),null;return Ve[e]=new Ta(To(r,t)),Sr[e]&&Sr[e].forEach(function(s){Va(s.name,s.config)}),wn(e),Ve[e]}else return delete Ve[e],null}function ky(e,t){if(t!=null){var n,r,s=pd;Ve[e]!=null&&Ve[e].parentLocale!=null?Ve[e].set(To(Ve[e]._config,t)):(r=Ei(e),r!=null&&(s=r._config),t=To(s,t),r==null&&(t.abbr=e),n=new Ta(t),n.parentLocale=Ve[e],Ve[e]=n),wn(e)}else Ve[e]!=null&&(Ve[e].parentLocale!=null?(Ve[e]=Ve[e].parentLocale,e===wn()&&wn(e)):Ve[e]!=null&&delete Ve[e]);return Ve[e]}function pn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Qr;if(!Vt(e)){if(t=Ei(e),t)return t;e=[e]}return Dy(e)}function Cy(){return Do(Ve)}function Na(e){var t,n=e._a;return n&&se(e).overflow===-2&&(t=n[un]<0||n[un]>11?un:n[Ht]<1||n[Ht]>Fa(n[nt],n[un])?Ht:n[ze]<0||n[ze]>24||n[ze]===24&&(n[Ft]!==0||n[ln]!==0||n[Pn]!==0)?ze:n[Ft]<0||n[Ft]>59?Ft:n[ln]<0||n[ln]>59?ln:n[Pn]<0||n[Pn]>999?Pn:-1,se(e)._overflowDayOfYear&&(tHt)&&(t=Ht),se(e)._overflowWeeks&&t===-1&&(t=Rv),se(e)._overflowWeekday&&t===-1&&(t=Pv),se(e).overflow=t),e}var My=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fy=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Iy=/Z|[+-]\d\d(?::?\d\d)?/,gs=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Gi=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ry=/^\/?Date\((-?\d+)/i,Py=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Vy={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function _d(e){var t,n,r=e._i,s=My.exec(r)||Fy.exec(r),i,o,a,u,l=gs.length,c=Gi.length;if(s){for(se(e).iso=!0,t=0,n=l;tUr(o)||e._dayOfYear===0)&&(se(e)._overflowDayOfYear=!0),n=Jr(o,0,e._dayOfYear),e._a[un]=n.getUTCMonth(),e._a[Ht]=n.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=r[t]=s[t];for(;t<7;t++)e._a[t]=r[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[ze]===24&&e._a[Ft]===0&&e._a[ln]===0&&e._a[Pn]===0&&(e._nextDay=!0,e._a[ze]=0),e._d=(e._useUTC?Jr:Zv).apply(null,r),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ze]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==i&&(se(e).weekdayMismatch=!0)}}function Hy(e){var t,n,r,s,i,o,a,u,l;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(i=1,o=4,n=Qn(t.GG,e._a[nt],Xr(Ie(),1,4).year),r=Qn(t.W,1),s=Qn(t.E,1),(s<1||s>7)&&(u=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,l=Xr(Ie(),i,o),n=Qn(t.gg,e._a[nt],l.year),r=Qn(t.w,l.week),t.d!=null?(s=t.d,(s<0||s>6)&&(u=!0)):t.e!=null?(s=t.e+i,(t.e<0||t.e>6)&&(u=!0)):s=i),r<1||r>fn(n,i,o)?se(e)._overflowWeeks=!0:u!=null?se(e)._overflowWeekday=!0:(a=cd(n,r,s,i,o),e._a[nt]=a.year,e._dayOfYear=a.dayOfYear)}N.ISO_8601=function(){};N.RFC_2822=function(){};function La(e){if(e._f===N.ISO_8601){_d(e);return}if(e._f===N.RFC_2822){md(e);return}e._a=[],se(e).empty=!0;var t=""+e._i,n,r,s,i,o,a=t.length,u=0,l,c;for(s=Xf(e._f,e._locale).match(Da)||[],c=s.length,n=0;n0&&se(e).unusedInput.push(o),t=t.slice(t.indexOf(r)+r.length),u+=r.length),ar[i]?(r?se(e).empty=!1:se(e).unusedTokens.push(i),Iv(i,r,e)):e._strict&&!r&&se(e).unusedTokens.push(i);se(e).charsLeftOver=a-u,t.length>0&&se(e).unusedInput.push(t),e._a[ze]<=12&&se(e).bigHour===!0&&e._a[ze]>0&&(se(e).bigHour=void 0),se(e).parsedDateParts=e._a.slice(0),se(e).meridiem=e._meridiem,e._a[ze]=Wy(e._locale,e._a[ze],e._meridiem),l=se(e).era,l!==null&&(e._a[nt]=e._locale.erasConvertYear(l,e._a[nt])),Ua(e),Na(e)}function Wy(e,t,n){var r;return n==null?t:e.meridiemHour!=null?e.meridiemHour(t,n):(e.isPM!=null&&(r=e.isPM(n),r&&t<12&&(t+=12),!r&&t===12&&(t=0)),t)}function zy(e){var t,n,r,s,i,o,a=!1,u=e._f.length;if(u===0){se(e).invalidFormat=!0,e._d=new Date(NaN);return}for(s=0;sthis?this:e:hi()});function yd(e,t){var n,r;if(t.length===1&&Vt(t[0])&&(t=t[0]),!t.length)return Ie();for(n=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function h1(){if(!dt(this._isDSTShifted))return this._isDSTShifted;var e={},t;return xa(e,this),e=gd(e),e._a?(t=e._isUTC?qt(e._a):Ie(e._a),this._isDSTShifted=this.isValid()&&s1(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function p1(){return this.isValid()?!this._isUTC:!1}function _1(){return this.isValid()?this._isUTC:!1}function bd(){return this.isValid()?this._isUTC&&this._offset===0:!1}var m1=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,g1=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ut(e,t){var n=e,r=null,s,i,o;return xs(e)?n={ms:e._milliseconds,d:e._days,M:e._months}:dn(e)||!isNaN(+e)?(n={},t?n[t]=+e:n.milliseconds=+e):(r=m1.exec(e))?(s=r[1]==="-"?-1:1,n={y:0,d:ce(r[Ht])*s,h:ce(r[ze])*s,m:ce(r[Ft])*s,s:ce(r[ln])*s,ms:ce(ko(r[Pn]*1e3))*s}):(r=g1.exec(e))?(s=r[1]==="-"?-1:1,n={y:Cn(r[2],s),M:Cn(r[3],s),w:Cn(r[4],s),d:Cn(r[5],s),h:Cn(r[6],s),m:Cn(r[7],s),s:Cn(r[8],s)}):n==null?n={}:typeof n=="object"&&("from"in n||"to"in n)&&(o=v1(Ie(n.from),Ie(n.to)),n={},n.ms=o.milliseconds,n.M=o.months),i=new bi(n),xs(e)&&ge(e,"_locale")&&(i._locale=e._locale),xs(e)&&ge(e,"_isValid")&&(i._isValid=e._isValid),i}Ut.fn=bi.prototype;Ut.invalid=r1;function Cn(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Bl(e,t){var n={};return n.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function v1(e,t){var n;return e.isValid()&&t.isValid()?(t=$a(t,e),e.isBefore(t)?n=Bl(e,t):(n=Bl(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Od(e,t){return function(n,r){var s,i;return r!==null&&!isNaN(+r)&&(Jf(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),s=Ut(n,r),Sd(this,s,e),this}}function Sd(e,t,n,r){var s=t._milliseconds,i=ko(t._days),o=ko(t._months);e.isValid()&&(r=r??!0,o&&ad(e,Zr(e,"Month")+o*n),i&&sd(e,"Date",Zr(e,"Date")+i*n),s&&e._d.setTime(e._d.valueOf()+s*n),r&&N.updateOffset(e,i||o))}var y1=Od(1,"add"),E1=Od(-1,"subtract");function wd(e){return typeof e=="string"||e instanceof String}function b1(e){return Nt(e)||is(e)||wd(e)||dn(e)||S1(e)||O1(e)||e===null||e===void 0}function O1(e){var t=Ln(e)&&!Sa(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],s,i,o=r.length;for(s=0;sn.valueOf():n.valueOf()9999?ws(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Zt(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",ws(n,"Z")):ws(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function N1(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",n,r,s,i;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),n="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",s="-MM-DD[T]HH:mm:ss.SSS",i=t+'[")]',this.format(n+r+s+i)}function U1(e){e||(e=this.isUtc()?N.defaultFormatUtc:N.defaultFormat);var t=ws(this,e);return this.localeData().postformat(t)}function L1(e,t){return this.isValid()&&(Nt(e)&&e.isValid()||Ie(e).isValid())?Ut({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Y1(e){return this.from(Ie(),e)}function $1(e,t){return this.isValid()&&(Nt(e)&&e.isValid()||Ie(e).isValid())?Ut({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function j1(e){return this.to(Ie(),e)}function xd(e){var t;return e===void 0?this._locale._abbr:(t=pn(e),t!=null&&(this._locale=t),this)}var Td=At("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function Dd(){return this._locale}var Ws=1e3,ur=60*Ws,zs=60*ur,Ad=(365*400+97)*24*zs;function lr(e,t){return(e%t+t)%t}function kd(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-Ad:new Date(e,t,n).valueOf()}function Cd(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-Ad:Date.UTC(e,t,n)}function B1(e){var t,n;if(e=kt(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?Cd:kd,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=lr(t+(this._isUTC?0:this.utcOffset()*ur),zs);break;case"minute":t=this._d.valueOf(),t-=lr(t,ur);break;case"second":t=this._d.valueOf(),t-=lr(t,Ws);break}return this._d.setTime(t),N.updateOffset(this,!0),this}function H1(e){var t,n;if(e=kt(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?Cd:kd,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=zs-lr(t+(this._isUTC?0:this.utcOffset()*ur),zs)-1;break;case"minute":t=this._d.valueOf(),t+=ur-lr(t,ur)-1;break;case"second":t=this._d.valueOf(),t+=Ws-lr(t,Ws)-1;break}return this._d.setTime(t),N.updateOffset(this,!0),this}function W1(){return this._d.valueOf()-(this._offset||0)*6e4}function z1(){return Math.floor(this.valueOf()/1e3)}function K1(){return new Date(this.valueOf())}function G1(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function q1(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Z1(){return this.isValid()?this.toISOString():null}function J1(){return wa(this)}function X1(){return En({},se(this))}function Q1(){return se(this).overflow}function eE(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}K("N",0,0,"eraAbbr");K("NN",0,0,"eraAbbr");K("NNN",0,0,"eraAbbr");K("NNNN",0,0,"eraName");K("NNNNN",0,0,"eraNarrow");K("y",["y",1],"yo","eraYear");K("y",["yy",2],0,"eraYear");K("y",["yyy",3],0,"eraYear");K("y",["yyyy",4],0,"eraYear");Y("N",ja);Y("NN",ja);Y("NNN",ja);Y("NNNN",fE);Y("NNNNN",dE);xe(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,r){var s=n._locale.erasParse(e,r,n._strict);s?se(n).era=s:se(n).invalidEra=e});Y("y",mr);Y("yy",mr);Y("yyy",mr);Y("yyyy",mr);Y("yo",hE);xe(["y","yy","yyy","yyyy"],nt);xe(["yo"],function(e,t,n,r){var s;n._locale._eraYearOrdinalRegex&&(s=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[nt]=n._locale.eraYearOrdinalParse(e,s):t[nt]=parseInt(e,10)});function tE(e,t){var n,r,s,i=this._eras||pn("en")._eras;for(n=0,r=i.length;n=0)return i[r]}function rE(e,t){var n=e.since<=e.until?1:-1;return t===void 0?N(e.since).year():N(e.since).year()+(t-e.offset)*n}function sE(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;ei&&(t=i),EE.call(this,e,t,n,r,s))}function EE(e,t,n,r,s){var i=cd(e,t,n,r,s),o=Jr(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}K("Q",0,"Qo","quarter");Y("Q",Qf);xe("Q",function(e,t){t[un]=(ce(e)-1)*3});function bE(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}K("D",["DD",2],"Do","date");Y("D",Re,gr);Y("DD",Re,bt);Y("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});xe(["D","DD"],Ht);xe("Do",function(e,t){t[Ht]=ce(e.match(Re)[0])});var Fd=vr("Date",!0);K("DDD",["DDDD",3],"DDDo","dayOfYear");Y("DDD",_i);Y("DDDD",ed);xe(["DDD","DDDD"],function(e,t,n){n._dayOfYear=ce(e)});function OE(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}K("m",["mm",2],0,"minute");Y("m",Re,Ma);Y("mm",Re,bt);xe(["m","mm"],Ft);var SE=vr("Minutes",!1);K("s",["ss",2],0,"second");Y("s",Re,Ma);Y("ss",Re,bt);xe(["s","ss"],ln);var wE=vr("Seconds",!1);K("S",0,0,function(){return~~(this.millisecond()/100)});K(0,["SS",2],0,function(){return~~(this.millisecond()/10)});K(0,["SSS",3],0,"millisecond");K(0,["SSSS",4],0,function(){return this.millisecond()*10});K(0,["SSSSS",5],0,function(){return this.millisecond()*100});K(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});K(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});K(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});K(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});Y("S",_i,Qf);Y("SS",_i,bt);Y("SSS",_i,ed);var bn,Id;for(bn="SSSS";bn.length<=9;bn+="S")Y(bn,mr);function xE(e,t){t[Pn]=ce(("0."+e)*1e3)}for(bn="S";bn.length<=9;bn+="S")xe(bn,xE);Id=vr("Milliseconds",!1);K("z",0,0,"zoneAbbr");K("zz",0,0,"zoneName");function TE(){return this._isUTC?"UTC":""}function DE(){return this._isUTC?"Coordinated Universal Time":""}var k=os.prototype;k.add=y1;k.calendar=T1;k.clone=D1;k.diff=R1;k.endOf=H1;k.format=U1;k.from=L1;k.fromNow=Y1;k.to=$1;k.toNow=j1;k.get=Nv;k.invalidAt=Q1;k.isAfter=A1;k.isBefore=k1;k.isBetween=C1;k.isSame=M1;k.isSameOrAfter=F1;k.isSameOrBefore=I1;k.isValid=J1;k.lang=Td;k.locale=xd;k.localeData=Dd;k.max=Jy;k.min=Zy;k.parsingFlags=X1;k.set=Uv;k.startOf=B1;k.subtract=E1;k.toArray=G1;k.toObject=q1;k.toDate=K1;k.toISOString=V1;k.inspect=N1;typeof Symbol<"u"&&Symbol.for!=null&&(k[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});k.toJSON=Z1;k.toString=P1;k.unix=z1;k.valueOf=W1;k.creationData=eE;k.eraName=sE;k.eraNarrow=iE;k.eraAbbr=oE;k.eraYear=aE;k.year=rd;k.isLeapYear=Vv;k.weekYear=pE;k.isoWeekYear=_E;k.quarter=k.quarters=bE;k.month=ud;k.daysInMonth=Kv;k.week=k.weeks=ty;k.isoWeek=k.isoWeeks=ny;k.weeksInYear=vE;k.weeksInWeekYear=yE;k.isoWeeksInYear=mE;k.isoWeeksInISOWeekYear=gE;k.date=Fd;k.day=k.days=_y;k.weekday=my;k.isoWeekday=gy;k.dayOfYear=OE;k.hour=k.hours=wy;k.minute=k.minutes=SE;k.second=k.seconds=wE;k.millisecond=k.milliseconds=Id;k.utcOffset=o1;k.utc=u1;k.local=l1;k.parseZone=c1;k.hasAlignedHourOffset=f1;k.isDST=d1;k.isLocal=p1;k.isUtcOffset=_1;k.isUtc=bd;k.isUTC=bd;k.zoneAbbr=TE;k.zoneName=DE;k.dates=At("dates accessor is deprecated. Use date instead.",Fd);k.months=At("months accessor is deprecated. Use month instead",ud);k.years=At("years accessor is deprecated. Use year instead",rd);k.zone=At("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",a1);k.isDSTShifted=At("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",h1);function AE(e){return Ie(e*1e3)}function kE(){return Ie.apply(null,arguments).parseZone()}function Rd(e){return e}var ve=Ta.prototype;ve.calendar=pv;ve.longDateFormat=vv;ve.invalidDate=Ev;ve.ordinal=Sv;ve.preparse=Rd;ve.postformat=Rd;ve.relativeTime=xv;ve.pastFuture=Tv;ve.set=dv;ve.eras=tE;ve.erasParse=nE;ve.erasConvertYear=rE;ve.erasAbbrRegex=lE;ve.erasNameRegex=uE;ve.erasNarrowRegex=cE;ve.months=Bv;ve.monthsShort=Hv;ve.monthsParse=zv;ve.monthsRegex=qv;ve.monthsShortRegex=Gv;ve.week=Jv;ve.firstDayOfYear=ey;ve.firstDayOfWeek=Qv;ve.weekdays=cy;ve.weekdaysMin=dy;ve.weekdaysShort=fy;ve.weekdaysParse=py;ve.weekdaysRegex=vy;ve.weekdaysShortRegex=yy;ve.weekdaysMinRegex=Ey;ve.isPM=Oy;ve.meridiem=xy;function Ks(e,t,n,r){var s=pn(),i=qt().set(r,t);return s[n](i,e)}function Pd(e,t,n){if(dn(e)&&(t=e,e=void 0),e=e||"",t!=null)return Ks(e,t,n,"month");var r,s=[];for(r=0;r<12;r++)s[r]=Ks(e,r,n,"month");return s}function Ha(e,t,n,r){typeof e=="boolean"?(dn(t)&&(n=t,t=void 0),t=t||""):(t=e,n=t,e=!1,dn(t)&&(n=t,t=void 0),t=t||"");var s=pn(),i=e?s._week.dow:0,o,a=[];if(n!=null)return Ks(t,(n+i)%7,r,"day");for(o=0;o<7;o++)a[o]=Ks(t,(o+i)%7,r,"day");return a}function CE(e,t){return Pd(e,t,"months")}function ME(e,t){return Pd(e,t,"monthsShort")}function FE(e,t,n){return Ha(e,t,n,"weekdays")}function IE(e,t,n){return Ha(e,t,n,"weekdaysShort")}function RE(e,t,n){return Ha(e,t,n,"weekdaysMin")}wn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=ce(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}});N.lang=At("moment.lang is deprecated. Use moment.locale instead.",wn);N.langData=At("moment.langData is deprecated. Use moment.localeData instead.",pn);var en=Math.abs;function PE(){var e=this._data;return this._milliseconds=en(this._milliseconds),this._days=en(this._days),this._months=en(this._months),e.milliseconds=en(e.milliseconds),e.seconds=en(e.seconds),e.minutes=en(e.minutes),e.hours=en(e.hours),e.months=en(e.months),e.years=en(e.years),this}function Vd(e,t,n,r){var s=Ut(t,n);return e._milliseconds+=r*s._milliseconds,e._days+=r*s._days,e._months+=r*s._months,e._bubble()}function VE(e,t){return Vd(this,e,t,1)}function NE(e,t){return Vd(this,e,t,-1)}function Hl(e){return e<0?Math.floor(e):Math.ceil(e)}function UE(){var e=this._milliseconds,t=this._days,n=this._months,r=this._data,s,i,o,a,u;return e>=0&&t>=0&&n>=0||e<=0&&t<=0&&n<=0||(e+=Hl(Mo(n)+t)*864e5,t=0,n=0),r.milliseconds=e%1e3,s=xt(e/1e3),r.seconds=s%60,i=xt(s/60),r.minutes=i%60,o=xt(i/60),r.hours=o%24,t+=xt(o/24),u=xt(Nd(t)),n+=u,t-=Hl(Mo(u)),a=xt(n/12),n%=12,r.days=t,r.months=n,r.years=a,this}function Nd(e){return e*4800/146097}function Mo(e){return e*146097/4800}function LE(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if(e=kt(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+r/864e5,n=this._months+Nd(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Mo(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return t*24+r/36e5;case"minute":return t*1440+r/6e4;case"second":return t*86400+r/1e3;case"millisecond":return Math.floor(t*864e5)+r;default:throw new Error("Unknown unit "+e)}}function _n(e){return function(){return this.as(e)}}var Ud=_n("ms"),YE=_n("s"),$E=_n("m"),jE=_n("h"),BE=_n("d"),HE=_n("w"),WE=_n("M"),zE=_n("Q"),KE=_n("y"),GE=Ud;function qE(){return Ut(this)}function ZE(e){return e=kt(e),this.isValid()?this[e+"s"]():NaN}function Kn(e){return function(){return this.isValid()?this._data[e]:NaN}}var JE=Kn("milliseconds"),XE=Kn("seconds"),QE=Kn("minutes"),eb=Kn("hours"),tb=Kn("days"),nb=Kn("months"),rb=Kn("years");function sb(){return xt(this.days()/7)}var rn=Math.round,nr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ib(e,t,n,r,s){return s.relativeTime(t||1,!!n,e,r)}function ob(e,t,n,r){var s=Ut(e).abs(),i=rn(s.as("s")),o=rn(s.as("m")),a=rn(s.as("h")),u=rn(s.as("d")),l=rn(s.as("M")),c=rn(s.as("w")),f=rn(s.as("y")),g=i<=n.ss&&["s",i]||i0,g[4]=r,ib.apply(null,g)}function ab(e){return e===void 0?rn:typeof e=="function"?(rn=e,!0):!1}function ub(e,t){return nr[e]===void 0?!1:t===void 0?nr[e]:(nr[e]=t,e==="s"&&(nr.ss=t-1),!0)}function lb(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,r=nr,s,i;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(n=e),typeof t=="object"&&(r=Object.assign({},nr,t),t.s!=null&&t.ss==null&&(r.ss=t.s-1)),s=this.localeData(),i=ob(this,!n,r,s),n&&(i=s.pastFuture(+this,i)),s.postformat(i)}var qi=Math.abs;function Jn(e){return(e>0)-(e<0)||+e}function Si(){if(!this.isValid())return this.localeData().invalidDate();var e=qi(this._milliseconds)/1e3,t=qi(this._days),n=qi(this._months),r,s,i,o,a=this.asSeconds(),u,l,c,f;return a?(r=xt(e/60),s=xt(r/60),e%=60,r%=60,i=xt(n/12),n%=12,o=e?e.toFixed(3).replace(/\.?0+$/,""):"",u=a<0?"-":"",l=Jn(this._months)!==Jn(a)?"-":"",c=Jn(this._days)!==Jn(a)?"-":"",f=Jn(this._milliseconds)!==Jn(a)?"-":"",u+"P"+(i?l+i+"Y":"")+(n?l+n+"M":"")+(t?c+t+"D":"")+(s||r||e?"T":"")+(s?f+s+"H":"")+(r?f+r+"M":"")+(e?f+o+"S":"")):"P0D"}var he=bi.prototype;he.isValid=n1;he.abs=PE;he.add=VE;he.subtract=NE;he.as=LE;he.asMilliseconds=Ud;he.asSeconds=YE;he.asMinutes=$E;he.asHours=jE;he.asDays=BE;he.asWeeks=HE;he.asMonths=WE;he.asQuarters=zE;he.asYears=KE;he.valueOf=GE;he._bubble=UE;he.clone=qE;he.get=ZE;he.milliseconds=JE;he.seconds=XE;he.minutes=QE;he.hours=eb;he.days=tb;he.weeks=sb;he.months=nb;he.years=rb;he.humanize=lb;he.toISOString=Si;he.toString=Si;he.toJSON=Si;he.locale=xd;he.localeData=Dd;he.toIsoString=At("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Si);he.lang=Td;K("X",0,0,"unix");K("x",0,0,"valueOf");Y("x",gi);Y("X",Cv);xe("X",function(e,t,n){n._d=new Date(parseFloat(e)*1e3)});xe("x",function(e,t,n){n._d=new Date(ce(e))});//! moment.js -N.version="2.30.1";cv(Ie);N.fn=k;N.min=Xy;N.max=Qy;N.now=e1;N.utc=qt;N.unix=AE;N.months=CE;N.isDate=is;N.locale=wn;N.invalid=hi;N.duration=Ut;N.isMoment=Nt;N.weekdays=FE;N.parseZone=kE;N.localeData=pn;N.isDuration=xs;N.monthsShort=ME;N.weekdaysMin=RE;N.defineLocale=Va;N.updateLocale=ky;N.locales=Cy;N.weekdaysShort=IE;N.normalizeUnits=kt;N.relativeTimeRounding=ab;N.relativeTimeThreshold=ub;N.calendarFormat=x1;N.prototype=k;N.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const cb={class:"dialog"},fb={class:"dialog__body"},db={class:"dialog__form-group"},hb={class:"dialog__form-validation"},pb={class:"dialog__form-group"},_b={class:"dialog__form-validation"},mb={class:"dialog__form-group"},gb={class:"dialog__form-group"},vb={class:"dialog__form-group dialog__form-group--radio"},yb={class:"dialog__form-radio"},Eb={class:"dialog__form-radio"},bb={class:"dialog__form-group"},Ob={__name:"HelloWorld",setup(e){const t=r=>{fetch("http://esx_identity/register",{method:"POST",body:JSON.stringify({firstname:r.firstname,lastname:r.lastname,dateofbirth:r.dob,sex:r.gender,height:r.height})})},n=zf({firstname:Os().required("Firstname is required").min(3,"Firstname must be at least 3 characters"),lastname:Os().required("Lastname is required").min(3,"Lastname must be at least 3 characters"),dob:Oa().required("Date of Birth is required").transform((r,s)=>{const i=N(s,"DD/MM/YYYY",!0);return i.isValid()?i.toDate():new Date("")}).typeError("Date must be in mm/dd/yyyy format"),gender:Os().required("Gender is required"),height:jf().required("Height is required").min(120,"Minimum height is 120cm").max(220,"Maximum height is 220cm").typeError("Amount must be a number")});return(r,s)=>(Uc(),D0("div",cb,[s[9]||(s[9]=we("div",{class:"dialog__header"},[we("h1",null,[Tr("CHARACTER "),we("span",null,"IDENTITY")])],-1)),we("div",fb,[s[8]||(s[8]=we("p",{class:"dialog__body-hint"},"Start by creating your identity",-1)),Ne(re(hg),{class:"dialog__body-form",id:"register",action:"#",novalidate:"",onSubmit:t,"validation-schema":re(n)},{default:_c(()=>[we("div",db,[s[0]||(s[0]=we("label",{for:"firstname"},"Firstname",-1)),we("div",hb,[Ne(re(qn),{id:"firstname",type:"text",name:"firstname",placeholder:"Firstname",validateOnInput:""})]),Ne(re(Or),{name:"firstname",class:"dialog__form-message dialog__form-message--error"})]),we("div",pb,[s[1]||(s[1]=we("label",{for:"lastname"},"Lastname",-1)),we("div",_b,[Ne(re(qn),{id:"lastname",type:"text",name:"lastname",placeholder:"Lastname",validateOnInput:""})]),Ne(re(Or),{name:"lastname",class:"dialog__form-message dialog__form-message--error"})]),we("div",mb,[s[2]||(s[2]=we("label",{for:"dob"},"Date of birth",-1)),Ne(re(qn),{id:"dob",type:"text",name:"dob",placeholder:"mm/dd/yyyy",validateOnInput:""}),Ne(re(Or),{name:"dob",class:"dialog__form-message dialog__form-message--error"})]),we("div",gb,[s[5]||(s[5]=we("label",{for:"gender"},"Gender",-1)),we("div",vb,[we("div",yb,[Ne(re(qn),{type:"radio",id:"male",value:"m",name:"gender",validateOnInput:""}),s[3]||(s[3]=we("label",{for:"male"},[we("i",{class:"fas fa-mars"}),Tr("Male ")],-1))]),we("div",Eb,[Ne(re(qn),{type:"radio",id:"female",value:"f",name:"gender",validateOnInput:""}),s[4]||(s[4]=we("label",{for:"female"},[we("i",{class:"fas fa-venus"}),Tr("Female ")],-1))])]),Ne(re(Or),{name:"gender",class:"dialog__form-message dialog__form-message--error"})]),we("div",bb,[s[6]||(s[6]=we("label",{for:"height"},"Height",-1)),Ne(re(qn),{id:"height",type:"text",name:"height",placeholder:"175",validateOnInput:""}),Ne(re(Or),{name:"height",class:"dialog__form-message dialog__form-message--error"})]),s[7]||(s[7]=we("button",{class:"dialog__form-submit",id:"submit",type:"submit"},[we("i",{class:"fas fa-user-plus"}),Tr("CREATE ")],-1))]),_:1},8,["validation-schema"])])]))}},Sb={__name:"App",setup(e){return ti(()=>{fetch("http://esx_identity/ready",{method:"POST",body:JSON.stringify({})}),window.addEventListener("message",t=>{t.data.type==="enableui"&&document.body.classList[t.data.enable?"remove":"add"]("none")})}),(t,n)=>(Uc(),A0(Ob))}};cp(Sb).mount("#app")});export default wb(); +N.version="2.30.1";cv(Ie);N.fn=k;N.min=Xy;N.max=Qy;N.now=e1;N.utc=qt;N.unix=AE;N.months=CE;N.isDate=is;N.locale=wn;N.invalid=hi;N.duration=Ut;N.isMoment=Nt;N.weekdays=FE;N.parseZone=kE;N.localeData=pn;N.isDuration=xs;N.monthsShort=ME;N.weekdaysMin=RE;N.defineLocale=Va;N.updateLocale=ky;N.locales=Cy;N.weekdaysShort=IE;N.normalizeUnits=kt;N.relativeTimeRounding=ab;N.relativeTimeThreshold=ub;N.calendarFormat=x1;N.prototype=k;N.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const cb={class:"dialog"},fb={class:"dialog__body"},db={class:"dialog__form-group"},hb={class:"dialog__form-validation"},pb={class:"dialog__form-group"},_b={class:"dialog__form-validation"},mb={class:"dialog__form-group"},gb={class:"dialog__form-group"},vb={class:"dialog__form-group dialog__form-group--radio"},yb={class:"dialog__form-radio"},Eb={class:"dialog__form-radio"},bb={class:"dialog__form-group"},Ob={__name:"Identity",setup(e){const t=r=>{fetch("http://esx_identity/register",{method:"POST",body:JSON.stringify({firstname:r.firstname,lastname:r.lastname,dateofbirth:r.dob,sex:r.gender,height:r.height})})},n=zf({firstname:Os().required("Firstname is required").min(3,"Firstname must be at least 3 characters"),lastname:Os().required("Lastname is required").min(3,"Lastname must be at least 3 characters"),dob:Oa().required("Date of Birth is required").min("01-01-1900","Date is too early").max(N().format("DD-MM-YYYY"),"You cant be older than today"),gender:Os().required("Gender is required"),height:jf().required("Height is required").min(120,"Minimum height is 120cm").max(220,"Maximum height is 220cm").typeError("Amount must be a number")});return(r,s)=>(Uc(),D0("div",cb,[s[9]||(s[9]=we("div",{class:"dialog__header"},[we("h1",null,[Tr("CHARACTER "),we("span",null,"IDENTITY")])],-1)),we("div",fb,[s[8]||(s[8]=we("p",{class:"dialog__body-hint"},"Start by creating your identity",-1)),Ne(re(hg),{class:"dialog__body-form",id:"register",action:"#",novalidate:"",onSubmit:t,"validation-schema":re(n)},{default:_c(()=>[we("div",db,[s[0]||(s[0]=we("label",{for:"firstname"},"Firstname",-1)),we("div",hb,[Ne(re(qn),{id:"firstname",type:"text",name:"firstname",placeholder:"Firstname",validateOnInput:""})]),Ne(re(Or),{name:"firstname",class:"dialog__form-message dialog__form-message--error"})]),we("div",pb,[s[1]||(s[1]=we("label",{for:"lastname"},"Lastname",-1)),we("div",_b,[Ne(re(qn),{id:"lastname",type:"text",name:"lastname",placeholder:"Lastname",validateOnInput:""})]),Ne(re(Or),{name:"lastname",class:"dialog__form-message dialog__form-message--error"})]),we("div",mb,[s[2]||(s[2]=we("label",{for:"dob"},"Date of birth",-1)),Ne(re(qn),{id:"dob",type:"date",name:"dob",placeholder:"mm/dd/yyyy",validateOnInput:""}),Ne(re(Or),{name:"dob",class:"dialog__form-message dialog__form-message--error"})]),we("div",gb,[s[5]||(s[5]=we("label",{for:"gender"},"Gender",-1)),we("div",vb,[we("div",yb,[Ne(re(qn),{type:"radio",id:"male",value:"m",name:"gender",validateOnInput:""}),s[3]||(s[3]=we("label",{for:"male"},[we("i",{class:"fas fa-mars"}),Tr("Male ")],-1))]),we("div",Eb,[Ne(re(qn),{type:"radio",id:"female",value:"f",name:"gender",validateOnInput:""}),s[4]||(s[4]=we("label",{for:"female"},[we("i",{class:"fas fa-venus"}),Tr("Female ")],-1))])]),Ne(re(Or),{name:"gender",class:"dialog__form-message dialog__form-message--error"})]),we("div",bb,[s[6]||(s[6]=we("label",{for:"height"},"Height",-1)),Ne(re(qn),{id:"height",type:"text",name:"height",placeholder:"175",validateOnInput:""}),Ne(re(Or),{name:"height",class:"dialog__form-message dialog__form-message--error"})]),s[7]||(s[7]=we("button",{class:"dialog__form-submit",id:"submit",type:"submit"},[we("i",{class:"fas fa-user-plus"}),Tr("CREATE ")],-1))]),_:1},8,["validation-schema"])])]))}},Sb={__name:"App",setup(e){return ti(()=>{fetch("http://esx_identity/ready",{method:"POST",body:JSON.stringify({})}),window.addEventListener("message",t=>{t.data.type==="enableui"&&document.body.classList[t.data.enable?"remove":"add"]("none")})}),(t,n)=>(Uc(),A0(Ob))}};cp(Sb).mount("#app")});export default wb(); diff --git a/[core]/esx_identity/dist/index.html b/[core]/esx_identity/dist/index.html index 6e42d2ca1..db57ffb8a 100644 --- a/[core]/esx_identity/dist/index.html +++ b/[core]/esx_identity/dist/index.html @@ -11,8 +11,8 @@ - - + + diff --git a/[core]/esx_identity/src/App.vue b/[core]/esx_identity/src/App.vue index a5abab90b..c8dc6797a 100644 --- a/[core]/esx_identity/src/App.vue +++ b/[core]/esx_identity/src/App.vue @@ -1,6 +1,6 @@ diff --git a/[core]/esx_identity/web/src/assets/vue.svg b/[core]/esx_identity/web/src/assets/vue.svg new file mode 100644 index 000000000..770e9d333 --- /dev/null +++ b/[core]/esx_identity/web/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/[core]/esx_identity/web/src/components/Identity.vue b/[core]/esx_identity/web/src/components/Identity.vue new file mode 100644 index 000000000..d51739ba7 --- /dev/null +++ b/[core]/esx_identity/web/src/components/Identity.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/[core]/esx_identity/web/src/main.js b/[core]/esx_identity/web/src/main.js new file mode 100644 index 000000000..5a6e24688 --- /dev/null +++ b/[core]/esx_identity/web/src/main.js @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') \ No newline at end of file diff --git a/[core]/esx_identity/web/src/style.css b/[core]/esx_identity/web/src/style.css new file mode 100644 index 000000000..17023ffc0 --- /dev/null +++ b/[core]/esx_identity/web/src/style.css @@ -0,0 +1,195 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); +/* body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} */ + +/* REMOVE LATER, ADD SCSS */ + +body { + font-family: sans-serif; + overflow: hidden; + background-color: transparent; +} + +.none { + display: none; +} + +.dialog { + width: 477px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: #080808; + border-radius: 8px; + border: none; + color: #ffffff; + font-family: "Poppins", sans-serif; +} + +.dialog__header { + background-color: #040404; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + padding: 20px; + text-align: center; +} + +.dialog__header h1 { + font-weight: 700; + margin-bottom: 0; + font-size: 30px; +} + +.dialog__header span { + color: #FD9800; +} + +.dialog__body { + padding-block: 20px; + padding-inline: 65px; +} + +.dialog__body-hint { + text-align: center; + margin-bottom: 20px; +} + +.dialog__body-form { + display: flex; + flex-direction: column; + gap: 35px; + font-weight: 600; + font-size: 15px; +} + +.dialog__form-submit { + border:none; + background-color: #FD9800; + color: #fff; + font-size: 18px; + font-weight:bold; + border-radius: 4px; + padding-block: 5px; +} + +.dialog__form-submit i { + margin-right: 5px; +} + +.dialog__form-group { + display: flex; + align-items: center; + justify-content: space-between; + gap: 30px; + background-color: #040404; + position: relative; +} + +.dialog__form-group--radio { + gap: 0; +} + +.dialog__form-group label { + flex-grow: 1; /* Label will expand to fill available space */ + flex-shrink: 1; /* Allows the label to shrink if necessary */ + padding-inline: 20px; /* Horizontal padding */ +} + +.dialog__form-group input { + background-color: transparent; + border: none; + height: 30px; + width: 180px; /* Fixed width for input */ + flex-shrink: 0; /* Prevent input from shrinking */ + color: white; +} + + +.dialog__form-group input:focus { + background-color: rgba(15, 15, 15, 0.9); + border: none; + border-radius: 5px; + color: #ffffff; + outline: none; + box-shadow: none; +} + +.dialog__form-validation { + position: relative; +} + +.dialog__form-validation i { + position: absolute; + right: 10px; + top: 50%; + transform: translate(0, -50%); +} + +.dialog__form-radio { + display: flex; + align-items: center; +} + +.dialog__form-radio input { + display: none; +} + +.dialog__form-radio label { + display: flex; + align-items: center; + gap: 10px; + cursor: pointer; +} + +.dialog__form-radio input + label { + height: 30px; + display: flex; + align-items: center; +} + +.dialog__form-radio input:checked + label { + color: #30A1FD; + height: 30px; +} + +.dialog__form-radio input:not(:checked) + label { + color: #242424; + height: 30px; +} + +.dialog__form-message { + position: absolute; + top: 35px; + right: 0; + font-size: 9px; +} + +.dialog__form-message--error { + color: #733838; +} + +#male:checked + label { + color: #30A1FD; /* Blue color */ +} + +/* For the female radio button */ +#female:checked + label { + color: #FF69B4; /* Pink color */ +} + +::placeholder { + color: #242424; + font-weight: 600; +} + +input[type="date"]::-webkit-inner-spin-button, +input[type="date"]::-webkit-calendar-picker-indicator { + display: none; + -webkit-appearance: none; +} \ No newline at end of file diff --git a/[core]/esx_identity/web/vite.config.js b/[core]/esx_identity/web/vite.config.js new file mode 100644 index 000000000..4b141472e --- /dev/null +++ b/[core]/esx_identity/web/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: './', + plugins: [vue()], +}) From 15b64a7f568acd69a3dcbd4ac00659b5fba3e7a7 Mon Sep 17 00:00:00 2001 From: luckie12 Date: Thu, 14 Nov 2024 20:19:53 +0100 Subject: [PATCH 042/161] Added FXManifest --- .../dist/assets/index-BR-kw549.js | 33 - .../dist/assets/index-CBKwBtku.css | 1 - [core]/esx_identity/dist/index.html | 22 - [core]/esx_identity/dist/vite.svg | 1 - [core]/esx_identity/fxmanifest.lua | 6 +- [core]/esx_identity/index.html | 21 - [core]/esx_identity/package-lock.json | 1186 ----------------- [core]/esx_identity/package.json | 21 - [core]/esx_identity/public/vite.svg | 1 - [core]/esx_identity/src/App.vue | 26 - [core]/esx_identity/src/assets/vue.svg | 1 - .../esx_identity/src/components/Identity.vue | 92 -- [core]/esx_identity/src/main.js | 5 - [core]/esx_identity/src/style.css | 195 --- [core]/esx_identity/vite.config.js | 8 - 15 files changed, 3 insertions(+), 1616 deletions(-) delete mode 100644 [core]/esx_identity/dist/assets/index-BR-kw549.js delete mode 100644 [core]/esx_identity/dist/assets/index-CBKwBtku.css delete mode 100644 [core]/esx_identity/dist/index.html delete mode 100644 [core]/esx_identity/dist/vite.svg delete mode 100644 [core]/esx_identity/index.html delete mode 100644 [core]/esx_identity/package-lock.json delete mode 100644 [core]/esx_identity/package.json delete mode 100644 [core]/esx_identity/public/vite.svg delete mode 100644 [core]/esx_identity/src/App.vue delete mode 100644 [core]/esx_identity/src/assets/vue.svg delete mode 100644 [core]/esx_identity/src/components/Identity.vue delete mode 100644 [core]/esx_identity/src/main.js delete mode 100644 [core]/esx_identity/src/style.css delete mode 100644 [core]/esx_identity/vite.config.js diff --git a/[core]/esx_identity/dist/assets/index-BR-kw549.js b/[core]/esx_identity/dist/assets/index-BR-kw549.js deleted file mode 100644 index 75747bb1c..000000000 --- a/[core]/esx_identity/dist/assets/index-BR-kw549.js +++ /dev/null @@ -1,33 +0,0 @@ -var Ld=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var wb=Ld((Tb,Ds)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();/** -* @vue/shared v3.5.12 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Fo(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ke={},rr=[],Wt=()=>{},Yd=()=>!1,Gs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Io=e=>e.startsWith("onUpdate:"),qe=Object.assign,Ro=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},$d=Object.prototype.hasOwnProperty,be=(e,t)=>$d.call(e,t),ie=Array.isArray,kr=e=>qs(e)==="[object Map]",jd=e=>qs(e)==="[object Set]",ee=e=>typeof e=="function",Ke=e=>typeof e=="string",hr=e=>typeof e=="symbol",He=e=>e!==null&&typeof e=="object",Wl=e=>(He(e)||ee(e))&&ee(e.then)&&ee(e.catch),Bd=Object.prototype.toString,qs=e=>Bd.call(e),Hd=e=>qs(e).slice(8,-1),Wd=e=>qs(e)==="[object Object]",Po=e=>Ke(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cr=Fo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zs=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},zd=/-(\w)/g,Dt=Zs(e=>e.replace(zd,(t,n)=>n?n.toUpperCase():"")),Kd=/\B([A-Z])/g,Hn=Zs(e=>e.replace(Kd,"-$1").toLowerCase()),Js=Zs(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ai=Zs(e=>e?`on${Js(e)}`:""),On=(e,t)=>!Object.is(e,t),ki=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},Gd=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Wa;const Xs=()=>Wa||(Wa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vo(e){if(ie(e)){const t={};for(let n=0;n{if(n){const r=n.split(Zd);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function No(e){let t="";if(Ke(e))t=e;else if(ie(e))for(let n=0;n0)return;if(Fr){let t=Fr;for(Fr=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Mr;){let t=Mr;for(Mr=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Jl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Xl(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),Yo(r),rh(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function Zi(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ql(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ql(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Lr))return;e.globalVersion=Lr;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Zi(e)){e.flags&=-3;return}const n=Ae,r=It;Ae=e,It=!0;try{Jl(e);const s=e.fn(e._value);(t.version===0||On(s,e._value))&&(e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Ae=n,It=r,Xl(e),e.flags&=-3}}function Yo(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Yo(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function rh(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let It=!0;const ec=[];function Tn(){ec.push(It),It=!1}function Dn(){const e=ec.pop();It=e===void 0?!0:e}function za(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ae;Ae=void 0;try{t()}finally{Ae=n}}}let Lr=0;class sh{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class $o{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!Ae||!It||Ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ae)n=this.activeLink=new sh(Ae,this),Ae.deps?(n.prevDep=Ae.depsTail,Ae.depsTail.nextDep=n,Ae.depsTail=n):Ae.deps=Ae.depsTail=n,tc(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Ae.depsTail,n.nextDep=void 0,Ae.depsTail.nextDep=n,Ae.depsTail=n,Ae.deps===n&&(Ae.deps=r)}return n}trigger(t){this.version++,Lr++,this.notify(t)}notify(t){Uo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Lo()}}}function tc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)tc(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const As=new WeakMap,Vn=Symbol(""),Ji=Symbol(""),Yr=Symbol("");function tt(e,t,n){if(It&&Ae){let r=As.get(e);r||As.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new $o),s.map=r,s.key=n),s.track()}}function on(e,t,n,r,s,i){const o=As.get(e);if(!o){Lr++;return}const a=u=>{u&&u.trigger()};if(Uo(),t==="clear")o.forEach(a);else{const u=ie(e),l=u&&Po(n);if(u&&n==="length"){const c=Number(r);o.forEach((f,g)=>{(g==="length"||g===Yr||!hr(g)&&g>=c)&&a(f)})}else switch((n!==void 0||o.has(void 0))&&a(o.get(n)),l&&a(o.get(Yr)),t){case"add":u?l&&a(o.get("length")):(a(o.get(Vn)),kr(e)&&a(o.get(Ji)));break;case"delete":u||(a(o.get(Vn)),kr(e)&&a(o.get(Ji)));break;case"set":kr(e)&&a(o.get(Vn));break}}Lo()}function ih(e,t){const n=As.get(e);return n&&n.get(t)}function Gn(e){const t=ye(e);return t===e?t:(tt(t,"iterate",Yr),Rt(e)?t:t.map(it))}function jo(e){return tt(e=ye(e),"iterate",Yr),e}const oh={__proto__:null,[Symbol.iterator](){return Mi(this,Symbol.iterator,it)},concat(...e){return Gn(this).concat(...e.map(t=>ie(t)?Gn(t):t))},entries(){return Mi(this,"entries",e=>(e[1]=it(e[1]),e))},every(e,t){return Xt(this,"every",e,t,void 0,arguments)},filter(e,t){return Xt(this,"filter",e,t,n=>n.map(it),arguments)},find(e,t){return Xt(this,"find",e,t,it,arguments)},findIndex(e,t){return Xt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Xt(this,"findLast",e,t,it,arguments)},findLastIndex(e,t){return Xt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Xt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Fi(this,"includes",e)},indexOf(...e){return Fi(this,"indexOf",e)},join(e){return Gn(this).join(e)},lastIndexOf(...e){return Fi(this,"lastIndexOf",e)},map(e,t){return Xt(this,"map",e,t,void 0,arguments)},pop(){return Er(this,"pop")},push(...e){return Er(this,"push",e)},reduce(e,...t){return Ka(this,"reduce",e,t)},reduceRight(e,...t){return Ka(this,"reduceRight",e,t)},shift(){return Er(this,"shift")},some(e,t){return Xt(this,"some",e,t,void 0,arguments)},splice(...e){return Er(this,"splice",e)},toReversed(){return Gn(this).toReversed()},toSorted(e){return Gn(this).toSorted(e)},toSpliced(...e){return Gn(this).toSpliced(...e)},unshift(...e){return Er(this,"unshift",e)},values(){return Mi(this,"values",it)}};function Mi(e,t,n){const r=jo(e),s=r[t]();return r!==e&&!Rt(e)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.value&&(i.value=n(i.value)),i}),s}const ah=Array.prototype;function Xt(e,t,n,r,s,i){const o=jo(e),a=o!==e&&!Rt(e),u=o[t];if(u!==ah[t]){const f=u.apply(e,i);return a?it(f):f}let l=n;o!==e&&(a?l=function(f,g){return n.call(this,it(f),g,e)}:n.length>2&&(l=function(f,g){return n.call(this,f,g,e)}));const c=u.call(o,l,r);return a&&s?s(c):c}function Ka(e,t,n,r){const s=jo(e);let i=n;return s!==e&&(Rt(e)?n.length>3&&(i=function(o,a,u){return n.call(this,o,a,u,e)}):i=function(o,a,u){return n.call(this,o,it(a),u,e)}),s[t](i,...r)}function Fi(e,t,n){const r=ye(e);tt(r,"iterate",Yr);const s=r[t](...n);return(s===-1||s===!1)&&zo(n[0])?(n[0]=ye(n[0]),r[t](...n)):s}function Er(e,t,n=[]){Tn(),Uo();const r=ye(e)[t].apply(e,n);return Lo(),Dn(),r}const uh=Fo("__proto__,__v_isRef,__isVue"),nc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(hr));function lh(e){hr(e)||(e=String(e));const t=ye(this);return tt(t,"has",e),t.hasOwnProperty(e)}class rc{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?yh:ac:i?oc:ic).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=ie(t);if(!s){let u;if(o&&(u=oh[n]))return u;if(n==="hasOwnProperty")return lh}const a=Reflect.get(t,n,Be(t)?t:r);return(hr(n)?nc.has(n):uh(n))||(s||tt(t,"get",n),i)?a:Be(a)?o&&Po(n)?a:a.value:He(a)?s?Ho(a):Yn(a):a}}class sc extends rc{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n];if(!this._isShallow){const u=$n(i);if(!Rt(r)&&!$n(r)&&(i=ye(i),r=ye(r)),!ie(t)&&Be(i)&&!Be(r))return u?!1:(i.value=r,!0)}const o=ie(t)&&Po(n)?Number(n)e,ls=e=>Reflect.getPrototypeOf(e);function ph(e,t,n){return function(...r){const s=this.__v_raw,i=ye(s),o=kr(i),a=e==="entries"||e===Symbol.iterator&&o,u=e==="keys"&&o,l=s[e](...r),c=n?Xi:t?Qi:it;return!t&&tt(i,"iterate",u?Ji:Vn),{next(){const{value:f,done:g}=l.next();return g?{value:f,done:g}:{value:a?[c(f[0]),c(f[1])]:c(f),done:g}},[Symbol.iterator](){return this}}}}function cs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function _h(e,t){const n={get(s){const i=this.__v_raw,o=ye(i),a=ye(s);e||(On(s,a)&&tt(o,"get",s),tt(o,"get",a));const{has:u}=ls(o),l=t?Xi:e?Qi:it;if(u.call(o,s))return l(i.get(s));if(u.call(o,a))return l(i.get(a));i!==o&&i.get(s)},get size(){const s=this.__v_raw;return!e&&tt(ye(s),"iterate",Vn),Reflect.get(s,"size",s)},has(s){const i=this.__v_raw,o=ye(i),a=ye(s);return e||(On(s,a)&&tt(o,"has",s),tt(o,"has",a)),s===a?i.has(s):i.has(s)||i.has(a)},forEach(s,i){const o=this,a=o.__v_raw,u=ye(a),l=t?Xi:e?Qi:it;return!e&&tt(u,"iterate",Vn),a.forEach((c,f)=>s.call(i,l(c),l(f),o))}};return qe(n,e?{add:cs("add"),set:cs("set"),delete:cs("delete"),clear:cs("clear")}:{add(s){!t&&!Rt(s)&&!$n(s)&&(s=ye(s));const i=ye(this);return ls(i).has.call(i,s)||(i.add(s),on(i,"add",s,s)),this},set(s,i){!t&&!Rt(i)&&!$n(i)&&(i=ye(i));const o=ye(this),{has:a,get:u}=ls(o);let l=a.call(o,s);l||(s=ye(s),l=a.call(o,s));const c=u.call(o,s);return o.set(s,i),l?On(i,c)&&on(o,"set",s,i):on(o,"add",s,i),this},delete(s){const i=ye(this),{has:o,get:a}=ls(i);let u=o.call(i,s);u||(s=ye(s),u=o.call(i,s)),a&&a.call(i,s);const l=i.delete(s);return u&&on(i,"delete",s,void 0),l},clear(){const s=ye(this),i=s.size!==0,o=s.clear();return i&&on(s,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=ph(s,e,t)}),n}function Bo(e,t){const n=_h(e,t);return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(be(n,s)&&s in r?n:r,s,i)}const mh={get:Bo(!1,!1)},gh={get:Bo(!1,!0)},vh={get:Bo(!0,!1)},ic=new WeakMap,oc=new WeakMap,ac=new WeakMap,yh=new WeakMap;function Eh(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function bh(e){return e.__v_skip||!Object.isExtensible(e)?0:Eh(Hd(e))}function Yn(e){return $n(e)?e:Wo(e,!1,fh,mh,ic)}function Oh(e){return Wo(e,!1,hh,gh,oc)}function Ho(e){return Wo(e,!0,dh,vh,ac)}function Wo(e,t,n,r,s){if(!He(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const o=bh(e);if(o===0)return e;const a=new Proxy(e,o===2?r:n);return s.set(e,a),a}function Ir(e){return $n(e)?Ir(e.__v_raw):!!(e&&e.__v_isReactive)}function $n(e){return!!(e&&e.__v_isReadonly)}function Rt(e){return!!(e&&e.__v_isShallow)}function zo(e){return e?!!e.__v_raw:!1}function ye(e){const t=e&&e.__v_raw;return t?ye(t):e}function Sh(e){return!be(e,"__v_skip")&&Object.isExtensible(e)&&zl(e,"__v_skip",!0),e}const it=e=>He(e)?Yn(e):e,Qi=e=>He(e)?Ho(e):e;function Be(e){return e?e.__v_isRef===!0:!1}function wt(e){return uc(e,!1)}function wh(e){return uc(e,!0)}function uc(e,t){return Be(e)?e:new xh(e,t)}class xh{constructor(t,n){this.dep=new $o,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ye(t),this._value=n?t:it(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Rt(t)||$n(t);t=r?t:ye(t),On(t,n)&&(this._rawValue=t,this._value=r?t:it(t),this.dep.trigger())}}function re(e){return Be(e)?e.value:e}function de(e){return ee(e)?e():re(e)}const Th={get:(e,t,n)=>t==="__v_raw"?e:re(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return Be(s)&&!Be(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function lc(e){return Ir(e)?e:new Proxy(e,Th)}class Dh{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ih(ye(this._object),this._key)}}class Ah{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Fn(e,t,n){return Be(e)?e:ee(e)?new Ah(e):He(e)&&arguments.length>1?kh(e,t,n):wt(e)}function kh(e,t,n){const r=e[t];return Be(r)?r:new Dh(e,t,n)}class Ch{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new $o(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Lr-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Ae!==this)return Zl(this,!0),!0}get value(){const t=this.dep.track();return Ql(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Mh(e,t,n=!1){let r,s;return ee(e)?r=e:(r=e.get,s=e.set),new Ch(r,s,n)}const fs={},ks=new WeakMap;let Mn;function Fh(e,t=!1,n=Mn){if(n){let r=ks.get(n);r||ks.set(n,r=[]),r.push(e)}}function Ih(e,t,n=ke){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:a,call:u}=n,l=V=>s?V:Rt(V)||s===!1||s===0?yn(V,1):yn(V);let c,f,g,p,v=!1,w=!1;if(Be(e)?(f=()=>e.value,v=Rt(e)):Ir(e)?(f=()=>l(e),v=!0):ie(e)?(w=!0,v=e.some(V=>Ir(V)||Rt(V)),f=()=>e.map(V=>{if(Be(V))return V.value;if(Ir(V))return l(V);if(ee(V))return u?u(V,2):V()})):ee(e)?t?f=u?()=>u(e,2):e:f=()=>{if(g){Tn();try{g()}finally{Dn()}}const V=Mn;Mn=c;try{return u?u(e,3,[p]):e(p)}finally{Mn=V}}:f=Wt,t&&s){const V=f,Z=s===!0?1/0:s;f=()=>yn(V(),Z)}const E=nh(),O=()=>{c.stop(),E&&Ro(E.effects,c)};if(i&&t){const V=t;t=(...Z)=>{V(...Z),O()}}let P=w?new Array(e.length).fill(fs):fs;const j=V=>{if(!(!(c.flags&1)||!c.dirty&&!V))if(t){const Z=c.run();if(s||v||(w?Z.some((oe,ae)=>On(oe,P[ae])):On(Z,P))){g&&g();const oe=Mn;Mn=c;try{const ae=[Z,P===fs?void 0:w&&P[0]===fs?[]:P,p];u?u(t,3,ae):t(...ae),P=Z}finally{Mn=oe}}}else c.run()};return a&&a(j),c=new Gl(f),c.scheduler=o?()=>o(j,!1):j,p=V=>Fh(V,!1,c),g=c.onStop=()=>{const V=ks.get(c);if(V){if(u)u(V,4);else for(const Z of V)Z();ks.delete(c)}},t?r?j(!0):P=c.run():o?o(j.bind(null,!0),!0):c.run(),O.pause=c.pause.bind(c),O.resume=c.resume.bind(c),O.stop=O,O}function yn(e,t=1/0,n){if(t<=0||!He(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,Be(e))yn(e.value,t,n);else if(ie(e))for(let r=0;r{yn(r,t,n)});else if(Wd(e)){for(const r in e)yn(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&yn(e[r],t,n)}return e}/** -* @vue/runtime-core v3.5.12 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function es(e,t,n,r){try{return r?e(...r):e()}catch(s){Qs(s,t,n)}}function Kt(e,t,n,r){if(ee(e)){const s=es(e,t,n,r);return s&&Wl(s)&&s.catch(i=>{Qs(i,t,n)}),s}if(ie(e)){const s=[];for(let i=0;i>>1,s=ot[r],i=$r(s);i=$r(n)?ot.push(e):ot.splice(Ph(t),0,e),e.flags|=1,fc()}}function fc(){Cs||(Cs=cc.then(hc))}function Vh(e){ie(e)?sr.push(...e):gn&&e.id===-1?gn.splice(Xn+1,0,e):e.flags&1||(sr.push(e),e.flags|=1),fc()}function Ga(e,t,n=$t+1){for(;n$r(n)-$r(r));if(sr.length=0,gn){gn.push(...t);return}for(gn=t,Xn=0;Xne.id==null?e.flags&2?-1:1/0:e.id;function hc(e){try{for($t=0;$t{r._d&&ru(-1);const i=Ms(t);let o;try{o=e(...s)}finally{Ms(i),r._d&&ru(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function An(e,t,n,r){const s=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport;function Go(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Go(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function qo(e,t){return ee(e)?qe({name:e.name},t,{setup:e}):e}function mc(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function eo(e,t,n,r,s=!1){if(ie(e)){e.forEach((v,w)=>eo(v,t&&(ie(t)?t[w]:t),n,r,s));return}if(Rr(r)&&!s)return;const i=r.shapeFlag&4?ta(r.component):r.el,o=s?null:i,{i:a,r:u}=e,l=t&&t.r,c=a.refs===ke?a.refs={}:a.refs,f=a.setupState,g=ye(f),p=f===ke?()=>!1:v=>be(g,v);if(l!=null&&l!==u&&(Ke(l)?(c[l]=null,p(l)&&(f[l]=null)):Be(l)&&(l.value=null)),ee(u))es(u,a,12,[o,c]);else{const v=Ke(u),w=Be(u);if(v||w){const E=()=>{if(e.f){const O=v?p(u)?f[u]:c[u]:u.value;s?ie(O)&&Ro(O,i):ie(O)?O.includes(i)||O.push(i):v?(c[u]=[i],p(u)&&(f[u]=c[u])):(u.value=[i],e.k&&(c[e.k]=u.value))}else v?(c[u]=o,p(u)&&(f[u]=o)):w&&(u.value=o,e.k&&(c[e.k]=o))};o?(E.id=-1,mt(E,n)):E()}}}Xs().requestIdleCallback;Xs().cancelIdleCallback;const Rr=e=>!!e.type.__asyncLoader,gc=e=>e.type.__isKeepAlive;function Lh(e,t){vc(e,"a",t)}function Yh(e,t){vc(e,"da",t)}function vc(e,t,n=Ze){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(ei(t,r,n),n){let s=n.parent;for(;s&&s.parent;)gc(s.parent.vnode)&&$h(r,t,n,s),s=s.parent}}function $h(e,t,n,r){const s=ei(t,e,r,!0);Ec(()=>{Ro(r[t],s)},n)}function ei(e,t,n=Ze,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Tn();const a=ts(n),u=Kt(t,n,e,o);return a(),Dn(),u});return r?s.unshift(i):s.push(i),i}}const hn=e=>(t,n=Ze)=>{(!Hr||e==="sp")&&ei(e,(...r)=>t(...r),n)},jh=hn("bm"),ti=hn("m"),Bh=hn("bu"),Hh=hn("u"),yc=hn("bum"),Ec=hn("um"),Wh=hn("sp"),zh=hn("rtg"),Kh=hn("rtc");function Gh(e,t=Ze){ei("ec",e,t)}const qh="components",bc=Symbol.for("v-ndc");function Zo(e){return Ke(e)?Zh(qh,e,!1)||e:e||bc}function Zh(e,t,n=!0,r=!1){const s=Tt||Ze;if(s){const i=s.type;{const a=L0(i,!1);if(a&&(a===t||a===Dt(t)||a===Js(Dt(t))))return i}const o=qa(s[e]||i[e],t)||qa(s.appContext[e],t);return!o&&r?i:o}}function qa(e,t){return e&&(e[t]||e[Dt(t)]||e[Js(Dt(t))])}const to=e=>e?$c(e)?ta(e):to(e.parent):null,Pr=qe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>to(e.parent),$root:e=>to(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Jo(e),$forceUpdate:e=>e.f||(e.f=()=>{Ko(e.update)}),$nextTick:e=>e.n||(e.n=Ct.bind(e.proxy)),$watch:e=>v0.bind(e)}),Ii=(e,t)=>e!==ke&&!e.__isScriptSetup&&be(e,t),Jh={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:a,appContext:u}=e;let l;if(t[0]!=="$"){const p=o[t];if(p!==void 0)switch(p){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Ii(r,t))return o[t]=1,r[t];if(s!==ke&&be(s,t))return o[t]=2,s[t];if((l=e.propsOptions[0])&&be(l,t))return o[t]=3,i[t];if(n!==ke&&be(n,t))return o[t]=4,n[t];no&&(o[t]=0)}}const c=Pr[t];let f,g;if(c)return t==="$attrs"&&tt(e.attrs,"get",""),c(e);if((f=a.__cssModules)&&(f=f[t]))return f;if(n!==ke&&be(n,t))return o[t]=4,n[t];if(g=u.config.globalProperties,be(g,t))return g[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return Ii(s,t)?(s[t]=n,!0):r!==ke&&be(r,t)?(r[t]=n,!0):be(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let a;return!!n[o]||e!==ke&&be(e,o)||Ii(t,o)||(a=i[0])&&be(a,o)||be(r,o)||be(Pr,o)||be(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:be(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Za(e){return ie(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let no=!0;function Xh(e){const t=Jo(e),n=e.proxy,r=e.ctx;no=!1,t.beforeCreate&&Ja(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:a,provide:u,inject:l,created:c,beforeMount:f,mounted:g,beforeUpdate:p,updated:v,activated:w,deactivated:E,beforeDestroy:O,beforeUnmount:P,destroyed:j,unmounted:V,render:Z,renderTracked:oe,renderTriggered:ae,errorCaptured:De,serverPrefetch:ue,expose:ne,inheritAttrs:te,components:Pe,directives:Ue,filters:Oe}=t;if(l&&Qh(l,r,null),o)for(const C in o){const J=o[C];ee(J)&&(r[C]=J.bind(n))}if(s){const C=s.call(n,n);He(C)&&(e.data=Yn(C))}if(no=!0,i)for(const C in i){const J=i[C],Te=ee(J)?J.bind(n,n):ee(J.get)?J.get.bind(n,n):Wt,Xe=!ee(J)&&ee(J.set)?J.set.bind(n):Wt,Le=me({get:Te,set:Xe});Object.defineProperty(r,C,{enumerable:!0,configurable:!0,get:()=>Le.value,set:Me=>Le.value=Me})}if(a)for(const C in a)Oc(a[C],r,n,C);if(u){const C=ee(u)?u.call(n):u;Reflect.ownKeys(C).forEach(J=>{Is(J,C[J])})}c&&Ja(c,e,"c");function W(C,J){ie(J)?J.forEach(Te=>C(Te.bind(n))):J&&C(J.bind(n))}if(W(jh,f),W(ti,g),W(Bh,p),W(Hh,v),W(Lh,w),W(Yh,E),W(Gh,De),W(Kh,oe),W(zh,ae),W(yc,P),W(Ec,V),W(Wh,ue),ie(ne))if(ne.length){const C=e.exposed||(e.exposed={});ne.forEach(J=>{Object.defineProperty(C,J,{get:()=>n[J],set:Te=>n[J]=Te})})}else e.exposed||(e.exposed={});Z&&e.render===Wt&&(e.render=Z),te!=null&&(e.inheritAttrs=te),Pe&&(e.components=Pe),Ue&&(e.directives=Ue),ue&&mc(e)}function Qh(e,t,n=Wt){ie(e)&&(e=ro(e));for(const r in e){const s=e[r];let i;He(s)?"default"in s?i=or(s.from||r,s.default,!0):i=or(s.from||r):i=or(s),Be(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function Ja(e,t,n){Kt(ie(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Oc(e,t,n,r){let s=r.includes(".")?Pc(n,r):()=>n[r];if(Ke(e)){const i=t[e];ee(i)&&zt(s,i)}else if(ee(e))zt(s,e.bind(n));else if(He(e))if(ie(e))e.forEach(i=>Oc(i,t,n,r));else{const i=ee(e.handler)?e.handler.bind(n):t[e.handler];ee(i)&&zt(s,i,e)}}function Jo(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,a=i.get(t);let u;return a?u=a:!s.length&&!n&&!r?u=t:(u={},s.length&&s.forEach(l=>Fs(u,l,o,!0)),Fs(u,t,o)),He(t)&&i.set(t,u),u}function Fs(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&Fs(e,i,n,!0),s&&s.forEach(o=>Fs(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const a=e0[o]||n&&n[o];e[o]=a?a(e[o],t[o]):t[o]}return e}const e0={data:Xa,props:Qa,emits:Qa,methods:xr,computed:xr,beforeCreate:st,created:st,beforeMount:st,mounted:st,beforeUpdate:st,updated:st,beforeDestroy:st,beforeUnmount:st,destroyed:st,unmounted:st,activated:st,deactivated:st,errorCaptured:st,serverPrefetch:st,components:xr,directives:xr,watch:n0,provide:Xa,inject:t0};function Xa(e,t){return t?e?function(){return qe(ee(e)?e.call(this,this):e,ee(t)?t.call(this,this):t)}:t:e}function t0(e,t){return xr(ro(e),ro(t))}function ro(e){if(ie(e)){const t={};for(let n=0;n1)return n&&ee(t)?t.call(r&&r.proxy):t}}const wc={},xc=()=>Object.create(wc),Tc=e=>Object.getPrototypeOf(e)===wc;function i0(e,t,n,r=!1){const s={},i=xc();e.propsDefaults=Object.create(null),Dc(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Oh(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function o0(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,a=ye(s),[u]=e.propsOptions;let l=!1;if((r||o>0)&&!(o&16)){if(o&8){const c=e.vnode.dynamicProps;for(let f=0;f{u=!0;const[g,p]=Ac(f,t,!0);qe(o,g),p&&a.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!i&&!u)return He(e)&&r.set(e,rr),rr;if(ie(i))for(let c=0;ce[0]==="_"||e==="$stable",Xo=e=>ie(e)?e.map(Bt):[Bt(e)],u0=(e,t,n)=>{if(t._n)return t;const r=_c((...s)=>Xo(t(...s)),n);return r._c=!1,r},Cc=(e,t,n)=>{const r=e._ctx;for(const s in e){if(kc(s))continue;const i=e[s];if(ee(i))t[s]=u0(s,i,r);else if(i!=null){const o=Xo(i);t[s]=()=>o}}},Mc=(e,t)=>{const n=Xo(t);e.slots.default=()=>n},Fc=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},l0=(e,t,n)=>{const r=e.slots=xc();if(e.vnode.shapeFlag&32){const s=t._;s?(Fc(r,t,n),n&&zl(r,"_",s,!0)):Cc(t,r)}else t&&Mc(e,t)},c0=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=ke;if(r.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:Fc(s,t,n):(i=!t.$stable,Cc(t,s)),o=t}else t&&(Mc(e,t),o={default:1});if(i)for(const a in s)!kc(a)&&o[a]==null&&delete s[a]},mt=x0;function f0(e){return d0(e)}function d0(e,t){const n=Xs();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:a,createComment:u,setText:l,setElementText:c,parentNode:f,nextSibling:g,setScopeId:p=Wt,insertStaticContent:v}=e,w=(d,h,y,A=null,S=null,x=null,I=void 0,R=null,M=!!h.dynamicChildren)=>{if(d===h)return;d&&!br(d,h)&&(A=X(d),Me(d,S,x,!0),d=null),h.patchFlag===-2&&(M=!1,h.dynamicChildren=null);const{type:D,ref:G,shapeFlag:L}=h;switch(D){case ri:E(d,h,y,A);break;case jr:O(d,h,y,A);break;case Vi:d==null&&P(h,y,A,I);break;case sn:Pe(d,h,y,A,S,x,I,R,M);break;default:L&1?Z(d,h,y,A,S,x,I,R,M):L&6?Ue(d,h,y,A,S,x,I,R,M):(L&64||L&128)&&D.process(d,h,y,A,S,x,I,R,M,rt)}G!=null&&S&&eo(G,d&&d.ref,x,h||d,!h)},E=(d,h,y,A)=>{if(d==null)r(h.el=a(h.children),y,A);else{const S=h.el=d.el;h.children!==d.children&&l(S,h.children)}},O=(d,h,y,A)=>{d==null?r(h.el=u(h.children||""),y,A):h.el=d.el},P=(d,h,y,A)=>{[d.el,d.anchor]=v(d.children,h,y,A,d.el,d.anchor)},j=({el:d,anchor:h},y,A)=>{let S;for(;d&&d!==h;)S=g(d),r(d,y,A),d=S;r(h,y,A)},V=({el:d,anchor:h})=>{let y;for(;d&&d!==h;)y=g(d),s(d),d=y;s(h)},Z=(d,h,y,A,S,x,I,R,M)=>{h.type==="svg"?I="svg":h.type==="math"&&(I="mathml"),d==null?oe(h,y,A,S,x,I,R,M):ue(d,h,S,x,I,R,M)},oe=(d,h,y,A,S,x,I,R)=>{let M,D;const{props:G,shapeFlag:L,transition:H,dirs:q}=d;if(M=d.el=o(d.type,x,G&&G.is,G),L&8?c(M,d.children):L&16&&De(d.children,M,null,A,S,Ri(d,x),I,R),q&&An(d,null,A,"created"),ae(M,d,d.scopeId,I,A),G){for(const Se in G)Se!=="value"&&!Cr(Se)&&i(M,Se,null,G[Se],x,A);"value"in G&&i(M,"value",null,G.value,x),(D=G.onVnodeBeforeMount)&&Lt(D,A,d)}q&&An(d,null,A,"beforeMount");const le=h0(S,H);le&&H.beforeEnter(M),r(M,h,y),((D=G&&G.onVnodeMounted)||le||q)&&mt(()=>{D&&Lt(D,A,d),le&&H.enter(M),q&&An(d,null,A,"mounted")},S)},ae=(d,h,y,A,S)=>{if(y&&p(d,y),A)for(let x=0;x{for(let D=M;D{const R=h.el=d.el;let{patchFlag:M,dynamicChildren:D,dirs:G}=h;M|=d.patchFlag&16;const L=d.props||ke,H=h.props||ke;let q;if(y&&kn(y,!1),(q=H.onVnodeBeforeUpdate)&&Lt(q,y,h,d),G&&An(h,d,y,"beforeUpdate"),y&&kn(y,!0),(L.innerHTML&&H.innerHTML==null||L.textContent&&H.textContent==null)&&c(R,""),D?ne(d.dynamicChildren,D,R,y,A,Ri(h,S),x):I||J(d,h,R,null,y,A,Ri(h,S),x,!1),M>0){if(M&16)te(R,L,H,y,S);else if(M&2&&L.class!==H.class&&i(R,"class",null,H.class,S),M&4&&i(R,"style",L.style,H.style,S),M&8){const le=h.dynamicProps;for(let Se=0;Se{q&&Lt(q,y,h,d),G&&An(h,d,y,"updated")},A)},ne=(d,h,y,A,S,x,I)=>{for(let R=0;R{if(h!==y){if(h!==ke)for(const x in h)!Cr(x)&&!(x in y)&&i(d,x,h[x],null,S,A);for(const x in y){if(Cr(x))continue;const I=y[x],R=h[x];I!==R&&x!=="value"&&i(d,x,R,I,S,A)}"value"in y&&i(d,"value",h.value,y.value,S)}},Pe=(d,h,y,A,S,x,I,R,M)=>{const D=h.el=d?d.el:a(""),G=h.anchor=d?d.anchor:a("");let{patchFlag:L,dynamicChildren:H,slotScopeIds:q}=h;q&&(R=R?R.concat(q):q),d==null?(r(D,y,A),r(G,y,A),De(h.children||[],y,G,S,x,I,R,M)):L>0&&L&64&&H&&d.dynamicChildren?(ne(d.dynamicChildren,H,y,S,x,I,R),(h.key!=null||S&&h===S.subTree)&&Ic(d,h,!0)):J(d,h,y,G,S,x,I,R,M)},Ue=(d,h,y,A,S,x,I,R,M)=>{h.slotScopeIds=R,d==null?h.shapeFlag&512?S.ctx.activate(h,y,A,I,M):Oe(h,y,A,S,x,I,M):je(d,h,M)},Oe=(d,h,y,A,S,x,I)=>{const R=d.component=R0(d,A,S);if(gc(d)&&(R.ctx.renderer=rt),P0(R,!1,I),R.asyncDep){if(S&&S.registerDep(R,W,I),!d.el){const M=R.subTree=Ne(jr);O(null,M,h,y)}}else W(R,d,h,y,S,x,I)},je=(d,h,y)=>{const A=h.component=d.component;if(S0(d,h,y))if(A.asyncDep&&!A.asyncResolved){C(A,h,y);return}else A.next=h,A.update();else h.el=d.el,A.vnode=h},W=(d,h,y,A,S,x,I)=>{const R=()=>{if(d.isMounted){let{next:L,bu:H,u:q,parent:le,vnode:Se}=d;{const F=Rc(d);if(F){L&&(L.el=Se.el,C(d,L,I)),F.asyncDep.then(()=>{d.isUnmounted||R()});return}}let _e=L,m;kn(d,!1),L?(L.el=Se.el,C(d,L,I)):L=Se,H&&ki(H),(m=L.props&&L.props.onVnodeBeforeUpdate)&&Lt(m,le,L,Se),kn(d,!0);const _=Pi(d),b=d.subTree;d.subTree=_,w(b,_,f(b.el),X(b),d,S,x),L.el=_.el,_e===null&&w0(d,_.el),q&&mt(q,S),(m=L.props&&L.props.onVnodeUpdated)&&mt(()=>Lt(m,le,L,Se),S)}else{let L;const{el:H,props:q}=h,{bm:le,m:Se,parent:_e,root:m,type:_}=d,b=Rr(h);if(kn(d,!1),le&&ki(le),!b&&(L=q&&q.onVnodeBeforeMount)&&Lt(L,_e,h),kn(d,!0),H&&Ot){const F=()=>{d.subTree=Pi(d),Ot(H,d.subTree,d,S,null)};b&&_.__asyncHydrate?_.__asyncHydrate(H,d,F):F()}else{m.ce&&m.ce._injectChildStyle(_);const F=d.subTree=Pi(d);w(null,F,y,A,d,S,x),h.el=F.el}if(Se&&mt(Se,S),!b&&(L=q&&q.onVnodeMounted)){const F=h;mt(()=>Lt(L,_e,F),S)}(h.shapeFlag&256||_e&&Rr(_e.vnode)&&_e.vnode.shapeFlag&256)&&d.a&&mt(d.a,S),d.isMounted=!0,h=y=A=null}};d.scope.on();const M=d.effect=new Gl(R);d.scope.off();const D=d.update=M.run.bind(M),G=d.job=M.runIfDirty.bind(M);G.i=d,G.id=d.uid,M.scheduler=()=>Ko(G),kn(d,!0),D()},C=(d,h,y)=>{h.component=d;const A=d.vnode.props;d.vnode=h,d.next=null,o0(d,h.props,A,y),c0(d,h.children,y),Tn(),Ga(d),Dn()},J=(d,h,y,A,S,x,I,R,M=!1)=>{const D=d&&d.children,G=d?d.shapeFlag:0,L=h.children,{patchFlag:H,shapeFlag:q}=h;if(H>0){if(H&128){Xe(D,L,y,A,S,x,I,R,M);return}else if(H&256){Te(D,L,y,A,S,x,I,R,M);return}}q&8?(G&16&&U(D,S,x),L!==D&&c(y,L)):G&16?q&16?Xe(D,L,y,A,S,x,I,R,M):U(D,S,x,!0):(G&8&&c(y,""),q&16&&De(L,y,A,S,x,I,R,M))},Te=(d,h,y,A,S,x,I,R,M)=>{d=d||rr,h=h||rr;const D=d.length,G=h.length,L=Math.min(D,G);let H;for(H=0;HG?U(d,S,x,!0,!1,L):De(h,y,A,S,x,I,R,M,L)},Xe=(d,h,y,A,S,x,I,R,M)=>{let D=0;const G=h.length;let L=d.length-1,H=G-1;for(;D<=L&&D<=H;){const q=d[D],le=h[D]=M?vn(h[D]):Bt(h[D]);if(br(q,le))w(q,le,y,null,S,x,I,R,M);else break;D++}for(;D<=L&&D<=H;){const q=d[L],le=h[H]=M?vn(h[H]):Bt(h[H]);if(br(q,le))w(q,le,y,null,S,x,I,R,M);else break;L--,H--}if(D>L){if(D<=H){const q=H+1,le=qH)for(;D<=L;)Me(d[D],S,x,!0),D++;else{const q=D,le=D,Se=new Map;for(D=le;D<=H;D++){const B=h[D]=M?vn(h[D]):Bt(h[D]);B.key!=null&&Se.set(B.key,D)}let _e,m=0;const _=H-le+1;let b=!1,F=0;const z=new Array(_);for(D=0;D<_;D++)z[D]=0;for(D=q;D<=L;D++){const B=d[D];if(m>=_){Me(B,S,x,!0);continue}let fe;if(B.key!=null)fe=Se.get(B.key);else for(_e=le;_e<=H;_e++)if(z[_e-le]===0&&br(B,h[_e])){fe=_e;break}fe===void 0?Me(B,S,x,!0):(z[fe-le]=D+1,fe>=F?F=fe:b=!0,w(B,h[fe],y,null,S,x,I,R,M),m++)}const Q=b?p0(z):rr;for(_e=Q.length-1,D=_-1;D>=0;D--){const B=le+D,fe=h[B],$e=B+1{const{el:x,type:I,transition:R,children:M,shapeFlag:D}=d;if(D&6){Le(d.component.subTree,h,y,A);return}if(D&128){d.suspense.move(h,y,A);return}if(D&64){I.move(d,h,y,rt);return}if(I===sn){r(x,h,y);for(let L=0;LR.enter(x),S);else{const{leave:L,delayLeave:H,afterLeave:q}=R,le=()=>r(x,h,y),Se=()=>{L(x,()=>{le(),q&&q()})};H?H(x,le,Se):Se()}else r(x,h,y)},Me=(d,h,y,A=!1,S=!1)=>{const{type:x,props:I,ref:R,children:M,dynamicChildren:D,shapeFlag:G,patchFlag:L,dirs:H,cacheIndex:q}=d;if(L===-2&&(S=!1),R!=null&&eo(R,null,y,d,!0),q!=null&&(h.renderCache[q]=void 0),G&256){h.ctx.deactivate(d);return}const le=G&1&&H,Se=!Rr(d);let _e;if(Se&&(_e=I&&I.onVnodeBeforeUnmount)&&Lt(_e,h,d),G&6)Jt(d.component,y,A);else{if(G&128){d.suspense.unmount(y,A);return}le&&An(d,null,h,"beforeUnmount"),G&64?d.type.remove(d,h,y,rt,A):D&&!D.hasOnce&&(x!==sn||L>0&&L&64)?U(D,h,y,!1,!0):(x===sn&&L&384||!S&&G&16)&&U(M,h,y),A&&ut(d)}(Se&&(_e=I&&I.onVnodeUnmounted)||le)&&mt(()=>{_e&&Lt(_e,h,d),le&&An(d,null,h,"unmounted")},y)},ut=d=>{const{type:h,el:y,anchor:A,transition:S}=d;if(h===sn){Ge(y,A);return}if(h===Vi){V(d);return}const x=()=>{s(y),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(d.shapeFlag&1&&S&&!S.persisted){const{leave:I,delayLeave:R}=S,M=()=>I(y,x);R?R(d.el,x,M):M()}else x()},Ge=(d,h)=>{let y;for(;d!==h;)y=g(d),s(d),d=y;s(h)},Jt=(d,h,y)=>{const{bum:A,scope:S,job:x,subTree:I,um:R,m:M,a:D}=d;tu(M),tu(D),A&&ki(A),S.stop(),x&&(x.flags|=8,Me(I,d,h,y)),R&&mt(R,h),mt(()=>{d.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},U=(d,h,y,A=!1,S=!1,x=0)=>{for(let I=x;I{if(d.shapeFlag&6)return X(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const h=g(d.anchor||d.el),y=h&&h[Nh];return y?g(y):h};let Ye=!1;const pe=(d,h,y)=>{d==null?h._vnode&&Me(h._vnode,null,null,!0):w(h._vnode||null,d,h,null,null,null,y),h._vnode=d,Ye||(Ye=!0,Ga(),dc(),Ye=!1)},rt={p:w,um:Me,m:Le,r:ut,mt:Oe,mc:De,pc:J,pbc:ne,n:X,o:e};let lt,Ot;return{render:pe,hydrate:lt,createApp:s0(pe,lt)}}function Ri({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function kn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function h0(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ic(e,t,n=!1){const r=e.children,s=t.children;if(ie(r)&&ie(s))for(let i=0;i>1,e[n[a]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Rc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Rc(t)}function tu(e){if(e)for(let t=0;tor(_0);function g0(e,t){return Qo(e,null,t)}function zt(e,t,n){return Qo(e,t,n)}function Qo(e,t,n=ke){const{immediate:r,deep:s,flush:i,once:o}=n,a=qe({},n),u=t&&r||!t&&i!=="post";let l;if(Hr){if(i==="sync"){const p=m0();l=p.__watcherHandles||(p.__watcherHandles=[])}else if(!u){const p=()=>{};return p.stop=Wt,p.resume=Wt,p.pause=Wt,p}}const c=Ze;a.call=(p,v,w)=>Kt(p,c,v,w);let f=!1;i==="post"?a.scheduler=p=>{mt(p,c&&c.suspense)}:i!=="sync"&&(f=!0,a.scheduler=(p,v)=>{v?p():Ko(p)}),a.augmentJob=p=>{t&&(p.flags|=4),f&&(p.flags|=2,c&&(p.id=c.uid,p.i=c))};const g=Ih(e,t,a);return Hr&&(l?l.push(g):u&&g()),g}function v0(e,t,n){const r=this.proxy,s=Ke(e)?e.includes(".")?Pc(r,e):()=>r[e]:e.bind(r,r);let i;ee(t)?i=t:(i=t.handler,n=t);const o=ts(this),a=Qo(s,i.bind(r),n);return o(),a}function Pc(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Dt(t)}Modifiers`]||e[`${Hn(t)}Modifiers`];function E0(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ke;let s=n;const i=t.startsWith("update:"),o=i&&y0(r,t.slice(7));o&&(o.trim&&(s=n.map(c=>Ke(c)?c.trim():c)),o.number&&(s=n.map(Gd)));let a,u=r[a=Ai(t)]||r[a=Ai(Dt(t))];!u&&i&&(u=r[a=Ai(Hn(t))]),u&&Kt(u,e,6,s);const l=r[a+"Once"];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Kt(l,e,6,s)}}function Vc(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},a=!1;if(!ee(e)){const u=l=>{const c=Vc(l,t,!0);c&&(a=!0,qe(o,c))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!a?(He(e)&&r.set(e,null),null):(ie(i)?i.forEach(u=>o[u]=null):qe(o,i),He(e)&&r.set(e,o),o)}function ni(e,t){return!e||!Gs(t)?!1:(t=t.slice(2).replace(/Once$/,""),be(e,t[0].toLowerCase()+t.slice(1))||be(e,Hn(t))||be(e,t))}function Pi(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:a,emit:u,render:l,renderCache:c,props:f,data:g,setupState:p,ctx:v,inheritAttrs:w}=e,E=Ms(e);let O,P;try{if(n.shapeFlag&4){const V=s||r,Z=V;O=Bt(l.call(Z,V,c,f,p,g,v)),P=a}else{const V=t;O=Bt(V.length>1?V(f,{attrs:a,slots:o,emit:u}):V(f,null)),P=t.props?a:b0(a)}}catch(V){Vr.length=0,Qs(V,e,1),O=Ne(jr)}let j=O;if(P&&w!==!1){const V=Object.keys(P),{shapeFlag:Z}=j;V.length&&Z&7&&(i&&V.some(Io)&&(P=O0(P,i)),j=cr(j,P,!1,!0))}return n.dirs&&(j=cr(j,null,!1,!0),j.dirs=j.dirs?j.dirs.concat(n.dirs):n.dirs),n.transition&&Go(j,n.transition),O=j,Ms(E),O}const b0=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gs(n))&&((t||(t={}))[n]=e[n]);return t},O0=(e,t)=>{const n={};for(const r in e)(!Io(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function S0(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:a,patchFlag:u}=t,l=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return r?nu(r,o,l):!!o;if(u&8){const c=t.dynamicProps;for(let f=0;fe.__isSuspense;function x0(e,t){t&&t.pendingBranch?ie(e)?t.effects.push(...e):t.effects.push(e):Vh(e)}const sn=Symbol.for("v-fgt"),ri=Symbol.for("v-txt"),jr=Symbol.for("v-cmt"),Vi=Symbol.for("v-stc"),Vr=[];let Et=null;function Uc(e=!1){Vr.push(Et=e?null:[])}function T0(){Vr.pop(),Et=Vr[Vr.length-1]||null}let Br=1;function ru(e){Br+=e,e<0&&Et&&(Et.hasOnce=!0)}function Lc(e){return e.dynamicChildren=Br>0?Et||rr:null,T0(),Br>0&&Et&&Et.push(e),e}function D0(e,t,n,r,s,i){return Lc(we(e,t,n,r,s,i,!0))}function A0(e,t,n,r,s){return Lc(Ne(e,t,n,r,s,!0))}function Rs(e){return e?e.__v_isVNode===!0:!1}function br(e,t){return e.type===t.type&&e.key===t.key}const Yc=({key:e})=>e??null,vs=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ke(e)||Be(e)||ee(e)?{i:Tt,r:e,k:t,f:!!n}:e:null);function we(e,t=null,n=null,r=0,s=null,i=e===sn?0:1,o=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Yc(t),ref:t&&vs(t),scopeId:pc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Tt};return a?(ea(u,n),i&128&&e.normalize(u)):n&&(u.shapeFlag|=Ke(n)?8:16),Br>0&&!o&&Et&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&Et.push(u),u}const Ne=k0;function k0(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===bc)&&(e=jr),Rs(e)){const a=cr(e,t,!0);return n&&ea(a,n),Br>0&&!i&&Et&&(a.shapeFlag&6?Et[Et.indexOf(e)]=a:Et.push(a)),a.patchFlag=-2,a}if(Y0(e)&&(e=e.__vccOpts),t){t=C0(t);let{class:a,style:u}=t;a&&!Ke(a)&&(t.class=No(a)),He(u)&&(zo(u)&&!ie(u)&&(u=qe({},u)),t.style=Vo(u))}const o=Ke(e)?1:Nc(e)?128:Uh(e)?64:He(e)?4:ee(e)?2:0;return we(e,t,n,r,s,o,i,!0)}function C0(e){return e?zo(e)||Tc(e)?qe({},e):e:null}function cr(e,t,n=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:a,transition:u}=e,l=t?M0(s||{},t):s,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Yc(l),ref:t&&t.ref?n&&i?ie(i)?i.concat(vs(t)):[i,vs(t)]:vs(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==sn?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&cr(e.ssContent),ssFallback:e.ssFallback&&cr(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&r&&Go(c,u.clone(c)),c}function Tr(e=" ",t=0){return Ne(ri,null,e,t)}function Bt(e){return e==null||typeof e=="boolean"?Ne(jr):ie(e)?Ne(sn,null,e.slice()):Rs(e)?vn(e):Ne(ri,null,String(e))}function vn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:cr(e)}function ea(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(ie(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),ea(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Tc(t)?t._ctx=Tt:s===3&&Tt&&(Tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ee(t)?(t={default:t,_ctx:Tt},n=32):(t=String(t),r&64?(n=16,t=[Tr(t)]):n=8);e.children=t,e.shapeFlag|=n}function M0(...e){const t={};for(let n=0;nZe||Tt;let Ps,io;{const e=Xs(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};Ps=t("__VUE_INSTANCE_SETTERS__",n=>Ze=n),io=t("__VUE_SSR_SETTERS__",n=>Hr=n)}const ts=e=>{const t=Ze;return Ps(e),e.scope.on(),()=>{e.scope.off(),Ps(t)}},su=()=>{Ze&&Ze.scope.off(),Ps(null)};function $c(e){return e.vnode.shapeFlag&4}let Hr=!1;function P0(e,t=!1,n=!1){t&&io(t);const{props:r,children:s}=e.vnode,i=$c(e);i0(e,r,i,t),l0(e,s,n);const o=i?V0(e,t):void 0;return t&&io(!1),o}function V0(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Jh);const{setup:r}=n;if(r){Tn();const s=e.setupContext=r.length>1?U0(e):null,i=ts(e),o=es(r,e,0,[e.props,s]),a=Wl(o);if(Dn(),i(),(a||e.sp)&&!Rr(e)&&mc(e),a){if(o.then(su,su),t)return o.then(u=>{iu(e,u,t)}).catch(u=>{Qs(u,e,0)});e.asyncDep=o}else iu(e,o,t)}else jc(e,t)}function iu(e,t,n){ee(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:He(t)&&(e.setupState=lc(t)),jc(e,n)}let ou;function jc(e,t,n){const r=e.type;if(!e.render){if(!t&&ou&&!r.render){const s=r.template||Jo(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:a,compilerOptions:u}=r,l=qe(qe({isCustomElement:i,delimiters:a},o),u);r.render=ou(s,l)}}e.render=r.render||Wt}{const s=ts(e);Tn();try{Xh(e)}finally{Dn(),s()}}}const N0={get(e,t){return tt(e,"get",""),e[t]}};function U0(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,N0),slots:e.slots,emit:e.emit,expose:t}}function ta(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(lc(Sh(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pr)return Pr[n](e)},has(t,n){return n in t||n in Pr}})):e.proxy}function L0(e,t=!0){return ee(e)?e.displayName||e.name:e.name||t&&e.__name}function Y0(e){return ee(e)&&"__vccOpts"in e}const me=(e,t)=>Mh(e,t,Hr);function Vs(e,t,n){const r=arguments.length;return r===2?He(t)&&!ie(t)?Rs(t)?Ne(e,null,[t]):Ne(e,t):Ne(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Rs(n)&&(n=[n]),Ne(e,t,n))}const $0="3.5.12";/** -* @vue/runtime-dom v3.5.12 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let oo;const au=typeof window<"u"&&window.trustedTypes;if(au)try{oo=au.createPolicy("vue",{createHTML:e=>e})}catch{}const Bc=oo?e=>oo.createHTML(e):e=>e,j0="http://www.w3.org/2000/svg",B0="http://www.w3.org/1998/Math/MathML",nn=typeof document<"u"?document:null,uu=nn&&nn.createElement("template"),H0={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?nn.createElementNS(j0,e):t==="mathml"?nn.createElementNS(B0,e):n?nn.createElement(e,{is:n}):nn.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>nn.createTextNode(e),createComment:e=>nn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>nn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{uu.innerHTML=Bc(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const a=uu.content;if(r==="svg"||r==="mathml"){const u=a.firstChild;for(;u.firstChild;)a.appendChild(u.firstChild);a.removeChild(u)}t.insertBefore(a,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},W0=Symbol("_vtc");function z0(e,t,n){const r=e[W0];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const lu=Symbol("_vod"),K0=Symbol("_vsh"),G0=Symbol(""),q0=/(^|;)\s*display\s*:/;function Z0(e,t,n){const r=e.style,s=Ke(n);let i=!1;if(n&&!s){if(t)if(Ke(t))for(const o of t.split(";")){const a=o.slice(0,o.indexOf(":")).trim();n[a]==null&&ys(r,a,"")}else for(const o in t)n[o]==null&&ys(r,o,"");for(const o in n)o==="display"&&(i=!0),ys(r,o,n[o])}else if(s){if(t!==n){const o=r[G0];o&&(n+=";"+o),r.cssText=n,i=q0.test(n)}}else t&&e.removeAttribute("style");lu in e&&(e[lu]=i?r.display:"",e[K0]&&(r.display="none"))}const cu=/\s*!important$/;function ys(e,t,n){if(ie(n))n.forEach(r=>ys(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=J0(e,t);cu.test(n)?e.setProperty(Hn(r),n.replace(cu,""),"important"):e[r]=n}}const fu=["Webkit","Moz","ms"],Ni={};function J0(e,t){const n=Ni[t];if(n)return n;let r=Dt(t);if(r!=="filter"&&r in e)return Ni[t]=r;r=Js(r);for(let s=0;sUi||(np.then(()=>Ui=0),Ui=Date.now());function sp(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Kt(ip(r,n.value),t,5,[r])};return n.value=e,n.attached=rp(),n}function ip(e,t){if(ie(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const gu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,op=(e,t,n,r,s,i)=>{const o=s==="svg";t==="class"?z0(e,r,o):t==="style"?Z0(e,n,r):Gs(t)?Io(t)||ep(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ap(e,t,r,o))?(pu(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&hu(e,t,r,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ke(r))?pu(e,Dt(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),hu(e,t,r,o))};function ap(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&gu(t)&&ee(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return gu(t)&&Ke(n)?!1:t in e}const up=qe({patchProp:op},H0);let vu;function lp(){return vu||(vu=f0(up))}const cp=(...e)=>{const t=lp().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=dp(r);if(!s)return;const i=t._component;!ee(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=n(s,!1,fp(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},t};function fp(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function dp(e){return Ke(e)?document.querySelector(e):e}var hp=Object.create,Hc=Object.defineProperty,pp=Object.getOwnPropertyDescriptor,na=Object.getOwnPropertyNames,_p=Object.getPrototypeOf,mp=Object.prototype.hasOwnProperty,gp=(e,t)=>function(){return e&&(t=(0,e[na(e)[0]])(e=0)),t},vp=(e,t)=>function(){return t||(0,e[na(e)[0]])((t={exports:{}}).exports,t),t.exports},yp=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of na(t))!mp.call(e,s)&&s!==n&&Hc(e,s,{get:()=>t[s],enumerable:!(r=pp(t,s))||r.enumerable});return e},Ep=(e,t,n)=>(n=e!=null?hp(_p(e)):{},yp(Hc(n,"default",{value:e,enumerable:!0}),e)),ns=gp({"../../node_modules/.pnpm/tsup@8.3.0_@microsoft+api-extractor@7.43.0_@types+node@20.16.11__@swc+core@1.5.29_jiti@2.0.0__khi6fwhekjxtif3xyxfitrs5gq/node_modules/tsup/assets/esm_shims.js"(){}}),bp=vp({"../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js"(e,t){ns(),t.exports=r;function n(i){return i instanceof Buffer?Buffer.from(i):new i.constructor(i.buffer.slice(),i.byteOffset,i.length)}function r(i){if(i=i||{},i.circles)return s(i);const o=new Map;if(o.set(Date,f=>new Date(f)),o.set(Map,(f,g)=>new Map(u(Array.from(f),g))),o.set(Set,(f,g)=>new Set(u(Array.from(f),g))),i.constructorHandlers)for(const f of i.constructorHandlers)o.set(f[0],f[1]);let a=null;return i.proto?c:l;function u(f,g){const p=Object.keys(f),v=new Array(p.length);for(let w=0;wnew Date(p)),u.set(Map,(p,v)=>new Map(c(Array.from(p),v))),u.set(Set,(p,v)=>new Set(c(Array.from(p),v))),i.constructorHandlers)for(const p of i.constructorHandlers)u.set(p[0],p[1]);let l=null;return i.proto?g:f;function c(p,v){const w=Object.keys(p),E=new Array(w.length);for(let O=0;O(o=Ap(e,l,c),o.finally(()=>{if(o=null,n.trailing&&a&&!s){const f=u(l,a);return a=null,f}}),o);return function(...l){return o?(n.trailing&&(a=l),o):new Promise(c=>{const f=!s&&n.leading;clearTimeout(s),s=setTimeout(()=>{s=null;const g=n.leading?r:u(this,l);for(const p of i)p(g);i=[]},t),f?(r=u(this,l),c(r)):i.push(c)})}}async function Ap(e,t,n){return await e.apply(t,n)}function ao(e,t={},n){for(const r in e){const s=e[r],i=n?`${n}:${r}`:r;typeof s=="object"&&s!==null?ao(s,t,i):typeof s=="function"&&(t[i]=s)}return t}const kp={run:e=>e()},Cp=()=>kp,zc=typeof console.createTask<"u"?console.createTask:Cp;function Mp(e,t){const n=t.shift(),r=zc(n);return e.reduce((s,i)=>s.then(()=>r.run(()=>i(...t))),Promise.resolve())}function Fp(e,t){const n=t.shift(),r=zc(n);return Promise.all(e.map(s=>r.run(()=>s(...t))))}function Li(e,t){for(const n of[...e])n(t)}class Ip{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(t,n,r={}){if(!t||typeof n!="function")return()=>{};const s=t;let i;for(;this._deprecatedHooks[t];)i=this._deprecatedHooks[t],t=i.to;if(i&&!r.allowDeprecated){let o=i.message;o||(o=`${s} hook has been deprecated`+(i.to?`, please use ${i.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(o)||(console.warn(o),this._deprecatedMessages.add(o))}if(!n.name)try{Object.defineProperty(n,"name",{get:()=>"_"+t.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[t]=this._hooks[t]||[],this._hooks[t].push(n),()=>{n&&(this.removeHook(t,n),n=void 0)}}hookOnce(t,n){let r,s=(...i)=>(typeof r=="function"&&r(),r=void 0,s=void 0,n(...i));return r=this.hook(t,s),r}removeHook(t,n){if(this._hooks[t]){const r=this._hooks[t].indexOf(n);r!==-1&&this._hooks[t].splice(r,1),this._hooks[t].length===0&&delete this._hooks[t]}}deprecateHook(t,n){this._deprecatedHooks[t]=typeof n=="string"?{to:n}:n;const r=this._hooks[t]||[];delete this._hooks[t];for(const s of r)this.hook(t,s)}deprecateHooks(t){Object.assign(this._deprecatedHooks,t);for(const n in t)this.deprecateHook(n,t[n])}addHooks(t){const n=ao(t),r=Object.keys(n).map(s=>this.hook(s,n[s]));return()=>{for(const s of r.splice(0,r.length))s()}}removeHooks(t){const n=ao(t);for(const r in n)this.removeHook(r,n[r])}removeAllHooks(){for(const t in this._hooks)delete this._hooks[t]}callHook(t,...n){return n.unshift(t),this.callHookWith(Mp,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(Fp,t,...n)}callHookWith(t,n,...r){const s=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&Li(this._before,s);const i=t(n in this._hooks?[...this._hooks[n]]:[],r);return i instanceof Promise?i.finally(()=>{this._after&&s&&Li(this._after,s)}):(this._after&&s&&Li(this._after,s),i)}beforeEach(t){return this._before=this._before||[],this._before.push(t),()=>{if(this._before!==void 0){const n=this._before.indexOf(t);n!==-1&&this._before.splice(n,1)}}}afterEach(t){return this._after=this._after||[],this._after.push(t),()=>{if(this._after!==void 0){const n=this._after.indexOf(t);n!==-1&&this._after.splice(n,1)}}}}function Kc(){return new Ip}var Rp=Object.create,Gc=Object.defineProperty,Pp=Object.getOwnPropertyDescriptor,ra=Object.getOwnPropertyNames,Vp=Object.getPrototypeOf,Np=Object.prototype.hasOwnProperty,Up=(e,t)=>function(){return e&&(t=(0,e[ra(e)[0]])(e=0)),t},qc=(e,t)=>function(){return t||(0,e[ra(e)[0]])((t={exports:{}}).exports,t),t.exports},Lp=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ra(t))!Np.call(e,s)&&s!==n&&Gc(e,s,{get:()=>t[s],enumerable:!(r=Pp(t,s))||r.enumerable});return e},Yp=(e,t,n)=>(n=e!=null?Rp(Vp(e)):{},Lp(Gc(n,"default",{value:e,enumerable:!0}),e)),T=Up({"../../node_modules/.pnpm/tsup@8.3.0_@microsoft+api-extractor@7.43.0_@types+node@20.16.11__@swc+core@1.5.29_jiti@2.0.0__khi6fwhekjxtif3xyxfitrs5gq/node_modules/tsup/assets/esm_shims.js"(){}}),$p=qc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js"(e,t){T(),function(n){var r={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"Ae",Å:"A",Æ:"AE",Ç:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"Oe",Ő:"O",Ø:"O",Ù:"U",Ú:"U",Û:"U",Ü:"Ue",Ű:"U",Ý:"Y",Þ:"TH",ß:"ss",à:"a",á:"a",â:"a",ã:"a",ä:"ae",å:"a",æ:"ae",ç:"c",è:"e",é:"e",ê:"e",ë:"e",ì:"i",í:"i",î:"i",ï:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"oe",ő:"o",ø:"o",ù:"u",ú:"u",û:"u",ü:"ue",ű:"u",ý:"y",þ:"th",ÿ:"y","ẞ":"SS",ا:"a",أ:"a",إ:"i",آ:"aa",ؤ:"u",ئ:"e",ء:"a",ب:"b",ت:"t",ث:"th",ج:"j",ح:"h",خ:"kh",د:"d",ذ:"th",ر:"r",ز:"z",س:"s",ش:"sh",ص:"s",ض:"dh",ط:"t",ظ:"z",ع:"a",غ:"gh",ف:"f",ق:"q",ك:"k",ل:"l",م:"m",ن:"n",ه:"h",و:"w",ي:"y",ى:"a",ة:"h",ﻻ:"la",ﻷ:"laa",ﻹ:"lai",ﻵ:"laa",گ:"g",چ:"ch",پ:"p",ژ:"zh",ک:"k",ی:"y","َ":"a","ً":"an","ِ":"e","ٍ":"en","ُ":"u","ٌ":"on","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9",က:"k",ခ:"kh",ဂ:"g",ဃ:"ga",င:"ng",စ:"s",ဆ:"sa",ဇ:"z","စျ":"za",ည:"ny",ဋ:"t",ဌ:"ta",ဍ:"d",ဎ:"da",ဏ:"na",တ:"t",ထ:"ta",ဒ:"d",ဓ:"da",န:"n",ပ:"p",ဖ:"pa",ဗ:"b",ဘ:"ba",မ:"m",ယ:"y",ရ:"ya",လ:"l",ဝ:"w",သ:"th",ဟ:"h",ဠ:"la",အ:"a","ြ":"y","ျ":"ya","ွ":"w","ြွ":"yw","ျွ":"ywa","ှ":"h",ဧ:"e","၏":"-e",ဣ:"i",ဤ:"-i",ဉ:"u",ဦ:"-u",ဩ:"aw","သြော":"aw",ဪ:"aw","၀":"0","၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","္":"","့":"","း":"",č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z",ހ:"h",ށ:"sh",ނ:"n",ރ:"r",ބ:"b",ޅ:"lh",ކ:"k",އ:"a",ވ:"v",މ:"m",ފ:"f",ދ:"dh",ތ:"th",ލ:"l",ގ:"g",ޏ:"gn",ސ:"s",ޑ:"d",ޒ:"z",ޓ:"t",ޔ:"y",ޕ:"p",ޖ:"j",ޗ:"ch",ޘ:"tt",ޙ:"hh",ޚ:"kh",ޛ:"th",ޜ:"z",ޝ:"sh",ޞ:"s",ޟ:"d",ޠ:"t",ޡ:"z",ޢ:"a",ޣ:"gh",ޤ:"q",ޥ:"w","ަ":"a","ާ":"aa","ި":"i","ީ":"ee","ު":"u","ޫ":"oo","ެ":"e","ޭ":"ey","ޮ":"o","ޯ":"oa","ް":"",ა:"a",ბ:"b",გ:"g",დ:"d",ე:"e",ვ:"v",ზ:"z",თ:"t",ი:"i",კ:"k",ლ:"l",მ:"m",ნ:"n",ო:"o",პ:"p",ჟ:"zh",რ:"r",ს:"s",ტ:"t",უ:"u",ფ:"p",ქ:"k",ღ:"gh",ყ:"q",შ:"sh",ჩ:"ch",ც:"ts",ძ:"dz",წ:"ts",ჭ:"ch",ხ:"kh",ჯ:"j",ჰ:"h",α:"a",β:"v",γ:"g",δ:"d",ε:"e",ζ:"z",η:"i",θ:"th",ι:"i",κ:"k",λ:"l",μ:"m",ν:"n",ξ:"ks",ο:"o",π:"p",ρ:"r",σ:"s",τ:"t",υ:"y",φ:"f",χ:"x",ψ:"ps",ω:"o",ά:"a",έ:"e",ί:"i",ό:"o",ύ:"y",ή:"i",ώ:"o",ς:"s",ϊ:"i",ΰ:"y",ϋ:"y",ΐ:"i",Α:"A",Β:"B",Γ:"G",Δ:"D",Ε:"E",Ζ:"Z",Η:"I",Θ:"TH",Ι:"I",Κ:"K",Λ:"L",Μ:"M",Ν:"N",Ξ:"KS",Ο:"O",Π:"P",Ρ:"R",Σ:"S",Τ:"T",Υ:"Y",Φ:"F",Χ:"X",Ψ:"PS",Ω:"O",Ά:"A",Έ:"E",Ί:"I",Ό:"O",Ύ:"Y",Ή:"I",Ώ:"O",Ϊ:"I",Ϋ:"Y",ā:"a",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",ū:"u",Ā:"A",Ē:"E",Ģ:"G",Ī:"I",Ķ:"k",Ļ:"L",Ņ:"N",Ū:"U",Ќ:"Kj",ќ:"kj",Љ:"Lj",љ:"lj",Њ:"Nj",њ:"nj",Тс:"Ts",тс:"ts",ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"E",Ł:"L",Ń:"N",Ś:"S",Ź:"Z",Ż:"Z",Є:"Ye",І:"I",Ї:"Yi",Ґ:"G",є:"ye",і:"i",ї:"yi",ґ:"g",ă:"a",Ă:"A",ș:"s",Ș:"S",ț:"t",Ț:"T",ţ:"t",Ţ:"T",а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i",й:"i",к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f",х:"kh",ц:"c",ч:"ch",ш:"sh",щ:"sh",ъ:"",ы:"y",ь:"",э:"e",ю:"yu",я:"ya",А:"A",Б:"B",В:"V",Г:"G",Д:"D",Е:"E",Ё:"Yo",Ж:"Zh",З:"Z",И:"I",Й:"I",К:"K",Л:"L",М:"M",Н:"N",О:"O",П:"P",Р:"R",С:"S",Т:"T",У:"U",Ф:"F",Х:"Kh",Ц:"C",Ч:"Ch",Ш:"Sh",Щ:"Sh",Ъ:"",Ы:"Y",Ь:"",Э:"E",Ю:"Yu",Я:"Ya",ђ:"dj",ј:"j",ћ:"c",џ:"dz",Ђ:"Dj",Ј:"j",Ћ:"C",Џ:"Dz",ľ:"l",ĺ:"l",ŕ:"r",Ľ:"L",Ĺ:"L",Ŕ:"R",ş:"s",Ş:"S",ı:"i",İ:"I",ğ:"g",Ğ:"G",ả:"a",Ả:"A",ẳ:"a",Ẳ:"A",ẩ:"a",Ẩ:"A",đ:"d",Đ:"D",ẹ:"e",Ẹ:"E",ẽ:"e",Ẽ:"E",ẻ:"e",Ẻ:"E",ế:"e",Ế:"E",ề:"e",Ề:"E",ệ:"e",Ệ:"E",ễ:"e",Ễ:"E",ể:"e",Ể:"E",ỏ:"o",ọ:"o",Ọ:"o",ố:"o",Ố:"O",ồ:"o",Ồ:"O",ổ:"o",Ổ:"O",ộ:"o",Ộ:"O",ỗ:"o",Ỗ:"O",ơ:"o",Ơ:"O",ớ:"o",Ớ:"O",ờ:"o",Ờ:"O",ợ:"o",Ợ:"O",ỡ:"o",Ỡ:"O",Ở:"o",ở:"o",ị:"i",Ị:"I",ĩ:"i",Ĩ:"I",ỉ:"i",Ỉ:"i",ủ:"u",Ủ:"U",ụ:"u",Ụ:"U",ũ:"u",Ũ:"U",ư:"u",Ư:"U",ứ:"u",Ứ:"U",ừ:"u",Ừ:"U",ự:"u",Ự:"U",ữ:"u",Ữ:"U",ử:"u",Ử:"ư",ỷ:"y",Ỷ:"y",ỳ:"y",Ỳ:"Y",ỵ:"y",Ỵ:"Y",ỹ:"y",Ỹ:"Y",ạ:"a",Ạ:"A",ấ:"a",Ấ:"A",ầ:"a",Ầ:"A",ậ:"a",Ậ:"A",ẫ:"a",Ẫ:"A",ắ:"a",Ắ:"A",ằ:"a",Ằ:"A",ặ:"a",Ặ:"A",ẵ:"a",Ẵ:"A","⓪":"0","①":"1","②":"2","③":"3","④":"4","⑤":"5","⑥":"6","⑦":"7","⑧":"8","⑨":"9","⑩":"10","⑪":"11","⑫":"12","⑬":"13","⑭":"14","⑮":"15","⑯":"16","⑰":"17","⑱":"18","⑲":"18","⑳":"18","⓵":"1","⓶":"2","⓷":"3","⓸":"4","⓹":"5","⓺":"6","⓻":"7","⓼":"8","⓽":"9","⓾":"10","⓿":"0","⓫":"11","⓬":"12","⓭":"13","⓮":"14","⓯":"15","⓰":"16","⓱":"17","⓲":"18","⓳":"19","⓴":"20","Ⓐ":"A","Ⓑ":"B","Ⓒ":"C","Ⓓ":"D","Ⓔ":"E","Ⓕ":"F","Ⓖ":"G","Ⓗ":"H","Ⓘ":"I","Ⓙ":"J","Ⓚ":"K","Ⓛ":"L","Ⓜ":"M","Ⓝ":"N","Ⓞ":"O","Ⓟ":"P","Ⓠ":"Q","Ⓡ":"R","Ⓢ":"S","Ⓣ":"T","Ⓤ":"U","Ⓥ":"V","Ⓦ":"W","Ⓧ":"X","Ⓨ":"Y","Ⓩ":"Z","ⓐ":"a","ⓑ":"b","ⓒ":"c","ⓓ":"d","ⓔ":"e","ⓕ":"f","ⓖ":"g","ⓗ":"h","ⓘ":"i","ⓙ":"j","ⓚ":"k","ⓛ":"l","ⓜ":"m","ⓝ":"n","ⓞ":"o","ⓟ":"p","ⓠ":"q","ⓡ":"r","ⓢ":"s","ⓣ":"t","ⓤ":"u","ⓦ":"v","ⓥ":"w","ⓧ":"x","ⓨ":"y","ⓩ":"z","“":'"',"”":'"',"‘":"'","’":"'","∂":"d",ƒ:"f","™":"(TM)","©":"(C)",œ:"oe",Œ:"OE","®":"(R)","†":"+","℠":"(SM)","…":"...","˚":"o",º:"o",ª:"a","•":"*","၊":",","။":".",$:"USD","€":"EUR","₢":"BRN","₣":"FRF","£":"GBP","₤":"ITL","₦":"NGN","₧":"ESP","₩":"KRW","₪":"ILS","₫":"VND","₭":"LAK","₮":"MNT","₯":"GRD","₱":"ARS","₲":"PYG","₳":"ARA","₴":"UAH","₵":"GHS","¢":"cent","¥":"CNY",元:"CNY",円:"YEN","﷼":"IRR","₠":"EWE","฿":"THB","₨":"INR","₹":"INR","₰":"PF","₺":"TRY","؋":"AFN","₼":"AZN",лв:"BGN","៛":"KHR","₡":"CRC","₸":"KZT",ден:"MKD",zł:"PLN","₽":"RUB","₾":"GEL"},s=["်","ް"],i={"ာ":"a","ါ":"a","ေ":"e","ဲ":"e","ိ":"i","ီ":"i","ို":"o","ု":"u","ူ":"u","ေါင်":"aung","ော":"aw","ော်":"aw","ေါ":"aw","ေါ်":"aw","်":"်","က်":"et","ိုက်":"aik","ောက်":"auk","င်":"in","ိုင်":"aing","ောင်":"aung","စ်":"it","ည်":"i","တ်":"at","ိတ်":"eik","ုတ်":"ok","ွတ်":"ut","ေတ်":"it","ဒ်":"d","ိုဒ်":"ok","ုဒ်":"ait","န်":"an","ာန်":"an","ိန်":"ein","ုန်":"on","ွန်":"un","ပ်":"at","ိပ်":"eik","ုပ်":"ok","ွပ်":"ut","န်ုပ်":"nub","မ်":"an","ိမ်":"ein","ုမ်":"on","ွမ်":"un","ယ်":"e","ိုလ်":"ol","ဉ်":"in","ံ":"an","ိံ":"ein","ုံ":"on","ައް":"ah","ަށް":"ah"},o={en:{},az:{ç:"c",ə:"e",ğ:"g",ı:"i",ö:"o",ş:"s",ü:"u",Ç:"C",Ə:"E",Ğ:"G",İ:"I",Ö:"O",Ş:"S",Ü:"U"},cs:{č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z"},fi:{ä:"a",Ä:"A",ö:"o",Ö:"O"},hu:{ä:"a",Ä:"A",ö:"o",Ö:"O",ü:"u",Ü:"U",ű:"u",Ű:"U"},lt:{ą:"a",č:"c",ę:"e",ė:"e",į:"i",š:"s",ų:"u",ū:"u",ž:"z",Ą:"A",Č:"C",Ę:"E",Ė:"E",Į:"I",Š:"S",Ų:"U",Ū:"U"},lv:{ā:"a",č:"c",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",š:"s",ū:"u",ž:"z",Ā:"A",Č:"C",Ē:"E",Ģ:"G",Ī:"i",Ķ:"k",Ļ:"L",Ņ:"N",Š:"S",Ū:"u",Ž:"Z"},pl:{ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ó:"o",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"e",Ł:"L",Ń:"N",Ó:"O",Ś:"S",Ź:"Z",Ż:"Z"},sv:{ä:"a",Ä:"A",ö:"o",Ö:"O"},sk:{ä:"a",Ä:"A"},sr:{љ:"lj",њ:"nj",Љ:"Lj",Њ:"Nj",đ:"dj",Đ:"Dj"},tr:{Ü:"U",Ö:"O",ü:"u",ö:"o"}},a={ar:{"∆":"delta","∞":"la-nihaya","♥":"hob","&":"wa","|":"aw","<":"aqal-men",">":"akbar-men","∑":"majmou","¤":"omla"},az:{},ca:{"∆":"delta","∞":"infinit","♥":"amor","&":"i","|":"o","<":"menys que",">":"mes que","∑":"suma dels","¤":"moneda"},cs:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"nebo","<":"mensi nez",">":"vetsi nez","∑":"soucet","¤":"mena"},de:{"∆":"delta","∞":"unendlich","♥":"Liebe","&":"und","|":"oder","<":"kleiner als",">":"groesser als","∑":"Summe von","¤":"Waehrung"},dv:{"∆":"delta","∞":"kolunulaa","♥":"loabi","&":"aai","|":"noonee","<":"ah vure kuda",">":"ah vure bodu","∑":"jumula","¤":"faisaa"},en:{"∆":"delta","∞":"infinity","♥":"love","&":"and","|":"or","<":"less than",">":"greater than","∑":"sum","¤":"currency"},es:{"∆":"delta","∞":"infinito","♥":"amor","&":"y","|":"u","<":"menos que",">":"mas que","∑":"suma de los","¤":"moneda"},fa:{"∆":"delta","∞":"bi-nahayat","♥":"eshgh","&":"va","|":"ya","<":"kamtar-az",">":"bishtar-az","∑":"majmooe","¤":"vahed"},fi:{"∆":"delta","∞":"aarettomyys","♥":"rakkaus","&":"ja","|":"tai","<":"pienempi kuin",">":"suurempi kuin","∑":"summa","¤":"valuutta"},fr:{"∆":"delta","∞":"infiniment","♥":"Amour","&":"et","|":"ou","<":"moins que",">":"superieure a","∑":"somme des","¤":"monnaie"},ge:{"∆":"delta","∞":"usasruloba","♥":"siqvaruli","&":"da","|":"an","<":"naklebi",">":"meti","∑":"jami","¤":"valuta"},gr:{},hu:{"∆":"delta","∞":"vegtelen","♥":"szerelem","&":"es","|":"vagy","<":"kisebb mint",">":"nagyobb mint","∑":"szumma","¤":"penznem"},it:{"∆":"delta","∞":"infinito","♥":"amore","&":"e","|":"o","<":"minore di",">":"maggiore di","∑":"somma","¤":"moneta"},lt:{"∆":"delta","∞":"begalybe","♥":"meile","&":"ir","|":"ar","<":"maziau nei",">":"daugiau nei","∑":"suma","¤":"valiuta"},lv:{"∆":"delta","∞":"bezgaliba","♥":"milestiba","&":"un","|":"vai","<":"mazak neka",">":"lielaks neka","∑":"summa","¤":"valuta"},my:{"∆":"kwahkhyaet","∞":"asaonasme","♥":"akhyait","&":"nhin","|":"tho","<":"ngethaw",">":"kyithaw","∑":"paungld","¤":"ngwekye"},mk:{},nl:{"∆":"delta","∞":"oneindig","♥":"liefde","&":"en","|":"of","<":"kleiner dan",">":"groter dan","∑":"som","¤":"valuta"},pl:{"∆":"delta","∞":"nieskonczonosc","♥":"milosc","&":"i","|":"lub","<":"mniejsze niz",">":"wieksze niz","∑":"suma","¤":"waluta"},pt:{"∆":"delta","∞":"infinito","♥":"amor","&":"e","|":"ou","<":"menor que",">":"maior que","∑":"soma","¤":"moeda"},ro:{"∆":"delta","∞":"infinit","♥":"dragoste","&":"si","|":"sau","<":"mai mic ca",">":"mai mare ca","∑":"suma","¤":"valuta"},ru:{"∆":"delta","∞":"beskonechno","♥":"lubov","&":"i","|":"ili","<":"menshe",">":"bolshe","∑":"summa","¤":"valjuta"},sk:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"alebo","<":"menej ako",">":"viac ako","∑":"sucet","¤":"mena"},sr:{},tr:{"∆":"delta","∞":"sonsuzluk","♥":"ask","&":"ve","|":"veya","<":"kucuktur",">":"buyuktur","∑":"toplam","¤":"para birimi"},uk:{"∆":"delta","∞":"bezkinechnist","♥":"lubov","&":"i","|":"abo","<":"menshe",">":"bilshe","∑":"suma","¤":"valjuta"},vn:{"∆":"delta","∞":"vo cuc","♥":"yeu","&":"va","|":"hoac","<":"nho hon",">":"lon hon","∑":"tong","¤":"tien te"}},u=[";","?",":","@","&","=","+","$",",","/"].join(""),l=[";","?",":","@","&","=","+","$",","].join(""),c=[".","!","~","*","'","(",")"].join(""),f=function(E,O){var P="-",j="",V="",Z=!0,oe={},ae,De,ue,ne,te,Pe,Ue,Oe,je,W,C,J,Te,Xe,Le="";if(typeof E!="string")return"";if(typeof O=="string"&&(P=O),Ue=a.en,Oe=o.en,typeof O=="object"){ae=O.maintainCase||!1,oe=O.custom&&typeof O.custom=="object"?O.custom:oe,ue=+O.truncate>1&&O.truncate||!1,ne=O.uric||!1,te=O.uricNoSlash||!1,Pe=O.mark||!1,Z=!(O.symbols===!1||O.lang===!1),P=O.separator||P,ne&&(Le+=u),te&&(Le+=l),Pe&&(Le+=c),Ue=O.lang&&a[O.lang]&&Z?a[O.lang]:Z?a.en:{},Oe=O.lang&&o[O.lang]?o[O.lang]:O.lang===!1||O.lang===!0?{}:o.en,O.titleCase&&typeof O.titleCase.length=="number"&&Array.prototype.toString.call(O.titleCase)?(O.titleCase.forEach(function(Me){oe[Me+""]=Me+""}),De=!0):De=!!O.titleCase,O.custom&&typeof O.custom.length=="number"&&Array.prototype.toString.call(O.custom)&&O.custom.forEach(function(Me){oe[Me+""]=Me+""}),Object.keys(oe).forEach(function(Me){var ut;Me.length>1?ut=new RegExp("\\b"+p(Me)+"\\b","gi"):ut=new RegExp(p(Me),"gi"),E=E.replace(ut,oe[Me])});for(C in oe)Le+=C}for(Le+=P,Le=p(Le),E=E.replace(/(^\s+|\s+$)/g,""),Te=!1,Xe=!1,W=0,J=E.length;W=0?(V+=C,C=""):Xe===!0?(C=i[V]+r[C],V=""):C=Te&&r[C].match(/[A-Za-z0-9]/)?" "+r[C]:r[C],Te=!1,Xe=!1):C in i?(V+=C,C="",W===J-1&&(C=i[V]),Xe=!0):Ue[C]&&!(ne&&u.indexOf(C)!==-1)&&!(te&&l.indexOf(C)!==-1)?(C=Te||j.substr(-1).match(/[A-Za-z0-9]/)?P+Ue[C]:Ue[C],C+=E[W+1]!==void 0&&E[W+1].match(/[A-Za-z0-9]/)?P:"",Te=!0):(Xe===!0?(C=i[V]+C,V="",Xe=!1):Te&&(/[A-Za-z0-9]/.test(C)||j.substr(-1).match(/A-Za-z0-9]/))&&(C=" "+C),Te=!1),j+=C.replace(new RegExp("[^\\w\\s"+Le+"_-]","g"),P);return De&&(j=j.replace(/(\w)(\S*)/g,function(Me,ut,Ge){var Jt=ut.toUpperCase()+(Ge!==null?Ge:"");return Object.keys(oe).indexOf(Jt.toLowerCase())<0?Jt:Jt.toLowerCase()})),j=j.replace(/\s+/g,P).replace(new RegExp("\\"+P+"+","g"),P).replace(new RegExp("(^\\"+P+"+|\\"+P+"+$)","g"),""),ue&&j.length>ue&&(je=j.charAt(ue)===P,j=j.slice(0,ue),je||(j=j.slice(0,j.lastIndexOf(P)))),!ae&&!De&&(j=j.toLowerCase()),j},g=function(E){return function(P){return f(P,E)}},p=function(E){return E.replace(/[-\\^$*+?.()|[\]{}\/]/g,"\\$&")},v=function(w,E){for(var O in E)if(E[O]===w)return!0};if(typeof t<"u"&&t.exports)t.exports=f,t.exports.createSlug=g;else if(typeof define<"u"&&define.amd)define([],function(){return f});else try{if(n.getSlug||n.createSlug)throw"speakingurl: globals exists /(getSlug|createSlug)/";n.getSlug=f,n.createSlug=g}catch{}}(e)}}),jp=qc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js"(e,t){T(),t.exports=$p()}});T();T();T();T();T();T();T();function Bp(e){return!!(e&&e.__v_isReadonly)}function Zc(e){return Bp(e)?Zc(e.__v_raw):!!(e&&e.__v_isReactive)}function Yi(e){return!!(e&&e.__v_isRef===!0)}function Dr(e){const t=e&&e.__v_raw;return t?Dr(t):e}var Hp=Symbol.for("v-fgt");T();function Wp(e){var t;const n=e.name||e._componentTag||e.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__||e.__name;return n==="index"&&((t=e.__file)!=null&&t.endsWith("index.vue"))?"":n}function zp(e){const t=e.__file;if(t)return xp(Tp(t,".vue"))}function bu(e,t){return e.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__=t,t}function sa(e){if(e.__VUE_DEVTOOLS_NEXT_APP_RECORD__)return e.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(e.root)return e.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__}async function Kp(e){const{app:t,uid:n,instance:r}=e;try{if(r.__VUE_DEVTOOLS_NEXT_UID__)return r.__VUE_DEVTOOLS_NEXT_UID__;const s=await sa(t);if(!s)return null;const i=s.rootInstance===r;return`${s.id}:${i?"root":n}`}catch{}}function Jc(e){var t;return((t=e.subTree)==null?void 0:t.type)===Hp}function oi(e){var t,n,r;const s=Wp((e==null?void 0:e.type)||{});if(s)return s;if((e==null?void 0:e.root)===e)return"Root";for(const o in(n=(t=e.parent)==null?void 0:t.type)==null?void 0:n.components)if(e.parent.type.components[o]===(e==null?void 0:e.type))return bu(e,o);for(const o in(r=e.appContext)==null?void 0:r.components)if(e.appContext.components[o]===(e==null?void 0:e.type))return bu(e,o);const i=zp((e==null?void 0:e.type)||{});return i||"Anonymous Component"}function uo(e,t){return t=t||`${e.id}:root`,e.instanceMap.get(t)||e.instanceMap.get(":root")}var Gp=class{constructor(){this.refEditor=new qp}set(e,t,n,r){const s=Array.isArray(t)?t:t.split(".");for(;s.length>1;){const a=s.shift();e instanceof Map&&(e=e.get(a)),e instanceof Set?e=Array.from(e.values())[a]:e=e[a],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}const i=s[0],o=this.refEditor.get(e)[i];r?r(e,i,n):this.refEditor.isRef(o)?this.refEditor.set(o,n):e[i]=n}get(e,t){const n=Array.isArray(t)?t:t.split(".");for(let r=0;r"u")return!1;const r=Array.isArray(t)?t.slice():t.split("."),s=n?2:1;for(;e&&r.length>s;){const i=r.shift();e=e[i],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}return e!=null&&Object.prototype.hasOwnProperty.call(e,r[0])}createDefaultSetCallback(e){return(t,n,r)=>{if((e.remove||e.newKey)&&(Array.isArray(t)?t.splice(n,1):Dr(t)instanceof Map?t.delete(n):Dr(t)instanceof Set?t.delete(Array.from(t.values())[n]):Reflect.deleteProperty(t,n)),!e.remove){const s=t[e.newKey||n];this.refEditor.isRef(s)?this.refEditor.set(s,r):Dr(t)instanceof Map?t.set(e.newKey||n,r):Dr(t)instanceof Set?t.add(r):t[e.newKey||n]=r}}}},qp=class{set(e,t){if(Yi(e))e.value=t;else{if(e instanceof Set&&Array.isArray(t)){e.clear(),t.forEach(s=>e.add(s));return}const n=Object.keys(t);if(e instanceof Map){const s=new Set(e.keys());n.forEach(i=>{e.set(i,Reflect.get(t,i)),s.delete(i)}),s.forEach(i=>e.delete(i));return}const r=new Set(Object.keys(e));n.forEach(s=>{Reflect.set(e,s,Reflect.get(t,s)),r.delete(s)}),r.forEach(s=>Reflect.deleteProperty(e,s))}}get(e){return Yi(e)?e.value:e}isRef(e){return Yi(e)||Zc(e)}};T();function ia(e){return Jc(e)?Zp(e.subTree):e.subTree?[e.subTree.el]:[]}function Zp(e){if(!e.children)return[];const t=[];return e.children.forEach(n=>{n.component?t.push(...ia(n.component)):n!=null&&n.el&&t.push(n.el)}),t}T();T();function Jp(){const e={top:0,bottom:0,left:0,right:0,get width(){return e.right-e.left},get height(){return e.bottom-e.top}};return e}var ds;function Xp(e){return ds||(ds=document.createRange()),ds.selectNode(e),ds.getBoundingClientRect()}function Qp(e){const t=Jp();if(!e.children)return t;for(let n=0,r=e.children.length;ne.bottom)&&(e.bottom=t.bottom),(!e.left||t.lefte.right)&&(e.right=t.right),e}var Ou={top:0,left:0,right:0,bottom:0,width:0,height:0};function jn(e){const t=e.subTree.el;return typeof window>"u"?Ou:Jc(e)?Qp(e.subTree):(t==null?void 0:t.nodeType)===1?t==null?void 0:t.getBoundingClientRect():e.subTree.component?jn(e.subTree.component):Ou}var Xc="__vue-devtools-component-inspector__",Qc="__vue-devtools-component-inspector__card__",ef="__vue-devtools-component-inspector__name__",tf="__vue-devtools-component-inspector__indicator__",nf={display:"block",zIndex:2147483640,position:"fixed",backgroundColor:"#42b88325",border:"1px solid #42b88350",borderRadius:"5px",transition:"all 0.1s ease-in",pointerEvents:"none"},t_={fontFamily:"Arial, Helvetica, sans-serif",padding:"5px 8px",borderRadius:"4px",textAlign:"left",position:"absolute",left:0,color:"#e9e9e9",fontSize:"14px",fontWeight:600,lineHeight:"24px",backgroundColor:"#42b883",boxShadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)"},n_={display:"inline-block",fontWeight:400,fontStyle:"normal",fontSize:"12px",opacity:.7};function pr(){return document.getElementById(Xc)}function r_(){return document.getElementById(Qc)}function s_(){return document.getElementById(tf)}function i_(){return document.getElementById(ef)}function oa(e){return{left:`${Math.round(e.left*100)/100}px`,top:`${Math.round(e.top*100)/100}px`,width:`${Math.round(e.width*100)/100}px`,height:`${Math.round(e.height*100)/100}px`}}function aa(e){var t;const n=document.createElement("div");n.id=(t=e.elementId)!=null?t:Xc,Object.assign(n.style,{...nf,...oa(e.bounds),...e.style});const r=document.createElement("span");r.id=Qc,Object.assign(r.style,{...t_,top:e.bounds.top<35?0:"-35px"});const s=document.createElement("span");s.id=ef,s.innerHTML=`<${e.name}>  `;const i=document.createElement("i");return i.id=tf,i.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`,Object.assign(i.style,n_),r.appendChild(s),r.appendChild(i),n.appendChild(r),document.body.appendChild(n),n}function ua(e){const t=pr(),n=r_(),r=i_(),s=s_();t&&(Object.assign(t.style,{...nf,...oa(e.bounds)}),Object.assign(n.style,{top:e.bounds.top<35?0:"-35px"}),r.innerHTML=`<${e.name}>  `,s.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`)}function o_(e){const t=jn(e),n=oi(e);pr()?ua({bounds:t,name:n}):aa({bounds:t,name:n})}function rf(){const e=pr();e&&(e.style.display="none")}var lo=null;function co(e){const t=e.target;if(t){const n=t.__vueParentComponent;if(n&&(lo=n,n.vnode.el)){const s=jn(n),i=oi(n);pr()?ua({bounds:s,name:i}):aa({bounds:s,name:i})}}}function a_(e,t){var n;if(e.preventDefault(),e.stopPropagation(),lo){const r=(n=ht.value)==null?void 0:n.app;Kp({app:r,uid:r.uid,instance:lo}).then(s=>{t(s)})}}var Ns=null;function u_(){rf(),window.removeEventListener("mouseover",co),window.removeEventListener("click",Ns,!0),Ns=null}function l_(){return window.addEventListener("mouseover",co),new Promise(e=>{function t(n){n.preventDefault(),n.stopPropagation(),a_(n,r=>{window.removeEventListener("click",t,!0),Ns=null,window.removeEventListener("mouseover",co);const s=pr();s&&(s.style.display="none"),e(JSON.stringify({id:r}))})}Ns=t,window.addEventListener("click",t,!0)})}function c_(e){const t=uo(ht.value,e.id);if(t){const[n]=ia(t);if(typeof n.scrollIntoView=="function")n.scrollIntoView({behavior:"smooth"});else{const r=jn(t),s=document.createElement("div"),i={...oa(r),position:"absolute"};Object.assign(s.style,i),document.body.appendChild(s),s.scrollIntoView({behavior:"smooth"}),setTimeout(()=>{document.body.removeChild(s)},2e3)}setTimeout(()=>{const r=jn(t);if(r.width||r.height){const s=oi(t),i=pr();i?ua({...e,name:s,bounds:r}):aa({...e,name:s,bounds:r}),setTimeout(()=>{i&&(i.style.display="none")},1500)}},1200)}}T();var Su,wu;(wu=(Su=$).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__)!=null||(Su.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__=!0);function f_(e){let t=0;const n=setInterval(()=>{$.__VUE_INSPECTOR__&&(clearInterval(n),t+=30,e()),t>=5e3&&clearInterval(n)},30)}function d_(){const e=$.__VUE_INSPECTOR__,t=e.openInEditor;e.openInEditor=async(...n)=>{e.disable(),t(...n)}}function h_(){return new Promise(e=>{function t(){d_(),e($.__VUE_INSPECTOR__)}$.__VUE_INSPECTOR__?t():f_(()=>{t()})})}T();T();T();var p_="__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__";function __(){if(!Wc||typeof localStorage>"u")return{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""};const e=localStorage.getItem(p_);return e?JSON.parse(e):{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""}}T();T();T();var xu,Tu;(Tu=(xu=$).__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS)!=null||(xu.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS=[]);var m_=new Proxy($.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS,{get(e,t,n){return Reflect.get(e,t,n)}});function g_(e,t){m_.push({...e,descriptorId:t.id,appRecord:sa(t.app)})}var Du,Au;(Au=(Du=$).__VUE_DEVTOOLS_KIT_INSPECTOR__)!=null||(Du.__VUE_DEVTOOLS_KIT_INSPECTOR__=[]);var la=new Proxy($.__VUE_DEVTOOLS_KIT_INSPECTOR__,{get(e,t,n){return Reflect.get(e,t,n)}}),sf=ii(()=>{_r.hooks.callHook("sendInspectorToClient",of())});function v_(e,t){la.push({options:e,descriptor:t,treeFilter:"",selectedNodeId:"",appRecord:sa(t.app)}),sf()}function of(){return la.filter(e=>e.descriptor.app===ht.value.app).filter(e=>e.descriptor.id!=="components").map(e=>{var t;const n=e.descriptor,r=e.options;return{id:r.id,label:r.label,logo:n.logo,icon:`custom-ic-baseline-${(t=r==null?void 0:r.icon)==null?void 0:t.replace(/_/g,"-")}`,packageName:n.packageName,homepage:n.homepage,pluginId:n.id}})}function Es(e,t){return la.find(n=>n.options.id===e&&(t?n.descriptor.app===t:!0))}function y_(){const e=Kc();return e.hook("addInspector",({inspector:t,plugin:n})=>{v_(t,n.descriptor)}),e.hook("sendInspectorTree",async({inspectorId:t,plugin:n})=>{var r;if(!t||!((r=n==null?void 0:n.descriptor)!=null&&r.app))return;const s=Es(t,n.descriptor.app),i={app:n.descriptor.app,inspectorId:t,filter:(s==null?void 0:s.treeFilter)||"",rootNodes:[]};await new Promise(o=>{e.callHookWith(async a=>{await Promise.all(a.map(u=>u(i))),o()},"getInspectorTree")}),e.callHookWith(async o=>{await Promise.all(o.map(a=>a({inspectorId:t,rootNodes:i.rootNodes})))},"sendInspectorTreeToClient")}),e.hook("sendInspectorState",async({inspectorId:t,plugin:n})=>{var r;if(!t||!((r=n==null?void 0:n.descriptor)!=null&&r.app))return;const s=Es(t,n.descriptor.app),i={app:n.descriptor.app,inspectorId:t,nodeId:(s==null?void 0:s.selectedNodeId)||"",state:null},o={currentTab:`custom-inspector:${t}`};i.nodeId&&await new Promise(a=>{e.callHookWith(async u=>{await Promise.all(u.map(l=>l(i,o))),a()},"getInspectorState")}),e.callHookWith(async a=>{await Promise.all(a.map(u=>u({inspectorId:t,nodeId:i.nodeId,state:i.state})))},"sendInspectorStateToClient")}),e.hook("customInspectorSelectNode",({inspectorId:t,nodeId:n,plugin:r})=>{const s=Es(t,r.descriptor.app);s&&(s.selectedNodeId=n)}),e.hook("timelineLayerAdded",({options:t,plugin:n})=>{g_(t,n.descriptor)}),e.hook("timelineEventAdded",({options:t,plugin:n})=>{e.callHookWith(async r=>{await Promise.all(r.map(s=>s(t)))},"sendTimelineEventToClient")}),e.hook("getComponentInstances",async({app:t})=>{const n=t.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(!n)return null;const r=n.id.toString();return[...n.instanceMap].filter(([i])=>i.split(":")[0]===r).map(([,i])=>i)}),e.hook("getComponentBounds",async({instance:t})=>jn(t)),e.hook("getComponentName",({instance:t})=>oi(t)),e.hook("componentHighlight",({uid:t})=>{const n=ht.value.instanceMap.get(t);n&&o_(n)}),e.hook("componentUnhighlight",()=>{rf()}),e}var ku,Cu;(Cu=(ku=$).__VUE_DEVTOOLS_KIT_APP_RECORDS__)!=null||(ku.__VUE_DEVTOOLS_KIT_APP_RECORDS__=[]);var Mu,Fu;(Fu=(Mu=$).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__)!=null||(Mu.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__={});var Iu,Ru;(Ru=(Iu=$).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__)!=null||(Iu.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__="");var Pu,Vu;(Vu=(Pu=$).__VUE_DEVTOOLS_KIT_CUSTOM_TABS__)!=null||(Pu.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__=[]);var Nu,Uu;(Uu=(Nu=$).__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__)!=null||(Nu.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__=[]);var In="__VUE_DEVTOOLS_KIT_GLOBAL_STATE__";function E_(){return{connected:!1,clientConnected:!1,vitePluginDetected:!0,appRecords:[],activeAppRecordId:"",tabs:[],commands:[],highPerfModeEnabled:!0,devtoolsClientDetected:{},perfUniqueGroupId:0,timelineLayersState:__()}}var Lu,Yu;(Yu=(Lu=$)[In])!=null||(Lu[In]=E_());var b_=ii(e=>{_r.hooks.callHook("devtoolsStateUpdated",{state:e})});ii((e,t)=>{_r.hooks.callHook("devtoolsConnectedUpdated",{state:e,oldState:t})});var ai=new Proxy($.__VUE_DEVTOOLS_KIT_APP_RECORDS__,{get(e,t,n){return t==="value"?$.__VUE_DEVTOOLS_KIT_APP_RECORDS__:$.__VUE_DEVTOOLS_KIT_APP_RECORDS__[t]}}),ht=new Proxy($.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__,{get(e,t,n){return t==="value"?$.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__:t==="id"?$.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__:$.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[t]}});function af(){b_({...$[In],appRecords:ai.value,activeAppRecordId:ht.id,tabs:$.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,commands:$.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__})}function O_(e){$.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__=e,af()}function S_(e){$.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__=e,af()}var Nn=new Proxy($[In],{get(e,t){return t==="appRecords"?ai:t==="activeAppRecordId"?ht.id:t==="tabs"?$.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__:t==="commands"?$.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__:$[In][t]},deleteProperty(e,t){return delete e[t],!0},set(e,t,n){return{...$[In]},e[t]=n,$[In][t]=n,!0}});function w_(e={}){var t,n,r;const{file:s,host:i,baseUrl:o=window.location.origin,line:a=0,column:u=0}=e;if(s){if(i==="chrome-extension"){const l=s.replace(/\\/g,"\\\\"),c=(n=(t=window.VUE_DEVTOOLS_CONFIG)==null?void 0:t.openInEditorHost)!=null?n:"/";fetch(`${c}__open-in-editor?file=${encodeURI(s)}`).then(f=>{if(!f.ok){const g=`Opening component ${l} failed`;console.log(`%c${g}`,"color:red")}})}else if(Nn.vitePluginDetected){const l=(r=$.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__)!=null?r:o;$.__VUE_INSPECTOR__.openInEditor(l,s,a,u)}}}T();T();T();T();T();var $u,ju;(ju=($u=$).__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__)!=null||($u.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__=[]);var ca=new Proxy($.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__,{get(e,t,n){return Reflect.get(e,t,n)}});function fo(e){const t={};return Object.keys(e).forEach(n=>{t[n]=e[n].defaultValue}),t}function fa(e){return`__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${e}__`}function x_(e){var t,n,r;const s=(n=(t=ca.find(i=>{var o;return i[0].id===e&&!!((o=i[0])!=null&&o.settings)}))==null?void 0:t[0])!=null?n:null;return(r=s==null?void 0:s.settings)!=null?r:null}function uf(e,t){var n,r,s;const i=fa(e);if(i){const o=localStorage.getItem(i);if(o)return JSON.parse(o)}if(e){const o=(r=(n=ca.find(a=>a[0].id===e))==null?void 0:n[0])!=null?r:null;return fo((s=o==null?void 0:o.settings)!=null?s:{})}return fo(t)}function T_(e,t){const n=fa(e);localStorage.getItem(n)||localStorage.setItem(n,JSON.stringify(fo(t)))}function D_(e,t,n){const r=fa(e),s=localStorage.getItem(r),i=JSON.parse(s||"{}"),o={...i,[t]:n};localStorage.setItem(r,JSON.stringify(o)),_r.hooks.callHookWith(a=>{a.forEach(u=>u({pluginId:e,key:t,oldValue:i[t],newValue:n,settings:o}))},"setPluginSettings")}T();T();T();T();T();T();T();T();T();T();T();var Bu,Hu,gt=(Hu=(Bu=$).__VUE_DEVTOOLS_HOOK)!=null?Hu:Bu.__VUE_DEVTOOLS_HOOK=Kc(),A_={vueAppInit(e){gt.hook("app:init",e)},vueAppUnmount(e){gt.hook("app:unmount",e)},vueAppConnected(e){gt.hook("app:connected",e)},componentAdded(e){return gt.hook("component:added",e)},componentEmit(e){return gt.hook("component:emit",e)},componentUpdated(e){return gt.hook("component:updated",e)},componentRemoved(e){return gt.hook("component:removed",e)},setupDevtoolsPlugin(e){gt.hook("devtools-plugin:setup",e)},perfStart(e){return gt.hook("perf:start",e)},perfEnd(e){return gt.hook("perf:end",e)}},k_={on:A_,setupDevToolsPlugin(e,t){return gt.callHook("devtools-plugin:setup",e,t)}},C_=class{constructor({plugin:e,ctx:t}){this.hooks=t.hooks,this.plugin=e}get on(){return{visitComponentTree:e=>{this.hooks.hook("visitComponentTree",e)},inspectComponent:e=>{this.hooks.hook("inspectComponent",e)},editComponentState:e=>{this.hooks.hook("editComponentState",e)},getInspectorTree:e=>{this.hooks.hook("getInspectorTree",e)},getInspectorState:e=>{this.hooks.hook("getInspectorState",e)},editInspectorState:e=>{this.hooks.hook("editInspectorState",e)},inspectTimelineEvent:e=>{this.hooks.hook("inspectTimelineEvent",e)},timelineCleared:e=>{this.hooks.hook("timelineCleared",e)},setPluginSettings:e=>{this.hooks.hook("setPluginSettings",e)}}}notifyComponentUpdate(e){var t;const n=of().find(r=>r.packageName===this.plugin.descriptor.packageName);if(n!=null&&n.id){if(e){const r=[e.appContext.app,e.uid,(t=e.parent)==null?void 0:t.uid,e];gt.callHook("component:updated",...r)}else gt.callHook("component:updated");this.hooks.callHook("sendInspectorState",{inspectorId:n.id,plugin:this.plugin})}}addInspector(e){this.hooks.callHook("addInspector",{inspector:e,plugin:this.plugin}),this.plugin.descriptor.settings&&T_(e.id,this.plugin.descriptor.settings)}sendInspectorTree(e){this.hooks.callHook("sendInspectorTree",{inspectorId:e,plugin:this.plugin})}sendInspectorState(e){this.hooks.callHook("sendInspectorState",{inspectorId:e,plugin:this.plugin})}selectInspectorNode(e,t){this.hooks.callHook("customInspectorSelectNode",{inspectorId:e,nodeId:t,plugin:this.plugin})}now(){return Date.now()}addTimelineLayer(e){this.hooks.callHook("timelineLayerAdded",{options:e,plugin:this.plugin})}addTimelineEvent(e){this.hooks.callHook("timelineEventAdded",{options:e,plugin:this.plugin})}getSettings(e){return uf(e??this.plugin.descriptor.id,this.plugin.descriptor.settings)}getComponentInstances(e){return this.hooks.callHook("getComponentInstances",{app:e})}getComponentBounds(e){return this.hooks.callHook("getComponentBounds",{instance:e})}getComponentName(e){return this.hooks.callHook("getComponentName",{instance:e})}highlightElement(e){const t=e.__VUE_DEVTOOLS_NEXT_UID__;return this.hooks.callHook("componentHighlight",{uid:t})}unhighlightElement(){return this.hooks.callHook("componentUnhighlight")}},M_=C_;T();T();T();T();var F_="__vue_devtool_undefined__",I_="__vue_devtool_infinity__",R_="__vue_devtool_negative_infinity__",P_="__vue_devtool_nan__";T();T();var V_={[F_]:"undefined",[P_]:"NaN",[I_]:"Infinity",[R_]:"-Infinity"};Object.entries(V_).reduce((e,[t,n])=>(e[n]=t,e),{});T();T();T();T();T();var Wu,zu;(zu=(Wu=$).__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__)!=null||(Wu.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__=new Set);function N_(e,t){const[n,r]=e;if(n.app!==t)return;const s=new M_({plugin:{setupFn:r,descriptor:n},ctx:_r});n.packageName==="vuex"&&s.on.editInspectorState(i=>{s.sendInspectorState(i.inspectorId)}),r(s)}function U_(e){$.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(e)||($.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(e),ca.forEach(t=>{N_(t,e)}))}T();T();var Wr="__VUE_DEVTOOLS_ROUTER__",fr="__VUE_DEVTOOLS_ROUTER_INFO__",Ku,Gu;(Gu=(Ku=$)[fr])!=null||(Ku[fr]={currentRoute:null,routes:[]});var qu,Zu;(Zu=(qu=$)[Wr])!=null||(qu[Wr]={});new Proxy($[fr],{get(e,t){return $[fr][t]}});new Proxy($[Wr],{get(e,t){if(t==="value")return $[Wr]}});function L_(e){const t=new Map;return((e==null?void 0:e.getRoutes())||[]).filter(n=>!t.has(n.path)&&t.set(n.path,1))}function da(e){return e.map(t=>{let{path:n,name:r,children:s,meta:i}=t;return s!=null&&s.length&&(s=da(s)),{path:n,name:r,children:s,meta:i}})}function Y_(e){if(e){const{fullPath:t,hash:n,href:r,path:s,name:i,matched:o,params:a,query:u}=e;return{fullPath:t,hash:n,href:r,path:s,name:i,params:a,query:u,matched:da(o)}}return e}function $_(e,t){function n(){var r;const s=(r=e.app)==null?void 0:r.config.globalProperties.$router,i=Y_(s==null?void 0:s.currentRoute.value),o=da(L_(s)),a=console.warn;console.warn=()=>{},$[fr]={currentRoute:i?Eu(i):{},routes:Eu(o)},$[Wr]=s,console.warn=a}n(),k_.on.componentUpdated(ii(()=>{var r;((r=t.value)==null?void 0:r.app)===e.app&&(n(),_r.hooks.callHook("routerInfoUpdated",{state:$[fr]}))},200))}function j_(e){return{async getInspectorTree(t){const n={...t,app:ht.value.app,rootNodes:[]};return await new Promise(r=>{e.callHookWith(async s=>{await Promise.all(s.map(i=>i(n))),r()},"getInspectorTree")}),n.rootNodes},async getInspectorState(t){const n={...t,app:ht.value.app,state:null},r={currentTab:`custom-inspector:${t.inspectorId}`};return await new Promise(s=>{e.callHookWith(async i=>{await Promise.all(i.map(o=>o(n,r))),s()},"getInspectorState")}),n.state},editInspectorState(t){const n=new Gp,r={...t,app:ht.value.app,set:(s,i=t.path,o=t.state.value,a)=>{n.set(s,i,o,a||n.createDefaultSetCallback(t.state))}};e.callHookWith(s=>{s.forEach(i=>i(r))},"editInspectorState")},sendInspectorState(t){const n=Es(t);e.callHook("sendInspectorState",{inspectorId:t,plugin:{descriptor:n.descriptor,setupFn:()=>({})}})},inspectComponentInspector(){return l_()},cancelInspectComponentInspector(){return u_()},getComponentRenderCode(t){const n=uo(ht.value,t);if(n)return(n==null?void 0:n.type)instanceof Function?n.type.toString():n.render.toString()},scrollToComponent(t){return c_({id:t})},openInEditor:w_,getVueInspector:h_,toggleApp(t){const n=ai.value.find(r=>r.id===t);n&&(S_(t),O_(n),$_(n,ht),sf(),U_(n.app))},inspectDOM(t){const n=uo(ht.value,t);if(n){const[r]=ia(n);r&&($.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__=r)}},updatePluginSettings(t,n,r){D_(t,n,r)},getPluginSettings(t){return{options:x_(t),values:uf(t)}}}}T();var Ju,Xu;(Xu=(Ju=$).__VUE_DEVTOOLS_ENV__)!=null||(Ju.__VUE_DEVTOOLS_ENV__={vitePluginDetected:!1});var Qu=y_(),el,tl;(tl=(el=$).__VUE_DEVTOOLS_KIT_CONTEXT__)!=null||(el.__VUE_DEVTOOLS_KIT_CONTEXT__={hooks:Qu,get state(){return{...Nn,activeAppRecordId:ht.id,activeAppRecord:ht.value,appRecords:ai.value}},api:j_(Qu)});var _r=$.__VUE_DEVTOOLS_KIT_CONTEXT__;T();Yp(jp());var nl,rl;(rl=(nl=$).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__)!=null||(nl.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__={id:0,appIds:new Set});T();function B_(e){Nn.highPerfModeEnabled=e??!Nn.highPerfModeEnabled}T();T();T();function H_(e){Nn.devtoolsClientDetected={...Nn.devtoolsClientDetected,...e};const t=Object.values(Nn.devtoolsClientDetected).some(Boolean);B_(!t)}var sl,il;(il=(sl=$).__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__)!=null||(sl.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__=H_);T();T();T();T();T();T();T();var W_=class{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,t){this.keyToValue.set(e,t),this.valueToKey.set(t,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}},lf=class{constructor(e){this.generateIdentifier=e,this.kv=new W_}register(e,t){this.kv.getByValue(e)||(t||(t=this.generateIdentifier(e)),this.kv.set(t,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}},z_=class extends lf{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,t){typeof t=="object"?(t.allowProps&&this.classToAllowedProps.set(e,t.allowProps),super.register(e,t.identifier)):super.register(e,t)}getAllowedProps(e){return this.classToAllowedProps.get(e)}};T();T();function K_(e){if("values"in Object)return Object.values(e);const t=[];for(const n in e)e.hasOwnProperty(n)&&t.push(e[n]);return t}function G_(e,t){const n=K_(e);if("find"in n)return n.find(t);const r=n;for(let s=0;st(r,n))}function bs(e,t){return e.indexOf(t)!==-1}function ol(e,t){for(let n=0;nt.isApplicable(e))}findByName(e){return this.transfomers[e]}};T();T();var Z_=e=>Object.prototype.toString.call(e).slice(8,-1),cf=e=>typeof e>"u",J_=e=>e===null,zr=e=>typeof e!="object"||e===null||e===Object.prototype?!1:Object.getPrototypeOf(e)===null?!0:Object.getPrototypeOf(e)===Object.prototype,ho=e=>zr(e)&&Object.keys(e).length===0,xn=e=>Array.isArray(e),X_=e=>typeof e=="string",Q_=e=>typeof e=="number"&&!isNaN(e),em=e=>typeof e=="boolean",tm=e=>e instanceof RegExp,Kr=e=>e instanceof Map,Gr=e=>e instanceof Set,ff=e=>Z_(e)==="Symbol",nm=e=>e instanceof Date&&!isNaN(e.valueOf()),rm=e=>e instanceof Error,al=e=>typeof e=="number"&&isNaN(e),sm=e=>em(e)||J_(e)||cf(e)||Q_(e)||X_(e)||ff(e),im=e=>typeof e=="bigint",om=e=>e===1/0||e===-1/0,am=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),um=e=>e instanceof URL;T();var df=e=>e.replace(/\./g,"\\."),$i=e=>e.map(String).map(df).join("."),Nr=e=>{const t=[];let n="";for(let s=0;snull,()=>{}),Yt(im,"bigint",e=>e.toString(),e=>typeof BigInt<"u"?BigInt(e):(console.error("Please add a BigInt polyfill."),e)),Yt(nm,"Date",e=>e.toISOString(),e=>new Date(e)),Yt(rm,"Error",(e,t)=>{const n={name:e.name,message:e.message};return t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n},(e,t)=>{const n=new Error(e.message);return n.name=e.name,n.stack=e.stack,t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n}),Yt(tm,"regexp",e=>""+e,e=>{const t=e.slice(1,e.lastIndexOf("/")),n=e.slice(e.lastIndexOf("/")+1);return new RegExp(t,n)}),Yt(Gr,"set",e=>[...e.values()],e=>new Set(e)),Yt(Kr,"map",e=>[...e.entries()],e=>new Map(e)),Yt(e=>al(e)||om(e),"number",e=>al(e)?"NaN":e>0?"Infinity":"-Infinity",Number),Yt(e=>e===0&&1/e===-1/0,"number",()=>"-0",Number),Yt(um,"URL",e=>e.toString(),e=>new URL(e))];function ui(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var pf=ui((e,t)=>ff(e)?!!t.symbolRegistry.getIdentifier(e):!1,(e,t)=>["symbol",t.symbolRegistry.getIdentifier(e)],e=>e.description,(e,t,n)=>{const r=n.symbolRegistry.getValue(t[1]);if(!r)throw new Error("Trying to deserialize unknown symbol");return r}),lm=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((e,t)=>(e[t.name]=t,e),{}),_f=ui(am,e=>["typed-array",e.constructor.name],e=>[...e],(e,t)=>{const n=lm[t[1]];if(!n)throw new Error("Trying to deserialize unknown typed array");return new n(e)});function mf(e,t){return e!=null&&e.constructor?!!t.classRegistry.getIdentifier(e.constructor):!1}var gf=ui(mf,(e,t)=>["class",t.classRegistry.getIdentifier(e.constructor)],(e,t)=>{const n=t.classRegistry.getAllowedProps(e.constructor);if(!n)return{...e};const r={};return n.forEach(s=>{r[s]=e[s]}),r},(e,t,n)=>{const r=n.classRegistry.getValue(t[1]);if(!r)throw new Error("Trying to deserialize unknown class - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564");return Object.assign(Object.create(r.prototype),e)}),vf=ui((e,t)=>!!t.customTransformerRegistry.findApplicable(e),(e,t)=>["custom",t.customTransformerRegistry.findApplicable(e).name],(e,t)=>t.customTransformerRegistry.findApplicable(e).serialize(e),(e,t,n)=>{const r=n.customTransformerRegistry.findByName(t[1]);if(!r)throw new Error("Trying to deserialize unknown custom value");return r.deserialize(e)}),cm=[gf,pf,vf,_f],ul=(e,t)=>{const n=ol(cm,s=>s.isApplicable(e,t));if(n)return{value:n.transform(e,t),type:n.annotation(e,t)};const r=ol(hf,s=>s.isApplicable(e,t));if(r)return{value:r.transform(e,t),type:r.annotation}},yf={};hf.forEach(e=>{yf[e.annotation]=e});var fm=(e,t,n)=>{if(xn(t))switch(t[0]){case"symbol":return pf.untransform(e,t,n);case"class":return gf.untransform(e,t,n);case"custom":return vf.untransform(e,t,n);case"typed-array":return _f.untransform(e,t,n);default:throw new Error("Unknown transformation: "+t)}else{const r=yf[t];if(!r)throw new Error("Unknown transformation: "+t);return r.untransform(e,n)}};T();var er=(e,t)=>{const n=e.keys();for(;t>0;)n.next(),t--;return n.next().value};function Ef(e){if(bs(e,"__proto__"))throw new Error("__proto__ is not allowed as a property");if(bs(e,"prototype"))throw new Error("prototype is not allowed as a property");if(bs(e,"constructor"))throw new Error("constructor is not allowed as a property")}var dm=(e,t)=>{Ef(t);for(let n=0;n{if(Ef(t),t.length===0)return n(e);let r=e;for(let i=0;i_o(i,t,[...n,...Nr(o)]));return}const[r,s]=e;s&&dr(s,(i,o)=>{_o(i,t,[...n,...Nr(o)])}),t(r,n)}function hm(e,t,n){return _o(t,(r,s)=>{e=po(e,s,i=>fm(i,r,n))}),e}function pm(e,t){function n(r,s){const i=dm(e,Nr(s));r.map(Nr).forEach(o=>{e=po(e,o,()=>i)})}if(xn(t)){const[r,s]=t;r.forEach(i=>{e=po(e,Nr(i),()=>e)}),s&&dr(s,n)}else dr(t,n);return e}var _m=(e,t)=>zr(e)||xn(e)||Kr(e)||Gr(e)||mf(e,t);function mm(e,t,n){const r=n.get(e);r?r.push(t):n.set(e,[t])}function gm(e,t){const n={};let r;return e.forEach(s=>{if(s.length<=1)return;t||(s=s.map(a=>a.map(String)).sort((a,u)=>a.length-u.length));const[i,...o]=s;i.length===0?r=o.map($i):n[$i(i)]=o.map($i)}),r?ho(n)?[r]:[r,n]:ho(n)?void 0:n}var bf=(e,t,n,r,s=[],i=[],o=new Map)=>{var a;const u=sm(e);if(!u){mm(e,s,t);const v=o.get(e);if(v)return r?{transformedValue:null}:v}if(!_m(e,n)){const v=ul(e,n),w=v?{transformedValue:v.value,annotations:[v.type]}:{transformedValue:e};return u||o.set(e,w),w}if(bs(i,e))return{transformedValue:null};const l=ul(e,n),c=(a=l==null?void 0:l.value)!=null?a:e,f=xn(c)?[]:{},g={};dr(c,(v,w)=>{if(w==="__proto__"||w==="constructor"||w==="prototype")throw new Error(`Detected property ${w}. This is a prototype pollution risk, please remove it from your object.`);const E=bf(v,t,n,r,[...s,w],[...i,e],o);f[w]=E.transformedValue,xn(E.annotations)?g[w]=E.annotations:zr(E.annotations)&&dr(E.annotations,(O,P)=>{g[df(w)+"."+P]=O})});const p=ho(g)?{transformedValue:f,annotations:l?[l.type]:void 0}:{transformedValue:f,annotations:l?[l.type,g]:g};return u||o.set(e,p),p};T();T();function Of(e){return Object.prototype.toString.call(e).slice(8,-1)}function ll(e){return Of(e)==="Array"}function vm(e){if(Of(e)!=="Object")return!1;const t=Object.getPrototypeOf(e);return!!t&&t.constructor===Object&&t===Object.prototype}function ym(e,t,n,r,s){const i={}.propertyIsEnumerable.call(r,t)?"enumerable":"nonenumerable";i==="enumerable"&&(e[t]=n),s&&i==="nonenumerable"&&Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!0,configurable:!0})}function mo(e,t={}){if(ll(e))return e.map(s=>mo(s,t));if(!vm(e))return e;const n=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);return[...n,...r].reduce((s,i)=>{if(ll(t.props)&&!t.props.includes(i))return s;const o=e[i],a=mo(o,t);return ym(s,i,a,e,t.nonenumerable),s},{})}var Ce=class{constructor({dedupe:e=!1}={}){this.classRegistry=new z_,this.symbolRegistry=new lf(t=>{var n;return(n=t.description)!=null?n:""}),this.customTransformerRegistry=new q_,this.allowedErrorProps=[],this.dedupe=e}serialize(e){const t=new Map,n=bf(e,t,this,this.dedupe),r={json:n.transformedValue};n.annotations&&(r.meta={...r.meta,values:n.annotations});const s=gm(t,this.dedupe);return s&&(r.meta={...r.meta,referentialEqualities:s}),r}deserialize(e){const{json:t,meta:n}=e;let r=mo(t);return n!=null&&n.values&&(r=hm(r,n.values,this)),n!=null&&n.referentialEqualities&&(r=pm(r,n.referentialEqualities)),r}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,t){this.classRegistry.register(e,t)}registerSymbol(e,t){this.symbolRegistry.register(e,t)}registerCustom(e,t){this.customTransformerRegistry.register({name:t,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}};Ce.defaultInstance=new Ce;Ce.serialize=Ce.defaultInstance.serialize.bind(Ce.defaultInstance);Ce.deserialize=Ce.defaultInstance.deserialize.bind(Ce.defaultInstance);Ce.stringify=Ce.defaultInstance.stringify.bind(Ce.defaultInstance);Ce.parse=Ce.defaultInstance.parse.bind(Ce.defaultInstance);Ce.registerClass=Ce.defaultInstance.registerClass.bind(Ce.defaultInstance);Ce.registerSymbol=Ce.defaultInstance.registerSymbol.bind(Ce.defaultInstance);Ce.registerCustom=Ce.defaultInstance.registerCustom.bind(Ce.defaultInstance);Ce.allowErrorProps=Ce.defaultInstance.allowErrorProps.bind(Ce.defaultInstance);T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();T();var cl,fl;(fl=(cl=$).__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__)!=null||(cl.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__=[]);var dl,hl;(hl=(dl=$).__VUE_DEVTOOLS_KIT_RPC_CLIENT__)!=null||(dl.__VUE_DEVTOOLS_KIT_RPC_CLIENT__=null);var pl,_l;(_l=(pl=$).__VUE_DEVTOOLS_KIT_RPC_SERVER__)!=null||(pl.__VUE_DEVTOOLS_KIT_RPC_SERVER__=null);var ml,gl;(gl=(ml=$).__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__)!=null||(ml.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__=null);var vl,yl;(yl=(vl=$).__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__)!=null||(vl.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__=null);var El,bl;(bl=(El=$).__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__)!=null||(El.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__=null);T();T();T();T();T();T();T();/** - * vee-validate v4.14.3 - * (c) 2024 Abdelrahman Awad - * @license MIT - */function Je(e){return typeof e=="function"}function Sf(e){return e==null}const Bn=e=>e!==null&&!!e&&typeof e=="object"&&!Array.isArray(e);function ha(e){return Number(e)>=0}function Em(e){const t=parseFloat(e);return isNaN(t)?e:t}function bm(e){return typeof e=="object"&&e!==null}function Om(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}function Ol(e){if(!bm(e)||Om(e)!=="[object Object]")return!1;if(Object.getPrototypeOf(e)===null)return!0;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function qr(e,t){return Object.keys(t).forEach(n=>{if(Ol(t[n])&&Ol(e[n])){e[n]||(e[n]={}),qr(e[n],t[n]);return}e[n]=t[n]}),e}function Ar(e){const t=e.split(".");if(!t.length)return"";let n=String(t[0]);for(let r=1;rAm(s)&&i in s?s[i]:n,e):n}function tn(e,t,n){if(ci(t)){e[_a(t)]=n;return}const r=t.split(/\.|\[(\d+)\]/).filter(Boolean);let s=e;for(let i=0;i_t(e,n.slice(0,o).join(".")));for(let i=s.length-1;i>=0;i--)if(km(s[i])){if(i===0){ji(e,n[0]);continue}ji(s[i-1],n[i-1])}}function yt(e){return Object.keys(e)}function Tf(e,t=void 0){const n=si();return(n==null?void 0:n.provides[e])||or(e,t)}function Dl(e,t,n){if(Array.isArray(e)){const r=[...e],s=r.findIndex(i=>at(i,t));return s>=0?r.splice(s,1):r.push(t),r}return at(e,t)?n:t}function Al(e,t=0){let n=null,r=[];return function(...s){return n&&clearTimeout(n),n=setTimeout(()=>{const i=e(...s);r.forEach(o=>o(i)),r=[]},t),new Promise(i=>r.push(i))}}function Im(e,t){return Bn(t)&&t.number?Em(e):e}function vo(e,t){let n;return async function(...s){const i=e(...s);n=i;const o=await i;return i!==n?o:(n=void 0,t(o,s))}}function yo(e){return Array.isArray(e)?e:e?[e]:[]}function hs(e,t){const n={};for(const r in e)t.includes(r)||(n[r]=e[r]);return n}function Rm(e){let t=null,n=[];return function(...r){const s=Ct(()=>{if(t!==s)return;const i=e(...r);n.forEach(o=>o(i)),n=[],t=null});return t=s,new Promise(i=>n.push(i))}}function ma(e,t,n){return t.slots.default?typeof e=="string"||!e?t.slots.default(n()):{default:()=>{var r,s;return(s=(r=t.slots).default)===null||s===void 0?void 0:s.call(r,n())}}:t.slots.default}function Bi(e){if(Df(e))return e._value}function Df(e){return"_value"in e}function Pm(e){return e.type==="number"||e.type==="range"?Number.isNaN(e.valueAsNumber)?e.value:e.valueAsNumber:e.value}function Ys(e){if(!pa(e))return e;const t=e.target;if(rs(t.type)&&Df(t))return Bi(t);if(t.type==="file"&&t.files){const n=Array.from(t.files);return t.multiple?n:n[0]}if(Cm(t))return Array.from(t.options).filter(n=>n.selected&&!n.disabled).map(Bi);if(wf(t)){const n=Array.from(t.options).find(r=>r.selected);return n?Bi(n):t.value}return Pm(t)}function Af(e){const t={};return Object.defineProperty(t,"_$$isNormalized",{value:!0,writable:!1,enumerable:!1,configurable:!1}),e?Bn(e)&&e._$$isNormalized?e:Bn(e)?Object.keys(e).reduce((n,r)=>{const s=Vm(e[r]);return e[r]!==!1&&(n[r]=kl(s)),n},t):typeof e!="string"?t:e.split("|").reduce((n,r)=>{const s=Nm(r);return s.name&&(n[s.name]=kl(s.params)),n},t):t}function Vm(e){return e===!0?[]:Array.isArray(e)||Bn(e)?e:[e]}function kl(e){const t=n=>typeof n=="string"&&n[0]==="@"?Um(n.slice(1)):n;return Array.isArray(e)?e.map(t):e instanceof RegExp?[e]:Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{})}const Nm=e=>{let t=[];const n=e.split(":")[0];return e.includes(":")&&(t=e.split(":").slice(1).join(":").split(",")),{name:n,params:t}};function Um(e){const t=n=>{var r;return(r=_t(n,e))!==null&&r!==void 0?r:n[e]};return t.__locatorRef=e,t}function Lm(e){return Array.isArray(e)?e.filter(go):yt(e).filter(t=>go(e[t])).map(t=>e[t])}const Ym={generateMessage:({field:e})=>`${e} is not valid.`,bails:!0,validateOnBlur:!0,validateOnChange:!0,validateOnInput:!1,validateOnModelUpdate:!0};let $m=Object.assign({},Ym);const Rn=()=>$m;async function kf(e,t,n={}){const r=n==null?void 0:n.bails,s={name:(n==null?void 0:n.name)||"{field}",rules:t,label:n==null?void 0:n.label,bails:r??!0,formData:(n==null?void 0:n.values)||{}},i=await jm(s,e);return Object.assign(Object.assign({},i),{valid:!i.errors.length})}async function jm(e,t){const n=e.rules;if(Mt(n)||Ls(n))return Hm(t,Object.assign(Object.assign({},e),{rules:n}));if(Je(n)||Array.isArray(n)){const a={field:e.label||e.name,name:e.name,label:e.label,form:e.formData,value:t},u=Array.isArray(n)?n:[n],l=u.length,c=[];for(let f=0;f{const l=u.path||"";return a[l]||(a[l]={errors:[],path:l}),a[l].errors.push(...u.errors),a},{});return{errors:Object.values(o)}}}}}async function Hm(e,t){const r=await(Mt(t.rules)?t.rules:Cf(t.rules)).parse(e,{formData:t.formData}),s=[];for(const i of r.errors)i.errors.length&&s.push(...i.errors);return{value:r.value,errors:s}}async function Wm(e,t,n){const r=wm(n.name);if(!r)throw new Error(`No such validator '${n.name}' exists.`);const s=zm(n.params,e.formData),i={field:e.label||e.name,name:e.name,label:e.label,value:t,form:e.formData,rule:Object.assign(Object.assign({},n),{params:s})},o=await r(t,s,i);return typeof o=="string"?{error:o}:{error:o?void 0:Mf(i)}}function Mf(e){const t=Rn().generateMessage;return t?t(e):"Field is invalid"}function zm(e,t){const n=r=>go(r)?r(t):r;return Array.isArray(e)?e.map(n):Object.keys(e).reduce((r,s)=>(r[s]=n(e[s]),r),{})}async function Km(e,t){const r=await(Mt(e)?e:Cf(e)).parse(Ee(t),{formData:Ee(t)}),s={},i={};for(const o of r.errors){const a=o.errors,u=(o.path||"").replace(/\["(\d+)"\]/g,(l,c)=>`[${c}]`);s[u]={valid:!a.length,errors:a},a.length&&(i[u]=a[0])}return{valid:!r.errors.length,results:s,errors:i,values:r.value,source:"schema"}}async function Gm(e,t,n){const s=yt(e).map(async l=>{var c,f,g;const p=(c=n==null?void 0:n.names)===null||c===void 0?void 0:c[l],v=await kf(_t(t,l),e[l],{name:(p==null?void 0:p.name)||l,label:p==null?void 0:p.label,values:t,bails:(g=(f=n==null?void 0:n.bailsMap)===null||f===void 0?void 0:f[l])!==null&&g!==void 0?g:!0});return Object.assign(Object.assign({},v),{path:l})});let i=!0;const o=await Promise.all(s),a={},u={};for(const l of o)a[l.path]={valid:l.valid,errors:l.errors},l.valid||(i=!1,u[l.path]=l.errors[0]);return{valid:i,results:a,errors:u,source:"schema"}}let Cl=0;function qm(e,t){const{value:n,initialValue:r,setInitialValue:s}=Zm(e,t.modelValue,t.form);if(!t.form){let u=function(p){var v;"value"in p&&(n.value=p.value),"errors"in p&&c(p.errors),"touched"in p&&(g.touched=(v=p.touched)!==null&&v!==void 0?v:g.touched),"initialValue"in p&&s(p.initialValue)};const{errors:l,setErrors:c}=Qm(),f=Cl>=Number.MAX_SAFE_INTEGER?0:++Cl,g=Xm(n,r,l,t.schema);return{id:f,path:e,value:n,initialValue:r,meta:g,flags:{pendingUnmount:{[f]:!1},pendingReset:!1},errors:l,setState:u}}const i=t.form.createPathState(e,{bails:t.bails,label:t.label,type:t.type,validate:t.validate,schema:t.schema}),o=me(()=>i.errors);function a(u){var l,c,f;"value"in u&&(n.value=u.value),"errors"in u&&((l=t.form)===null||l===void 0||l.setFieldError(re(e),u.errors)),"touched"in u&&((c=t.form)===null||c===void 0||c.setFieldTouched(re(e),(f=u.touched)!==null&&f!==void 0?f:!1)),"initialValue"in u&&s(u.initialValue)}return{id:Array.isArray(i.id)?i.id[i.id.length-1]:i.id,path:e,value:n,errors:o,meta:i,initialValue:r,flags:i.__flags,setState:a}}function Zm(e,t,n){const r=wt(re(t));function s(){return n?_t(n.initialValues.value,re(e),re(r)):re(r)}function i(l){if(!n){r.value=l;return}n.setFieldInitialValue(re(e),l,!0)}const o=me(s);if(!n)return{value:wt(s()),initialValue:o,setInitialValue:i};const a=Jm(t,n,o,e);return n.stageInitialValue(re(e),a,!0),{value:me({get(){return _t(n.values,re(e))},set(l){n.setFieldValue(re(e),l,!1)}}),initialValue:o,setInitialValue:i}}function Jm(e,t,n,r){return Be(e)?re(e):e!==void 0?e:_t(t.values,re(r),re(n))}function Xm(e,t,n,r){const s=me(()=>{var o,a,u;return(u=(a=(o=de(r))===null||o===void 0?void 0:o.describe)===null||a===void 0?void 0:a.call(o).required)!==null&&u!==void 0?u:!1}),i=Yn({touched:!1,pending:!1,valid:!0,required:s,validated:!!re(n).length,initialValue:me(()=>re(t)),dirty:me(()=>!at(re(e),re(t)))});return zt(n,o=>{i.valid=!o.length},{immediate:!0,flush:"sync"}),i}function Qm(){const e=wt([]);return{errors:e,setErrors:t=>{e.value=yo(t)}}}function eg(e,t,n){return rs(n==null?void 0:n.type)?ng(e,t,n):Ff(e,t,n)}function Ff(e,t,n){const{initialValue:r,validateOnMount:s,bails:i,type:o,checkedValue:a,label:u,validateOnValueUpdate:l,uncheckedValue:c,controlled:f,keepValueOnUnmount:g,syncVModel:p,form:v}=tg(n),w=f?Tf(li):void 0,E=v||w,O=me(()=>Ar(de(e))),P=me(()=>{if(de(E==null?void 0:E.schema))return;const X=re(t);return Ls(X)||Mt(X)||Je(X)||Array.isArray(X)?X:Af(X)}),j=!Je(P.value)&&Mt(de(t)),{id:V,value:Z,initialValue:oe,meta:ae,setState:De,errors:ue,flags:ne}=qm(O,{modelValue:r,form:E,bails:i,label:u,type:o,validate:P.value?W:void 0,schema:j?t:void 0}),te=me(()=>ue.value[0]);p&&rg({value:Z,prop:p,handleChange:C,shouldValidate:()=>l&&!ne.pendingReset});const Pe=(U,X=!1)=>{ae.touched=!0,X&&Oe()};async function Ue(U){var X,Ye;if(E!=null&&E.validateSchema){const{results:pe}=await E.validateSchema(U);return(X=pe[de(O)])!==null&&X!==void 0?X:{valid:!0,errors:[]}}return P.value?kf(Z.value,P.value,{name:de(O),label:de(u),values:(Ye=E==null?void 0:E.values)!==null&&Ye!==void 0?Ye:{},bails:i}):{valid:!0,errors:[]}}const Oe=vo(async()=>(ae.pending=!0,ae.validated=!0,Ue("validated-only")),U=>(ne.pendingUnmount[Ge.id]||(De({errors:U.errors}),ae.pending=!1,ae.valid=U.valid),U)),je=vo(async()=>Ue("silent"),U=>(ae.valid=U.valid,U));function W(U){return(U==null?void 0:U.mode)==="silent"?je():Oe()}function C(U,X=!0){const Ye=Ys(U);Le(Ye,X)}ti(()=>{if(s)return Oe();(!E||!E.validateSchema)&&je()});function J(U){ae.touched=U}function Te(U){var X;const Ye=U&&"value"in U?U.value:oe.value;De({value:Ee(Ye),initialValue:Ee(Ye),touched:(X=U==null?void 0:U.touched)!==null&&X!==void 0?X:!1,errors:(U==null?void 0:U.errors)||[]}),ae.pending=!1,ae.validated=!1,je()}const Xe=si();function Le(U,X=!0){Z.value=Xe&&p?Im(U,Xe.props.modelModifiers):U,(X?Oe:je)()}function Me(U){De({errors:Array.isArray(U)?U:[U]})}const ut=me({get(){return Z.value},set(U){Le(U,l)}}),Ge={id:V,name:O,label:u,value:ut,meta:ae,errors:ue,errorMessage:te,type:o,checkedValue:a,uncheckedValue:c,bails:i,keepValueOnUnmount:g,resetField:Te,handleReset:()=>Te(),validate:W,handleChange:C,handleBlur:Pe,setState:De,setTouched:J,setErrors:Me,setValue:Le};if(Is(Tm,Ge),Be(t)&&typeof re(t)!="function"&&zt(t,(U,X)=>{at(U,X)||(ae.validated?Oe():je())},{deep:!0}),!E)return Ge;const Jt=me(()=>{const U=P.value;return!U||Je(U)||Ls(U)||Mt(U)||Array.isArray(U)?{}:Object.keys(U).reduce((X,Ye)=>{const pe=Lm(U[Ye]).map(rt=>rt.__locatorRef).reduce((rt,lt)=>{const Ot=_t(E.values,lt)||E.values[lt];return Ot!==void 0&&(rt[lt]=Ot),rt},{});return Object.assign(X,pe),X},{})});return zt(Jt,(U,X)=>{if(!Object.keys(U).length)return;!at(U,X)&&(ae.validated?Oe():je())}),yc(()=>{var U;const X=(U=de(Ge.keepValueOnUnmount))!==null&&U!==void 0?U:de(E.keepValuesOnUnmount),Ye=de(O);if(X||!E||ne.pendingUnmount[Ge.id]){E==null||E.removePathState(Ye,V);return}ne.pendingUnmount[Ge.id]=!0;const pe=E.getPathState(Ye);if(Array.isArray(pe==null?void 0:pe.id)&&(pe!=null&&pe.multiple)?pe!=null&&pe.id.includes(Ge.id):(pe==null?void 0:pe.id)===Ge.id){if(pe!=null&&pe.multiple&&Array.isArray(pe.value)){const lt=pe.value.findIndex(Ot=>at(Ot,de(Ge.checkedValue)));if(lt>-1){const Ot=[...pe.value];Ot.splice(lt,1),E.setFieldValue(Ye,Ot)}Array.isArray(pe.id)&&pe.id.splice(pe.id.indexOf(Ge.id),1)}else E.unsetPathValue(de(O));E.removePathState(Ye,V)}}),Ge}function tg(e){const t=()=>({initialValue:void 0,validateOnMount:!1,bails:!0,label:void 0,validateOnValueUpdate:!0,keepValueOnUnmount:void 0,syncVModel:!1,controlled:!0}),n=!!(e!=null&&e.syncVModel),r=typeof(e==null?void 0:e.syncVModel)=="string"?e.syncVModel:(e==null?void 0:e.modelPropName)||"modelValue",s=n&&!("initialValue"in(e||{}))?Eo(si(),r):e==null?void 0:e.initialValue;if(!e)return Object.assign(Object.assign({},t()),{initialValue:s});const i="valueProp"in e?e.valueProp:e.checkedValue,o="standalone"in e?!e.standalone:e.controlled,a=(e==null?void 0:e.modelPropName)||(e==null?void 0:e.syncVModel)||!1;return Object.assign(Object.assign(Object.assign({},t()),e||{}),{initialValue:s,controlled:o??!0,checkedValue:i,syncVModel:a})}function ng(e,t,n){const r=n!=null&&n.standalone?void 0:Tf(li),s=n==null?void 0:n.checkedValue,i=n==null?void 0:n.uncheckedValue;function o(a){const u=a.handleChange,l=me(()=>{const f=de(a.value),g=de(s);return Array.isArray(f)?f.findIndex(p=>at(p,g))>=0:at(g,f)});function c(f,g=!0){var p,v;if(l.value===((p=f==null?void 0:f.target)===null||p===void 0?void 0:p.checked)){g&&a.validate();return}const w=de(e),E=r==null?void 0:r.getPathState(w),O=Ys(f);let P=(v=de(s))!==null&&v!==void 0?v:O;r&&(E!=null&&E.multiple)&&E.type==="checkbox"?P=Dl(_t(r.values,w)||[],P,void 0):(n==null?void 0:n.type)==="checkbox"&&(P=Dl(de(a.value),P,de(i))),u(P,g)}return Object.assign(Object.assign({},a),{checked:l,checkedValue:s,uncheckedValue:i,handleChange:c})}return o(Ff(e,t,n))}function rg({prop:e,value:t,handleChange:n,shouldValidate:r}){const s=si();if(!s||!e)return;const i=typeof e=="string"?e:"modelValue",o=`update:${i}`;i in s.props&&(zt(t,a=>{at(a,Eo(s,i))||s.emit(o,a)}),zt(()=>Eo(s,i),a=>{if(a===Us&&t.value===void 0)return;const u=a===Us?void 0:a;at(u,t.value)||n(u,r())}))}function Eo(e,t){if(e)return e.props[t]}const sg=qo({name:"Field",inheritAttrs:!1,props:{as:{type:[String,Object],default:void 0},name:{type:String,required:!0},rules:{type:[Object,String,Function],default:void 0},validateOnMount:{type:Boolean,default:!1},validateOnBlur:{type:Boolean,default:void 0},validateOnChange:{type:Boolean,default:void 0},validateOnInput:{type:Boolean,default:void 0},validateOnModelUpdate:{type:Boolean,default:void 0},bails:{type:Boolean,default:()=>Rn().bails},label:{type:String,default:void 0},uncheckedValue:{type:null,default:void 0},modelValue:{type:null,default:Us},modelModifiers:{type:null,default:()=>({})},"onUpdate:modelValue":{type:null,default:void 0},standalone:{type:Boolean,default:!1},keepValue:{type:Boolean,default:void 0}},setup(e,t){const n=Fn(e,"rules"),r=Fn(e,"name"),s=Fn(e,"label"),i=Fn(e,"uncheckedValue"),o=Fn(e,"keepValue"),{errors:a,value:u,errorMessage:l,validate:c,handleChange:f,handleBlur:g,setTouched:p,resetField:v,handleReset:w,meta:E,checked:O,setErrors:P,setValue:j}=eg(r,n,{validateOnMount:e.validateOnMount,bails:e.bails,standalone:e.standalone,type:t.attrs.type,initialValue:og(e,t),checkedValue:t.attrs.value,uncheckedValue:i,label:s,validateOnValueUpdate:e.validateOnModelUpdate,keepValueOnUnmount:o,syncVModel:!0}),V=function(ne,te=!0){f(ne,te)},Z=me(()=>{const{validateOnInput:ue,validateOnChange:ne,validateOnBlur:te,validateOnModelUpdate:Pe}=ig(e);function Ue(C){g(C,te),Je(t.attrs.onBlur)&&t.attrs.onBlur(C)}function Oe(C){V(C,ue),Je(t.attrs.onInput)&&t.attrs.onInput(C)}function je(C){V(C,ne),Je(t.attrs.onChange)&&t.attrs.onChange(C)}const W={name:e.name,onBlur:Ue,onInput:Oe,onChange:je};return W["onUpdate:modelValue"]=C=>V(C,Pe),W}),oe=me(()=>{const ue=Object.assign({},Z.value);rs(t.attrs.type)&&O&&(ue.checked=O.value);const ne=Ml(e,t);return Fm(ne,t.attrs)&&(ue.value=u.value),ue}),ae=me(()=>Object.assign(Object.assign({},Z.value),{modelValue:u.value}));function De(){return{field:oe.value,componentField:ae.value,value:u.value,meta:E,errors:a.value,errorMessage:l.value,validate:c,resetField:v,handleChange:V,handleInput:ue=>V(ue,!1),handleReset:w,handleBlur:Z.value.onBlur,setTouched:p,setErrors:P,setValue:j}}return t.expose({value:u,meta:E,errors:a,errorMessage:l,setErrors:P,setTouched:p,setValue:j,reset:v,validate:c,handleChange:f}),()=>{const ue=Zo(Ml(e,t)),ne=ma(ue,t,De);return ue?Vs(ue,Object.assign(Object.assign({},t.attrs),oe.value),ne):ne}}});function Ml(e,t){let n=e.as||"";return!e.as&&!t.slots.default&&(n="input"),n}function ig(e){var t,n,r,s;const{validateOnInput:i,validateOnChange:o,validateOnBlur:a,validateOnModelUpdate:u}=Rn();return{validateOnInput:(t=e.validateOnInput)!==null&&t!==void 0?t:i,validateOnChange:(n=e.validateOnChange)!==null&&n!==void 0?n:o,validateOnBlur:(r=e.validateOnBlur)!==null&&r!==void 0?r:a,validateOnModelUpdate:(s=e.validateOnModelUpdate)!==null&&s!==void 0?s:u}}function og(e,t){return rs(t.attrs.type)?wl(e,"modelValue")?e.modelValue:void 0:wl(e,"modelValue")?e.modelValue:t.attrs.value}const qn=sg;let ag=0;const ps=["bails","fieldsCount","id","multiple","type","validate"];function If(e){const t=(e==null?void 0:e.initialValues)||{},n=Object.assign({},de(t)),r=re(e==null?void 0:e.validationSchema);return r&&Mt(r)&&Je(r.cast)?Ee(r.cast(n)||{}):Ee(n)}function ug(e){var t;const n=ag++;let r=0;const s=wt(!1),i=wt(!1),o=wt(0),a=[],u=Yn(If(e)),l=wt([]),c=wt({}),f=wt({}),g=Rm(()=>{f.value=l.value.reduce((m,_)=>(m[Ar(de(_.path))]=_,m),{})});function p(m,_){const b=W(m);if(!b){typeof m=="string"&&(c.value[Ar(m)]=yo(_));return}if(typeof m=="string"){const F=Ar(m);c.value[F]&&delete c.value[F]}b.errors=yo(_),b.valid=!b.errors.length}function v(m){yt(m).forEach(_=>{p(_,m[_])})}e!=null&&e.initialErrors&&v(e.initialErrors);const w=me(()=>{const m=l.value.reduce((_,b)=>(b.errors.length&&(_[b.path]=b.errors),_),{});return Object.assign(Object.assign({},c.value),m)}),E=me(()=>yt(w.value).reduce((m,_)=>{const b=w.value[_];return b!=null&&b.length&&(m[_]=b[0]),m},{})),O=me(()=>l.value.reduce((m,_)=>(m[_.path]={name:_.path||"",label:_.label||""},m),{})),P=me(()=>l.value.reduce((m,_)=>{var b;return m[_.path]=(b=_.bails)!==null&&b!==void 0?b:!0,m},{})),j=Object.assign({},(e==null?void 0:e.initialErrors)||{}),V=(t=e==null?void 0:e.keepValuesOnUnmount)!==null&&t!==void 0?t:!1,{initialValues:Z,originalInitialValues:oe,setInitialValues:ae}=cg(l,u,e),De=lg(l,u,oe,E),ue=me(()=>l.value.reduce((m,_)=>{const b=_t(u,_.path);return tn(m,_.path,b),m},{})),ne=e==null?void 0:e.validationSchema;function te(m,_){var b,F;const z=me(()=>_t(Z.value,de(m))),Q=f.value[de(m)],B=(_==null?void 0:_.type)==="checkbox"||(_==null?void 0:_.type)==="radio";if(Q&&B){Q.multiple=!0;const St=r++;return Array.isArray(Q.id)?Q.id.push(St):Q.id=[Q.id,St],Q.fieldsCount++,Q.__flags.pendingUnmount[St]=!1,Q}const fe=me(()=>_t(u,de(m))),$e=de(m),Qe=J.findIndex(St=>St===$e);Qe!==-1&&J.splice(Qe,1);const Fe=me(()=>{var St,yr,wi,xi;const Ti=de(ne);if(Mt(Ti))return(yr=(St=Ti.describe)===null||St===void 0?void 0:St.call(Ti,de(m)).required)!==null&&yr!==void 0?yr:!1;const Di=de(_==null?void 0:_.schema);return Mt(Di)&&(xi=(wi=Di.describe)===null||wi===void 0?void 0:wi.call(Di).required)!==null&&xi!==void 0?xi:!1}),et=r++,ct=Yn({id:et,path:m,touched:!1,pending:!1,valid:!0,validated:!!(!((b=j[$e])===null||b===void 0)&&b.length),required:Fe,initialValue:z,errors:wh([]),bails:(F=_==null?void 0:_.bails)!==null&&F!==void 0?F:!1,label:_==null?void 0:_.label,type:(_==null?void 0:_.type)||"default",value:fe,multiple:!1,__flags:{pendingUnmount:{[et]:!1},pendingReset:!1},fieldsCount:1,validate:_==null?void 0:_.validate,dirty:me(()=>!at(re(fe),re(z)))});return l.value.push(ct),f.value[$e]=ct,g(),E.value[$e]&&!j[$e]&&Ct(()=>{I($e,{mode:"silent"})}),Be(m)&&zt(m,St=>{g();const yr=Ee(fe.value);f.value[St]=ct,Ct(()=>{tn(u,St,yr)})}),ct}const Pe=Al(G,5),Ue=Al(G,5),Oe=vo(async m=>await(m==="silent"?Pe():Ue()),(m,[_])=>{const b=yt(U.errorBag.value),z=[...new Set([...yt(m.results),...l.value.map(Q=>Q.path),...b])].sort().reduce((Q,B)=>{var fe;const $e=B,Qe=W($e)||C($e),Fe=((fe=m.results[$e])===null||fe===void 0?void 0:fe.errors)||[],et=de(Qe==null?void 0:Qe.path)||$e,ct=fg({errors:Fe,valid:!Fe.length},Q.results[et]);return Q.results[et]=ct,ct.valid||(Q.errors[et]=ct.errors[0]),Qe&&c.value[et]&&delete c.value[et],Qe?(Qe.valid=ct.valid,_==="silent"||_==="validated-only"&&!Qe.validated||p(Qe,ct.errors),Q):(p(et,Fe),Q)},{valid:m.valid,results:{},errors:{},source:m.source});return m.values&&(z.values=m.values,z.source=m.source),yt(z.results).forEach(Q=>{var B;const fe=W(Q);fe&&_!=="silent"&&(_==="validated-only"&&!fe.validated||p(fe,(B=z.results[Q])===null||B===void 0?void 0:B.errors))}),z});function je(m){l.value.forEach(m)}function W(m){const _=typeof m=="string"?Ar(m):m;return typeof _=="string"?f.value[_]:_}function C(m){return l.value.filter(b=>m.startsWith(b.path)).reduce((b,F)=>b?F.path.length>b.path.length?F:b:F,void 0)}let J=[],Te;function Xe(m){return J.push(m),Te||(Te=Ct(()=>{[...J].sort().reverse().forEach(b=>{Tl(u,b)}),J=[],Te=null})),Te}function Le(m){return function(b,F){return function(Q){return Q instanceof Event&&(Q.preventDefault(),Q.stopPropagation()),je(B=>B.touched=!0),s.value=!0,o.value++,x().then(B=>{const fe=Ee(u);if(B.valid&&typeof b=="function"){const $e=Ee(ue.value);let Qe=m?$e:fe;return B.values&&(Qe=B.source==="schema"?B.values:Object.assign({},Qe,B.values)),b(Qe,{evt:Q,controlledValues:$e,setErrors:v,setFieldError:p,setTouched:y,setFieldTouched:lt,setValues:pe,setFieldValue:X,resetForm:S,resetField:A})}!B.valid&&typeof F=="function"&&F({values:fe,evt:Q,errors:B.errors,results:B.results})}).then(B=>(s.value=!1,B),B=>{throw s.value=!1,B})}}}const ut=Le(!1);ut.withControlled=Le(!0);function Ge(m,_){const b=l.value.findIndex(z=>z.path===m&&(Array.isArray(z.id)?z.id.includes(_):z.id===_)),F=l.value[b];if(!(b===-1||!F)){if(Ct(()=>{I(m,{mode:"silent",warn:!1})}),F.multiple&&F.fieldsCount&&F.fieldsCount--,Array.isArray(F.id)){const z=F.id.indexOf(_);z>=0&&F.id.splice(z,1),delete F.__flags.pendingUnmount[_]}(!F.multiple||F.fieldsCount<=0)&&(l.value.splice(b,1),R(m),g(),delete f.value[m])}}function Jt(m){yt(f.value).forEach(_=>{_.startsWith(m)&&delete f.value[_]}),l.value=l.value.filter(_=>!_.path.startsWith(m)),Ct(()=>{g()})}const U={formId:n,values:u,controlledValues:ue,errorBag:w,errors:E,schema:ne,submitCount:o,meta:De,isSubmitting:s,isValidating:i,fieldArrays:a,keepValuesOnUnmount:V,validateSchema:re(ne)?Oe:void 0,validate:x,setFieldError:p,validateField:I,setFieldValue:X,setValues:pe,setErrors:v,setFieldTouched:lt,setTouched:y,resetForm:S,resetField:A,handleSubmit:ut,useFieldModel:q,defineInputBinds:le,defineComponentBinds:Se,defineField:H,stageInitialValue:M,unsetInitialValue:R,setFieldInitialValue:D,createPathState:te,getPathState:W,unsetPathValue:Xe,removePathState:Ge,initialValues:Z,getAllPathStates:()=>l.value,destroyPath:Jt,isFieldTouched:Ot,isFieldDirty:d,isFieldValid:h};function X(m,_,b=!0){const F=Ee(_),z=typeof m=="string"?m:m.path;W(z)||te(z),tn(u,z,F),b&&I(z)}function Ye(m,_=!0){yt(u).forEach(b=>{delete u[b]}),yt(m).forEach(b=>{X(b,m[b],!1)}),_&&x()}function pe(m,_=!0){qr(u,m),a.forEach(b=>b&&b.reset()),_&&x()}function rt(m,_){const b=W(de(m))||te(m);return me({get(){return b.value},set(F){var z;const Q=de(m);X(Q,F,(z=de(_))!==null&&z!==void 0?z:!1)}})}function lt(m,_){const b=W(m);b&&(b.touched=_)}function Ot(m){const _=W(m);return _?_.touched:l.value.filter(b=>b.path.startsWith(m)).some(b=>b.touched)}function d(m){const _=W(m);return _?_.dirty:l.value.filter(b=>b.path.startsWith(m)).some(b=>b.dirty)}function h(m){const _=W(m);return _?_.valid:l.value.filter(b=>b.path.startsWith(m)).every(b=>b.valid)}function y(m){if(typeof m=="boolean"){je(_=>{_.touched=m});return}yt(m).forEach(_=>{lt(_,!!m[_])})}function A(m,_){var b;const F=_&&"value"in _?_.value:_t(Z.value,m),z=W(m);z&&(z.__flags.pendingReset=!0),D(m,Ee(F),!0),X(m,F,!1),lt(m,(b=_==null?void 0:_.touched)!==null&&b!==void 0?b:!1),p(m,(_==null?void 0:_.errors)||[]),Ct(()=>{z&&(z.__flags.pendingReset=!1)})}function S(m,_){let b=Ee(m!=null&&m.values?m.values:oe.value);b=_!=null&&_.force?b:qr(oe.value,b),b=Mt(ne)&&Je(ne.cast)?ne.cast(b):b,ae(b,{force:_==null?void 0:_.force}),je(F=>{var z;F.__flags.pendingReset=!0,F.validated=!1,F.touched=((z=m==null?void 0:m.touched)===null||z===void 0?void 0:z[F.path])||!1,X(F.path,_t(b,F.path),!1),p(F.path,void 0)}),_!=null&&_.force?Ye(b,!1):pe(b,!1),v((m==null?void 0:m.errors)||{}),o.value=(m==null?void 0:m.submitCount)||0,Ct(()=>{x({mode:"silent"}),je(F=>{F.__flags.pendingReset=!1})})}async function x(m){const _=(m==null?void 0:m.mode)||"force";if(_==="force"&&je(B=>B.validated=!0),U.validateSchema)return U.validateSchema(_);i.value=!0;const b=await Promise.all(l.value.map(B=>B.validate?B.validate(m).then(fe=>({key:B.path,valid:fe.valid,errors:fe.errors,value:fe.value})):Promise.resolve({key:B.path,valid:!0,errors:[],value:void 0})));i.value=!1;const F={},z={},Q={};for(const B of b)F[B.key]={valid:B.valid,errors:B.errors},B.value&&tn(Q,B.key,B.value),B.errors.length&&(z[B.key]=B.errors[0]);return{valid:b.every(B=>B.valid),results:F,errors:z,values:Q,source:"fields"}}async function I(m,_){var b;const F=W(m);if(F&&(_==null?void 0:_.mode)!=="silent"&&(F.validated=!0),ne){const{results:z}=await Oe((_==null?void 0:_.mode)||"validated-only");return z[m]||{errors:[],valid:!0}}return F!=null&&F.validate?F.validate(_):(!F&&(b=_==null?void 0:_.warn),Promise.resolve({errors:[],valid:!0}))}function R(m){Tl(Z.value,m)}function M(m,_,b=!1){D(m,_),tn(u,m,_),b&&!(e!=null&&e.initialValues)&&tn(oe.value,m,Ee(_))}function D(m,_,b=!1){tn(Z.value,m,Ee(_)),b&&tn(oe.value,m,Ee(_))}async function G(){const m=re(ne);if(!m)return{valid:!0,results:{},errors:{},source:"none"};i.value=!0;const _=Ls(m)||Mt(m)?await Km(m,u):await Gm(m,u,{names:O.value,bailsMap:P.value});return i.value=!1,_}const L=ut((m,{evt:_})=>{xf(_)&&_.target.submit()});ti(()=>{if(e!=null&&e.initialErrors&&v(e.initialErrors),e!=null&&e.initialTouched&&y(e.initialTouched),e!=null&&e.validateOnMount){x();return}U.validateSchema&&U.validateSchema("silent")}),Be(ne)&&zt(ne,()=>{var m;(m=U.validateSchema)===null||m===void 0||m.call(U,"validated-only")}),Is(li,U);function H(m,_){const b=Je(_)||_==null?void 0:_.label,F=W(de(m))||te(m,{label:b}),z=()=>Je(_)?_(hs(F,ps)):_||{};function Q(){var Fe;F.touched=!0,((Fe=z().validateOnBlur)!==null&&Fe!==void 0?Fe:Rn().validateOnBlur)&&I(F.path)}function B(){var Fe;((Fe=z().validateOnInput)!==null&&Fe!==void 0?Fe:Rn().validateOnInput)&&Ct(()=>{I(F.path)})}function fe(){var Fe;((Fe=z().validateOnChange)!==null&&Fe!==void 0?Fe:Rn().validateOnChange)&&Ct(()=>{I(F.path)})}const $e=me(()=>{const Fe={onChange:fe,onInput:B,onBlur:Q};return Je(_)?Object.assign(Object.assign({},Fe),_(hs(F,ps)).props||{}):_!=null&&_.props?Object.assign(Object.assign({},Fe),_.props(hs(F,ps))):Fe});return[rt(m,()=>{var Fe,et,ct;return(ct=(Fe=z().validateOnModelUpdate)!==null&&Fe!==void 0?Fe:(et=Rn())===null||et===void 0?void 0:et.validateOnModelUpdate)!==null&&ct!==void 0?ct:!0}),$e]}function q(m){return Array.isArray(m)?m.map(_=>rt(_,!0)):rt(m)}function le(m,_){const[b,F]=H(m,_);function z(){F.value.onBlur()}function Q(fe){const $e=Ys(fe);X(de(m),$e,!1),F.value.onInput()}function B(fe){const $e=Ys(fe);X(de(m),$e,!1),F.value.onChange()}return me(()=>Object.assign(Object.assign({},F.value),{onBlur:z,onInput:Q,onChange:B,value:b.value}))}function Se(m,_){const[b,F]=H(m,_),z=W(de(m));function Q(B){b.value=B}return me(()=>{const B=Je(_)?_(hs(z,ps)):_||{};return Object.assign({[B.model||"modelValue"]:b.value,[`onUpdate:${B.model||"modelValue"}`]:Q},F.value)})}const _e=Object.assign(Object.assign({},U),{values:Ho(u),handleReset:()=>S(),submitForm:L});return Is(xm,_e),_e}function lg(e,t,n,r){const s={touched:"some",pending:"some",valid:"every"},i=me(()=>!at(t,re(n)));function o(){const u=e.value;return yt(s).reduce((l,c)=>{const f=s[c];return l[c]=u[f](g=>g[c]),l},{})}const a=Yn(o());return g0(()=>{const u=o();a.touched=u.touched,a.valid=u.valid,a.pending=u.pending}),me(()=>Object.assign(Object.assign({initialValues:re(n)},a),{valid:a.valid&&!yt(r.value).length,dirty:i.value}))}function cg(e,t,n){const r=If(n),s=wt(r),i=wt(Ee(r));function o(a,u){u!=null&&u.force?(s.value=Ee(a),i.value=Ee(a)):(s.value=qr(Ee(s.value)||{},Ee(a)),i.value=qr(Ee(i.value)||{},Ee(a))),u!=null&&u.updateFields&&e.value.forEach(l=>{if(l.touched)return;const f=_t(s.value,l.path);tn(t,l.path,Ee(f))})}return{initialValues:s,originalInitialValues:i,setInitialValues:o}}function fg(e,t){return t?{valid:e.valid&&t.valid,errors:[...e.errors,...t.errors]}:e}const dg=qo({name:"Form",inheritAttrs:!1,props:{as:{type:null,default:"form"},validationSchema:{type:Object,default:void 0},initialValues:{type:Object,default:void 0},initialErrors:{type:Object,default:void 0},initialTouched:{type:Object,default:void 0},validateOnMount:{type:Boolean,default:!1},onSubmit:{type:Function,default:void 0},onInvalidSubmit:{type:Function,default:void 0},keepValues:{type:Boolean,default:!1}},setup(e,t){const n=Fn(e,"validationSchema"),r=Fn(e,"keepValues"),{errors:s,errorBag:i,values:o,meta:a,isSubmitting:u,isValidating:l,submitCount:c,controlledValues:f,validate:g,validateField:p,handleReset:v,resetForm:w,handleSubmit:E,setErrors:O,setFieldError:P,setFieldValue:j,setValues:V,setFieldTouched:Z,setTouched:oe,resetField:ae}=ug({validationSchema:n.value?n:void 0,initialValues:e.initialValues,initialErrors:e.initialErrors,initialTouched:e.initialTouched,validateOnMount:e.validateOnMount,keepValuesOnUnmount:r}),De=E((W,{evt:C})=>{xf(C)&&C.target.submit()},e.onInvalidSubmit),ue=e.onSubmit?E(e.onSubmit,e.onInvalidSubmit):De;function ne(W){pa(W)&&W.preventDefault(),v(),typeof t.attrs.onReset=="function"&&t.attrs.onReset()}function te(W,C){return E(typeof W=="function"&&!C?W:C,e.onInvalidSubmit)(W)}function Pe(){return Ee(o)}function Ue(){return Ee(a.value)}function Oe(){return Ee(s.value)}function je(){return{meta:a.value,errors:s.value,errorBag:i.value,values:o,isSubmitting:u.value,isValidating:l.value,submitCount:c.value,controlledValues:f.value,validate:g,validateField:p,handleSubmit:te,handleReset:v,submitForm:De,setErrors:O,setFieldError:P,setFieldValue:j,setValues:V,setFieldTouched:Z,setTouched:oe,resetForm:w,resetField:ae,getValues:Pe,getMeta:Ue,getErrors:Oe}}return t.expose({setFieldError:P,setErrors:O,setFieldValue:j,setValues:V,setFieldTouched:Z,setTouched:oe,resetForm:w,validate:g,validateField:p,resetField:ae,getValues:Pe,getMeta:Ue,getErrors:Oe,values:o,meta:a,errors:s}),function(){const C=e.as==="form"?e.as:e.as?Zo(e.as):null,J=ma(C,t,je);return C?Vs(C,Object.assign(Object.assign(Object.assign({},C==="form"?{novalidate:!0}:{}),t.attrs),{onSubmit:ue,onReset:ne}),J):J}}}),hg=dg,pg=qo({name:"ErrorMessage",props:{as:{type:String,default:void 0},name:{type:String,required:!0}},setup(e,t){const n=or(li,void 0),r=me(()=>n==null?void 0:n.errors.value[e.name]);function s(){return{message:r.value}}return()=>{if(!r.value)return;const i=e.as?Zo(e.as):e.as,o=ma(i,t,s),a=Object.assign({role:"alert"},t.attrs);return!i&&(Array.isArray(o)||!o)&&(o!=null&&o.length)?o:(Array.isArray(o)||!o)&&!(o!=null&&o.length)?Vs(i||"span",a,r.value):Vs(i,a,o)}}}),Or=pg;function _g(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Wn(e){this._maxSize=e,this.clear()}Wn.prototype.clear=function(){this._size=0,this._values=Object.create(null)};Wn.prototype.get=function(e){return this._values[e]};Wn.prototype.set=function(e,t){return this._size>=this._maxSize&&this.clear(),e in this._values||this._size++,this._values[e]=t};var mg=/[^.^\]^[]+|(?=\[\]|\.\.)/g,Rf=/^\d+$/,gg=/^\d/,vg=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,yg=/^\s*(['"]?)(.*?)(\1)\s*$/,ga=512,Fl=new Wn(ga),Il=new Wn(ga),Rl=new Wn(ga),Un={Cache:Wn,split:bo,normalizePath:Hi,setter:function(e){var t=Hi(e);return Il.get(e)||Il.set(e,function(r,s){for(var i=0,o=t.length,a=r;ie.match(wg)||[],di=e=>e[0].toUpperCase()+e.slice(1),ya=(e,t)=>fi(e).join(t).toLowerCase(),Pf=e=>fi(e).reduce((t,n)=>`${t}${t?n[0].toUpperCase()+n.slice(1).toLowerCase():n.toLowerCase()}`,""),xg=e=>di(Pf(e)),Tg=e=>ya(e,"_"),Dg=e=>ya(e,"-"),Ag=e=>di(ya(e," ")),kg=e=>fi(e).map(di).join(" ");var Wi={words:fi,upperFirst:di,camelCase:Pf,pascalCase:xg,snakeCase:Tg,kebabCase:Dg,sentenceCase:Ag,titleCase:kg},Ea={exports:{}};Ea.exports=function(e){return Vf(Cg(e),e)};Ea.exports.array=Vf;function Vf(e,t){var n=e.length,r=new Array(n),s={},i=n,o=Mg(t),a=Fg(e);for(t.forEach(function(l){if(!a.has(l[0])||!a.has(l[1]))throw new Error("Unknown node. There is an unknown node in the supplied edges.")});i--;)s[i]||u(e[i],i,new Set);return r;function u(l,c,f){if(f.has(l)){var g;try{g=", node was:"+JSON.stringify(l)}catch{g=""}throw new Error("Cyclic dependency"+g)}if(!a.has(l))throw new Error("Found unknown node. Make sure to provided all involved nodes. Unknown node: "+JSON.stringify(l));if(!s[c]){s[c]=!0;var p=o.get(l)||new Set;if(p=Array.from(p),c=p.length){f.add(l);do{var v=p[--c];u(v,a.get(v),f)}while(c);f.delete(l)}r[--n]=l}}}function Cg(e){for(var t=new Set,n=0,r=e.length;n"",Lg=/^Symbol\((.*)\)(.*)$/;function Yg(e){return e!=+e?"NaN":e===0&&1/e<0?"-0":""+e}function Pl(e,t=!1){if(e==null||e===!0||e===!1)return""+e;const n=typeof e;if(n==="number")return Yg(e);if(n==="string")return t?`"${e}"`:e;if(n==="function")return"[Function "+(e.name||"anonymous")+"]";if(n==="symbol")return Ug.call(e).replace(Lg,"Symbol($1)");const r=Pg.call(e).slice(8,-1);return r==="Date"?isNaN(e.getTime())?""+e:e.toISOString(e):r==="Error"||e instanceof Error?"["+Vg.call(e)+"]":r==="RegExp"?Ng.call(e):null}function Sn(e,t){let n=Pl(e,t);return n!==null?n:JSON.stringify(e,function(r,s){let i=Pl(this[r],t);return i!==null?i:s},2)}function Nf(e){return e==null?[]:[].concat(e)}let Uf,Lf,Yf,$g=/\$\{\s*(\w+)\s*\}/g;Uf=Symbol.toStringTag;class Vl{constructor(t,n,r,s){this.name=void 0,this.message=void 0,this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=void 0,this.inner=void 0,this[Uf]="Error",this.name="ValidationError",this.value=n,this.path=r,this.type=s,this.errors=[],this.inner=[],Nf(t).forEach(i=>{if(pt.isError(i)){this.errors.push(...i.errors);const o=i.inner.length?i.inner:[i];this.inner.push(...o)}else this.errors.push(i)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0]}}Lf=Symbol.hasInstance;Yf=Symbol.toStringTag;class pt extends Error{static formatError(t,n){const r=n.label||n.path||"this";return r!==n.path&&(n=Object.assign({},n,{path:r})),typeof t=="string"?t.replace($g,(s,i)=>Sn(n[i])):typeof t=="function"?t(n):t}static isError(t){return t&&t.name==="ValidationError"}constructor(t,n,r,s,i){const o=new Vl(t,n,r,s);if(i)return o;super(),this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=[],this.inner=[],this[Yf]="Error",this.name=o.name,this.message=o.message,this.type=o.type,this.value=o.value,this.path=o.path,this.errors=o.errors,this.inner=o.inner,Error.captureStackTrace&&Error.captureStackTrace(this,pt)}static[Lf](t){return Vl[Symbol.hasInstance](t)||super[Symbol.hasInstance](t)}}let jt={default:"${path} is invalid",required:"${path} is a required field",defined:"${path} must be defined",notNull:"${path} cannot be null",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:e,type:t,value:n,originalValue:r})=>{const s=r!=null&&r!==n?` (cast from the value \`${Sn(r,!0)}\`).`:".";return t!=="mixed"?`${e} must be a \`${t}\` type, but the final value was: \`${Sn(n,!0)}\``+s:`${e} must match the configured type. The validated value was: \`${Sn(n,!0)}\``+s}},ft={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",datetime:"${path} must be a valid ISO date-time",datetime_precision:"${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits",datetime_offset:'${path} must be a valid ISO date-time with UTC "Z" timezone',trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},mn={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},Oo={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},jg={isValue:"${path} field must be ${value}"},So={noUnknown:"${path} field has unspecified keys: ${unknown}"},Bg={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"},Hg={notType:e=>{const{path:t,value:n,spec:r}=e,s=r.types.length;if(Array.isArray(n)){if(n.lengths)return`${t} tuple value has too many items, expected a length of ${s} but got ${n.length} for value: \`${Sn(n,!0)}\``}return pt.formatError(jt.notType,e)}};Object.assign(Object.create(null),{mixed:jt,string:ft,number:mn,date:Oo,object:So,array:Bg,boolean:jg,tuple:Hg});const ba=e=>e&&e.__isYupSchema__;class $s{static fromOptions(t,n){if(!n.then&&!n.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:r,then:s,otherwise:i}=n,o=typeof r=="function"?r:(...a)=>a.every(u=>u===r);return new $s(t,(a,u)=>{var l;let c=o(...a)?s:i;return(l=c==null?void 0:c(u))!=null?l:u})}constructor(t,n){this.fn=void 0,this.refs=t,this.refs=t,this.fn=n}resolve(t,n){let r=this.refs.map(i=>i.getValue(n==null?void 0:n.value,n==null?void 0:n.parent,n==null?void 0:n.context)),s=this.fn(r,t,n);if(s===void 0||s===t)return t;if(!ba(s))throw new TypeError("conditions must return a schema object");return s.resolve(n)}}const _s={context:"$",value:"."};class zn{constructor(t,n={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,typeof t!="string")throw new TypeError("ref must be a string, got: "+t);if(this.key=t.trim(),t==="")throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===_s.context,this.isValue=this.key[0]===_s.value,this.isSibling=!this.isContext&&!this.isValue;let r=this.isContext?_s.context:this.isValue?_s.value:"";this.path=this.key.slice(r.length),this.getter=this.path&&Un.getter(this.path,!0),this.map=n.map}getValue(t,n,r){let s=this.isContext?r:this.isValue?t:n;return this.getter&&(s=this.getter(s||{})),this.map&&(s=this.map(s)),s}cast(t,n){return this.getValue(t,n==null?void 0:n.parent,n==null?void 0:n.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(t){return t&&t.__isYupRef}}zn.prototype.__isYupRef=!0;const an=e=>e==null;function Zn(e){function t({value:n,path:r="",options:s,originalValue:i,schema:o},a,u){const{name:l,test:c,params:f,message:g,skipAbsent:p}=e;let{parent:v,context:w,abortEarly:E=o.spec.abortEarly,disableStackTrace:O=o.spec.disableStackTrace}=s;function P(te){return zn.isRef(te)?te.getValue(n,v,w):te}function j(te={}){const Pe=Object.assign({value:n,originalValue:i,label:o.spec.label,path:te.path||r,spec:o.spec,disableStackTrace:te.disableStackTrace||O},f,te.params);for(const Oe of Object.keys(Pe))Pe[Oe]=P(Pe[Oe]);const Ue=new pt(pt.formatError(te.message||g,Pe),n,Pe.path,te.type||l,Pe.disableStackTrace);return Ue.params=Pe,Ue}const V=E?a:u;let Z={path:r,parent:v,type:l,from:s.from,createError:j,resolve:P,options:s,originalValue:i,schema:o};const oe=te=>{pt.isError(te)?V(te):te?u(null):V(j())},ae=te=>{pt.isError(te)?V(te):a(te)};if(p&&an(n))return oe(!0);let ue;try{var ne;if(ue=c.call(Z,n,Z),typeof((ne=ue)==null?void 0:ne.then)=="function"){if(s.sync)throw new Error(`Validation test of type: "${Z.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`);return Promise.resolve(ue).then(oe,ae)}}catch(te){ae(te);return}oe(ue)}return t.OPTIONS=e,t}function Wg(e,t,n,r=n){let s,i,o;return t?(Un.forEach(t,(a,u,l)=>{let c=u?a.slice(1,a.length-1):a;e=e.resolve({context:r,parent:s,value:n});let f=e.type==="tuple",g=l?parseInt(c,10):0;if(e.innerType||f){if(f&&!l)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part "${o}" must contain an index to the tuple element, e.g. "${o}[0]"`);if(n&&g>=n.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${t}. because there is no value at that index. `);s=n,n=n&&n[g],e=f?e.spec.types[g]:e.innerType}if(!l){if(!e.fields||!e.fields[c])throw new Error(`The schema does not contain the path: ${t}. (failed at: ${o} which is a type: "${e.type}")`);s=n,n=n&&n[c],e=e.fields[c]}i=c,o=u?"["+a+"]":"."+a}),{schema:e,parent:s,parentPath:i}):{parent:s,parentPath:t,schema:e}}class js extends Set{describe(){const t=[];for(const n of this.values())t.push(zn.isRef(n)?n.describe():n);return t}resolveAll(t){let n=[];for(const r of this.values())n.push(t(r));return n}clone(){return new js(this.values())}merge(t,n){const r=this.clone();return t.forEach(s=>r.add(s)),n.forEach(s=>r.delete(s)),r}}function tr(e,t=new Map){if(ba(e)||!e||typeof e!="object")return e;if(t.has(e))return t.get(e);let n;if(e instanceof Date)n=new Date(e.getTime()),t.set(e,n);else if(e instanceof RegExp)n=new RegExp(e),t.set(e,n);else if(Array.isArray(e)){n=new Array(e.length),t.set(e,n);for(let r=0;r{this.typeError(jt.notType)}),this.type=t.type,this._typeCheck=t.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,disableStackTrace:!1,nullable:!1,optional:!0,coerce:!0},t==null?void 0:t.spec),this.withMutation(n=>{n.nonNullable()})}get _type(){return this.type}clone(t){if(this._mutate)return t&&Object.assign(this.spec,t),this;const n=Object.create(Object.getPrototypeOf(this));return n.type=this.type,n._typeCheck=this._typeCheck,n._whitelist=this._whitelist.clone(),n._blacklist=this._blacklist.clone(),n.internalTests=Object.assign({},this.internalTests),n.exclusiveTests=Object.assign({},this.exclusiveTests),n.deps=[...this.deps],n.conditions=[...this.conditions],n.tests=[...this.tests],n.transforms=[...this.transforms],n.spec=tr(Object.assign({},this.spec,t)),n}label(t){let n=this.clone();return n.spec.label=t,n}meta(...t){if(t.length===0)return this.spec.meta;let n=this.clone();return n.spec.meta=Object.assign(n.spec.meta||{},t[0]),n}withMutation(t){let n=this._mutate;this._mutate=!0;let r=t(this);return this._mutate=n,r}concat(t){if(!t||t===this)return this;if(t.type!==this.type&&this.type!=="mixed")throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${t.type}`);let n=this,r=t.clone();const s=Object.assign({},n.spec,r.spec);return r.spec=s,r.internalTests=Object.assign({},n.internalTests,r.internalTests),r._whitelist=n._whitelist.merge(t._whitelist,t._blacklist),r._blacklist=n._blacklist.merge(t._blacklist,t._whitelist),r.tests=n.tests,r.exclusiveTests=n.exclusiveTests,r.withMutation(i=>{t.tests.forEach(o=>{i.test(o.OPTIONS)})}),r.transforms=[...n.transforms,...r.transforms],r}isType(t){return t==null?!!(this.spec.nullable&&t===null||this.spec.optional&&t===void 0):this._typeCheck(t)}resolve(t){let n=this;if(n.conditions.length){let r=n.conditions;n=n.clone(),n.conditions=[],n=r.reduce((s,i)=>i.resolve(s,t),n),n=n.resolve(t)}return n}resolveOptions(t){var n,r,s,i;return Object.assign({},t,{from:t.from||[],strict:(n=t.strict)!=null?n:this.spec.strict,abortEarly:(r=t.abortEarly)!=null?r:this.spec.abortEarly,recursive:(s=t.recursive)!=null?s:this.spec.recursive,disableStackTrace:(i=t.disableStackTrace)!=null?i:this.spec.disableStackTrace})}cast(t,n={}){let r=this.resolve(Object.assign({value:t},n)),s=n.assert==="ignore-optionality",i=r._cast(t,n);if(n.assert!==!1&&!r.isType(i)){if(s&&an(i))return i;let o=Sn(t),a=Sn(i);throw new TypeError(`The value of ${n.path||"field"} could not be cast to a value that satisfies the schema type: "${r.type}". - -attempted value: ${o} -`+(a!==o?`result of cast: ${a}`:""))}return i}_cast(t,n){let r=t===void 0?t:this.transforms.reduce((s,i)=>i.call(this,s,t,this),t);return r===void 0&&(r=this.getDefault(n)),r}_validate(t,n={},r,s){let{path:i,originalValue:o=t,strict:a=this.spec.strict}=n,u=t;a||(u=this._cast(u,Object.assign({assert:!1},n)));let l=[];for(let c of Object.values(this.internalTests))c&&l.push(c);this.runTests({path:i,value:u,originalValue:o,options:n,tests:l},r,c=>{if(c.length)return s(c,u);this.runTests({path:i,value:u,originalValue:o,options:n,tests:this.tests},r,s)})}runTests(t,n,r){let s=!1,{tests:i,value:o,originalValue:a,path:u,options:l}=t,c=w=>{s||(s=!0,n(w,o))},f=w=>{s||(s=!0,r(w,o))},g=i.length,p=[];if(!g)return f([]);let v={value:o,originalValue:a,path:u,options:l,schema:this};for(let w=0;wthis.resolve(c)._validate(l,c,g,p)}validate(t,n){var r;let s=this.resolve(Object.assign({},n,{value:t})),i=(r=n==null?void 0:n.disableStackTrace)!=null?r:s.spec.disableStackTrace;return new Promise((o,a)=>s._validate(t,n,(u,l)=>{pt.isError(u)&&(u.value=l),a(u)},(u,l)=>{u.length?a(new pt(u,l,void 0,void 0,i)):o(l)}))}validateSync(t,n){var r;let s=this.resolve(Object.assign({},n,{value:t})),i,o=(r=n==null?void 0:n.disableStackTrace)!=null?r:s.spec.disableStackTrace;return s._validate(t,Object.assign({},n,{sync:!0}),(a,u)=>{throw pt.isError(a)&&(a.value=u),a},(a,u)=>{if(a.length)throw new pt(a,t,void 0,void 0,o);i=u}),i}isValid(t,n){return this.validate(t,n).then(()=>!0,r=>{if(pt.isError(r))return!1;throw r})}isValidSync(t,n){try{return this.validateSync(t,n),!0}catch(r){if(pt.isError(r))return!1;throw r}}_getDefault(t){let n=this.spec.default;return n==null?n:typeof n=="function"?n.call(this,t):tr(n)}getDefault(t){return this.resolve(t||{})._getDefault(t)}default(t){return arguments.length===0?this._getDefault():this.clone({default:t})}strict(t=!0){return this.clone({strict:t})}nullability(t,n){const r=this.clone({nullable:t});return r.internalTests.nullable=Zn({message:n,name:"nullable",test(s){return s===null?this.schema.spec.nullable:!0}}),r}optionality(t,n){const r=this.clone({optional:t});return r.internalTests.optionality=Zn({message:n,name:"optionality",test(s){return s===void 0?this.schema.spec.optional:!0}}),r}optional(){return this.optionality(!0)}defined(t=jt.defined){return this.optionality(!1,t)}nullable(){return this.nullability(!0)}nonNullable(t=jt.notNull){return this.nullability(!1,t)}required(t=jt.required){return this.clone().withMutation(n=>n.nonNullable(t).defined(t))}notRequired(){return this.clone().withMutation(t=>t.nullable().optional())}transform(t){let n=this.clone();return n.transforms.push(t),n}test(...t){let n;if(t.length===1?typeof t[0]=="function"?n={test:t[0]}:n=t[0]:t.length===2?n={name:t[0],test:t[1]}:n={name:t[0],message:t[1],test:t[2]},n.message===void 0&&(n.message=jt.default),typeof n.test!="function")throw new TypeError("`test` is a required parameters");let r=this.clone(),s=Zn(n),i=n.exclusive||n.name&&r.exclusiveTests[n.name]===!0;if(n.exclusive&&!n.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return n.name&&(r.exclusiveTests[n.name]=!!n.exclusive),r.tests=r.tests.filter(o=>!(o.OPTIONS.name===n.name&&(i||o.OPTIONS.test===s.OPTIONS.test))),r.tests.push(s),r}when(t,n){!Array.isArray(t)&&typeof t!="string"&&(n=t,t=".");let r=this.clone(),s=Nf(t).map(i=>new zn(i));return s.forEach(i=>{i.isSibling&&r.deps.push(i.key)}),r.conditions.push(typeof n=="function"?new $s(s,n):$s.fromOptions(s,n)),r}typeError(t){let n=this.clone();return n.internalTests.typeError=Zn({message:t,name:"typeError",skipAbsent:!0,test(r){return this.schema._typeCheck(r)?!0:this.createError({params:{type:this.schema.type}})}}),n}oneOf(t,n=jt.oneOf){let r=this.clone();return t.forEach(s=>{r._whitelist.add(s),r._blacklist.delete(s)}),r.internalTests.whiteList=Zn({message:n,name:"oneOf",skipAbsent:!0,test(s){let i=this.schema._whitelist,o=i.resolveAll(this.resolve);return o.includes(s)?!0:this.createError({params:{values:Array.from(i).join(", "),resolved:o}})}}),r}notOneOf(t,n=jt.notOneOf){let r=this.clone();return t.forEach(s=>{r._blacklist.add(s),r._whitelist.delete(s)}),r.internalTests.blacklist=Zn({message:n,name:"notOneOf",test(s){let i=this.schema._blacklist,o=i.resolveAll(this.resolve);return o.includes(s)?this.createError({params:{values:Array.from(i).join(", "),resolved:o}}):!0}}),r}strip(t=!0){let n=this.clone();return n.spec.strip=t,n}describe(t){const n=(t?this.resolve(t):this).clone(),{label:r,meta:s,optional:i,nullable:o}=n.spec;return{meta:s,label:r,optional:i,nullable:o,default:n.getDefault(t),type:n.type,oneOf:n._whitelist.describe(),notOneOf:n._blacklist.describe(),tests:n.tests.map(u=>({name:u.OPTIONS.name,params:u.OPTIONS.params})).filter((u,l,c)=>c.findIndex(f=>f.name===u.name)===l)}}}Pt.prototype.__isYupSchema__=!0;for(const e of["validate","validateSync"])Pt.prototype[`${e}At`]=function(t,n,r={}){const{parent:s,parentPath:i,schema:o}=Wg(this,t,n,r.context);return o[e](s&&s[i],Object.assign({},r,{parent:s,path:t}))};for(const e of["equals","is"])Pt.prototype[e]=Pt.prototype.oneOf;for(const e of["not","nope"])Pt.prototype[e]=Pt.prototype.notOneOf;const zg=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/;function Kg(e){const t=wo(e);if(!t)return Date.parse?Date.parse(e):Number.NaN;if(t.z===void 0&&t.plusMinus===void 0)return new Date(t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond).valueOf();let n=0;return t.z!=="Z"&&t.plusMinus!==void 0&&(n=t.hourOffset*60+t.minuteOffset,t.plusMinus==="+"&&(n=0-n)),Date.UTC(t.year,t.month,t.day,t.hour,t.minute+n,t.second,t.millisecond)}function wo(e){var t,n;const r=zg.exec(e);return r?{year:Qt(r[1]),month:Qt(r[2],1)-1,day:Qt(r[3],1),hour:Qt(r[4]),minute:Qt(r[5]),second:Qt(r[6]),millisecond:r[7]?Qt(r[7].substring(0,3)):0,precision:(t=(n=r[7])==null?void 0:n.length)!=null?t:void 0,z:r[8]||void 0,plusMinus:r[9]||void 0,hourOffset:Qt(r[10]),minuteOffset:Qt(r[11])}:null}function Qt(e,t=0){return Number(e)||t}let Gg=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,qg=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,Zg=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,Jg="^\\d{4}-\\d{2}-\\d{2}",Xg="\\d{2}:\\d{2}:\\d{2}",Qg="(([+-]\\d{2}(:?\\d{2})?)|Z)",ev=new RegExp(`${Jg}T${Xg}(\\.\\d+)?${Qg}$`),tv=e=>an(e)||e===e.trim(),nv={}.toString();function Os(){return new $f}class $f extends Pt{constructor(){super({type:"string",check(t){return t instanceof String&&(t=t.valueOf()),typeof t=="string"}}),this.withMutation(()=>{this.transform((t,n,r)=>{if(!r.spec.coerce||r.isType(t)||Array.isArray(t))return t;const s=t!=null&&t.toString?t.toString():t;return s===nv?t:s})})}required(t){return super.required(t).withMutation(n=>n.test({message:t||jt.required,name:"required",skipAbsent:!0,test:r=>!!r.length}))}notRequired(){return super.notRequired().withMutation(t=>(t.tests=t.tests.filter(n=>n.OPTIONS.name!=="required"),t))}length(t,n=ft.length){return this.test({message:n,name:"length",exclusive:!0,params:{length:t},skipAbsent:!0,test(r){return r.length===this.resolve(t)}})}min(t,n=ft.min){return this.test({message:n,name:"min",exclusive:!0,params:{min:t},skipAbsent:!0,test(r){return r.length>=this.resolve(t)}})}max(t,n=ft.max){return this.test({name:"max",exclusive:!0,message:n,params:{max:t},skipAbsent:!0,test(r){return r.length<=this.resolve(t)}})}matches(t,n){let r=!1,s,i;return n&&(typeof n=="object"?{excludeEmptyString:r=!1,message:s,name:i}=n:s=n),this.test({name:i||"matches",message:s||ft.matches,params:{regex:t},skipAbsent:!0,test:o=>o===""&&r||o.search(t)!==-1})}email(t=ft.email){return this.matches(Gg,{name:"email",message:t,excludeEmptyString:!0})}url(t=ft.url){return this.matches(qg,{name:"url",message:t,excludeEmptyString:!0})}uuid(t=ft.uuid){return this.matches(Zg,{name:"uuid",message:t,excludeEmptyString:!1})}datetime(t){let n="",r,s;return t&&(typeof t=="object"?{message:n="",allowOffset:r=!1,precision:s=void 0}=t:n=t),this.matches(ev,{name:"datetime",message:n||ft.datetime,excludeEmptyString:!0}).test({name:"datetime_offset",message:n||ft.datetime_offset,params:{allowOffset:r},skipAbsent:!0,test:i=>{if(!i||r)return!0;const o=wo(i);return o?!!o.z:!1}}).test({name:"datetime_precision",message:n||ft.datetime_precision,params:{precision:s},skipAbsent:!0,test:i=>{if(!i||s==null)return!0;const o=wo(i);return o?o.precision===s:!1}})}ensure(){return this.default("").transform(t=>t===null?"":t)}trim(t=ft.trim){return this.transform(n=>n!=null?n.trim():n).test({message:t,name:"trim",test:tv})}lowercase(t=ft.lowercase){return this.transform(n=>an(n)?n:n.toLowerCase()).test({message:t,name:"string_case",exclusive:!0,skipAbsent:!0,test:n=>an(n)||n===n.toLowerCase()})}uppercase(t=ft.uppercase){return this.transform(n=>an(n)?n:n.toUpperCase()).test({message:t,name:"string_case",exclusive:!0,skipAbsent:!0,test:n=>an(n)||n===n.toUpperCase()})}}Os.prototype=$f.prototype;let rv=e=>e!=+e;function jf(){return new Bf}class Bf extends Pt{constructor(){super({type:"number",check(t){return t instanceof Number&&(t=t.valueOf()),typeof t=="number"&&!rv(t)}}),this.withMutation(()=>{this.transform((t,n,r)=>{if(!r.spec.coerce)return t;let s=t;if(typeof s=="string"){if(s=s.replace(/\s/g,""),s==="")return NaN;s=+s}return r.isType(s)||s===null?s:parseFloat(s)})})}min(t,n=mn.min){return this.test({message:n,name:"min",exclusive:!0,params:{min:t},skipAbsent:!0,test(r){return r>=this.resolve(t)}})}max(t,n=mn.max){return this.test({message:n,name:"max",exclusive:!0,params:{max:t},skipAbsent:!0,test(r){return r<=this.resolve(t)}})}lessThan(t,n=mn.lessThan){return this.test({message:n,name:"max",exclusive:!0,params:{less:t},skipAbsent:!0,test(r){return rthis.resolve(t)}})}positive(t=mn.positive){return this.moreThan(0,t)}negative(t=mn.negative){return this.lessThan(0,t)}integer(t=mn.integer){return this.test({name:"integer",message:t,skipAbsent:!0,test:n=>Number.isInteger(n)})}truncate(){return this.transform(t=>an(t)?t:t|0)}round(t){var n;let r=["ceil","floor","round","trunc"];if(t=((n=t)==null?void 0:n.toLowerCase())||"round",t==="trunc")return this.truncate();if(r.indexOf(t.toLowerCase())===-1)throw new TypeError("Only valid options for round() are: "+r.join(", "));return this.transform(s=>an(s)?s:Math[t](s))}}jf.prototype=Bf.prototype;let Hf=new Date(""),sv=e=>Object.prototype.toString.call(e)==="[object Date]";function Oa(){return new ss}class ss extends Pt{constructor(){super({type:"date",check(t){return sv(t)&&!isNaN(t.getTime())}}),this.withMutation(()=>{this.transform((t,n,r)=>!r.spec.coerce||r.isType(t)||t===null?t:(t=Kg(t),isNaN(t)?ss.INVALID_DATE:new Date(t)))})}prepareParam(t,n){let r;if(zn.isRef(t))r=t;else{let s=this.cast(t);if(!this._typeCheck(s))throw new TypeError(`\`${n}\` must be a Date or a value that can be \`cast()\` to a Date`);r=s}return r}min(t,n=Oo.min){let r=this.prepareParam(t,"min");return this.test({message:n,name:"min",exclusive:!0,params:{min:t},skipAbsent:!0,test(s){return s>=this.resolve(r)}})}max(t,n=Oo.max){let r=this.prepareParam(t,"max");return this.test({message:n,name:"max",exclusive:!0,params:{max:t},skipAbsent:!0,test(s){return s<=this.resolve(r)}})}}ss.INVALID_DATE=Hf;Oa.prototype=ss.prototype;Oa.INVALID_DATE=Hf;function iv(e,t=[]){let n=[],r=new Set,s=new Set(t.map(([o,a])=>`${o}-${a}`));function i(o,a){let u=Un.split(o)[0];r.add(u),s.has(`${a}-${u}`)||n.push([a,u])}for(const o of Object.keys(e)){let a=e[o];r.add(o),zn.isRef(a)&&a.isSibling?i(a.path,o):ba(a)&&"deps"in a&&a.deps.forEach(u=>i(u,o))}return Rg.array(Array.from(r),n).reverse()}function Nl(e,t){let n=1/0;return e.some((r,s)=>{var i;if((i=t.path)!=null&&i.includes(r))return n=s,!0}),n}function Wf(e){return(t,n)=>Nl(e,t)-Nl(e,n)}const ov=(e,t,n)=>{if(typeof e!="string")return e;let r=e;try{r=JSON.parse(e)}catch{}return n.isType(r)?r:e};function Ss(e){if("fields"in e){const t={};for(const[n,r]of Object.entries(e.fields))t[n]=Ss(r);return e.setFields(t)}if(e.type==="array"){const t=e.optional();return t.innerType&&(t.innerType=Ss(t.innerType)),t}return e.type==="tuple"?e.optional().clone({types:e.spec.types.map(Ss)}):"optional"in e?e.optional():e}const av=(e,t)=>{const n=[...Un.normalizePath(t)];if(n.length===1)return n[0]in e;let r=n.pop(),s=Un.getter(Un.join(n),!0)(e);return!!(s&&r in s)};let Ul=e=>Object.prototype.toString.call(e)==="[object Object]";function uv(e,t){let n=Object.keys(e.fields);return Object.keys(t).filter(r=>n.indexOf(r)===-1)}const lv=Wf([]);function zf(e){return new Kf(e)}class Kf extends Pt{constructor(t){super({type:"object",check(n){return Ul(n)||typeof n=="function"}}),this.fields=Object.create(null),this._sortErrors=lv,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{t&&this.shape(t)})}_cast(t,n={}){var r;let s=super._cast(t,n);if(s===void 0)return this.getDefault(n);if(!this._typeCheck(s))return s;let i=this.fields,o=(r=n.stripUnknown)!=null?r:this.spec.noUnknown,a=[].concat(this._nodes,Object.keys(s).filter(f=>!this._nodes.includes(f))),u={},l=Object.assign({},n,{parent:u,__validating:n.__validating||!1}),c=!1;for(const f of a){let g=i[f],p=f in s;if(g){let v,w=s[f];l.path=(n.path?`${n.path}.`:"")+f,g=g.resolve({value:w,context:n.context,parent:u});let E=g instanceof Pt?g.spec:void 0,O=E==null?void 0:E.strict;if(E!=null&&E.strip){c=c||f in s;continue}v=!n.__validating||!O?g.cast(s[f],l):s[f],v!==void 0&&(u[f]=v)}else p&&!o&&(u[f]=s[f]);(p!==f in u||u[f]!==s[f])&&(c=!0)}return c?u:s}_validate(t,n={},r,s){let{from:i=[],originalValue:o=t,recursive:a=this.spec.recursive}=n;n.from=[{schema:this,value:o},...i],n.__validating=!0,n.originalValue=o,super._validate(t,n,r,(u,l)=>{if(!a||!Ul(l)){s(u,l);return}o=o||l;let c=[];for(let f of this._nodes){let g=this.fields[f];!g||zn.isRef(g)||c.push(g.asNestedTest({options:n,key:f,parent:l,parentPath:n.path,originalParent:o}))}this.runTests({tests:c,value:l,originalValue:o,options:n},r,f=>{s(f.sort(this._sortErrors).concat(u),l)})})}clone(t){const n=super.clone(t);return n.fields=Object.assign({},this.fields),n._nodes=this._nodes,n._excludedEdges=this._excludedEdges,n._sortErrors=this._sortErrors,n}concat(t){let n=super.concat(t),r=n.fields;for(let[s,i]of Object.entries(this.fields)){const o=r[s];r[s]=o===void 0?i:o}return n.withMutation(s=>s.setFields(r,[...this._excludedEdges,...t._excludedEdges]))}_getDefault(t){if("default"in this.spec)return super._getDefault(t);if(!this._nodes.length)return;let n={};return this._nodes.forEach(r=>{var s;const i=this.fields[r];let o=t;(s=o)!=null&&s.value&&(o=Object.assign({},o,{parent:o.value,value:o.value[r]})),n[r]=i&&"getDefault"in i?i.getDefault(o):void 0}),n}setFields(t,n){let r=this.clone();return r.fields=t,r._nodes=iv(t,n),r._sortErrors=Wf(Object.keys(t)),n&&(r._excludedEdges=n),r}shape(t,n=[]){return this.clone().withMutation(r=>{let s=r._excludedEdges;return n.length&&(Array.isArray(n[0])||(n=[n]),s=[...r._excludedEdges,...n]),r.setFields(Object.assign(r.fields,t),s)})}partial(){const t={};for(const[n,r]of Object.entries(this.fields))t[n]="optional"in r&&r.optional instanceof Function?r.optional():r;return this.setFields(t)}deepPartial(){return Ss(this)}pick(t){const n={};for(const r of t)this.fields[r]&&(n[r]=this.fields[r]);return this.setFields(n,this._excludedEdges.filter(([r,s])=>t.includes(r)&&t.includes(s)))}omit(t){const n=[];for(const r of Object.keys(this.fields))t.includes(r)||n.push(r);return this.pick(n)}from(t,n,r){let s=Un.getter(t,!0);return this.transform(i=>{if(!i)return i;let o=i;return av(i,t)&&(o=Object.assign({},i),r||delete o[t],o[n]=s(i)),o})}json(){return this.transform(ov)}noUnknown(t=!0,n=So.noUnknown){typeof t!="boolean"&&(n=t,t=!0);let r=this.test({name:"noUnknown",exclusive:!0,message:n,test(s){if(s==null)return!0;const i=uv(this.schema,s);return!t||i.length===0||this.createError({params:{unknown:i.join(", ")}})}});return r.spec.noUnknown=t,r}unknown(t=!0,n=So.noUnknown){return this.noUnknown(!t,n)}transformKeys(t){return this.transform(n=>{if(!n)return n;const r={};for(const s of Object.keys(n))r[t(s)]=n[s];return r})}camelCase(){return this.transformKeys(Wi.camelCase)}snakeCase(){return this.transformKeys(Wi.snakeCase)}constantCase(){return this.transformKeys(t=>Wi.snakeCase(t).toUpperCase())}describe(t){const n=(t?this.resolve(t):this).clone(),r=super.describe(t);r.fields={};for(const[i,o]of Object.entries(n.fields)){var s;let a=t;(s=a)!=null&&s.value&&(a=Object.assign({},a,{parent:a.value,value:a.value[i]})),r.fields[i]=o.describe(a)}return r}}zf.prototype=Kf.prototype;//! moment.js -//! version : 2.30.1 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -var Gf;function N(){return Gf.apply(null,arguments)}function cv(e){Gf=e}function Vt(e){return e instanceof Array||Object.prototype.toString.call(e)==="[object Array]"}function Ln(e){return e!=null&&Object.prototype.toString.call(e)==="[object Object]"}function ge(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Sa(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(ge(e,t))return!1;return!0}function dt(e){return e===void 0}function dn(e){return typeof e=="number"||Object.prototype.toString.call(e)==="[object Number]"}function is(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function qf(e,t){var n=[],r,s=e.length;for(r=0;r>>0,r;for(r=0;r0)for(n=0;n=0;return(i?n?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+r}var Da=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ms=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ki={},ar={};function K(e,t,n,r){var s=r;typeof r=="string"&&(s=function(){return this[r]()}),e&&(ar[e]=s),t&&(ar[t[0]]=function(){return Gt(s.apply(this,arguments),t[1],t[2])}),n&&(ar[n]=function(){return this.localeData().ordinal(s.apply(this,arguments),e)})}function _v(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function mv(e){var t=e.match(Da),n,r;for(n=0,r=t.length;n=0&&ms.test(e);)e=e.replace(ms,r),ms.lastIndex=0,n-=1;return e}var gv={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function vv(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(Da).map(function(r){return r==="MMMM"||r==="MM"||r==="DD"||r==="dddd"?r.slice(1):r}).join(""),this._longDateFormat[e])}var yv="Invalid date";function Ev(){return this._invalidDate}var bv="%d",Ov=/\d{1,2}/;function Sv(e){return this._ordinal.replace("%d",e)}var wv={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function xv(e,t,n,r){var s=this._relativeTime[n];return Zt(s)?s(e,t,n,r):s.replace(/%d/i,e)}function Tv(e,t){var n=this._relativeTime[e>0?"future":"past"];return Zt(n)?n(t):n.replace(/%s/i,t)}var $l={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function kt(e){return typeof e=="string"?$l[e]||$l[e.toLowerCase()]:void 0}function Aa(e){var t={},n,r;for(r in e)ge(e,r)&&(n=kt(r),n&&(t[n]=e[r]));return t}var Dv={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Av(e){var t=[],n;for(n in e)ge(e,n)&&t.push({unit:n,priority:Dv[n]});return t.sort(function(r,s){return r.priority-s.priority}),t}var Qf=/\d/,bt=/\d\d/,ed=/\d{3}/,ka=/\d{4}/,pi=/[+-]?\d{6}/,Re=/\d\d?/,td=/\d\d\d\d?/,nd=/\d\d\d\d\d\d?/,_i=/\d{1,3}/,Ca=/\d{1,4}/,mi=/[+-]?\d{1,6}/,mr=/\d+/,gi=/[+-]?\d+/,kv=/Z|[+-]\d\d:?\d\d/gi,vi=/Z|[+-]\d\d(?::?\d\d)?/gi,Cv=/[+-]?\d+(\.\d{1,3})?/,as=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,gr=/^[1-9]\d?/,Ma=/^([1-9]\d|\d)/,Bs;Bs={};function Y(e,t,n){Bs[e]=Zt(t)?t:function(r,s){return r&&n?n:t}}function Mv(e,t){return ge(Bs,e)?Bs[e](t._strict,t._locale):new RegExp(Fv(e))}function Fv(e){return cn(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,n,r,s,i){return n||r||s||i}))}function cn(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function xt(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function ce(e){var t=+e,n=0;return t!==0&&isFinite(t)&&(n=xt(t)),n}var Ao={};function xe(e,t){var n,r=t,s;for(typeof e=="string"&&(e=[e]),dn(t)&&(r=function(i,o){o[t]=ce(i)}),s=e.length,n=0;n68?1900:2e3)};var rd=vr("FullYear",!0);function Vv(){return yi(this.year())}function vr(e,t){return function(n){return n!=null?(sd(this,e,n),N.updateOffset(this,t),this):Zr(this,e)}}function Zr(e,t){if(!e.isValid())return NaN;var n=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return r?n.getUTCSeconds():n.getSeconds();case"Minutes":return r?n.getUTCMinutes():n.getMinutes();case"Hours":return r?n.getUTCHours():n.getHours();case"Date":return r?n.getUTCDate():n.getDate();case"Day":return r?n.getUTCDay():n.getDay();case"Month":return r?n.getUTCMonth():n.getMonth();case"FullYear":return r?n.getUTCFullYear():n.getFullYear();default:return NaN}}function sd(e,t,n){var r,s,i,o,a;if(!(!e.isValid()||isNaN(n))){switch(r=e._d,s=e._isUTC,t){case"Milliseconds":return void(s?r.setUTCMilliseconds(n):r.setMilliseconds(n));case"Seconds":return void(s?r.setUTCSeconds(n):r.setSeconds(n));case"Minutes":return void(s?r.setUTCMinutes(n):r.setMinutes(n));case"Hours":return void(s?r.setUTCHours(n):r.setHours(n));case"Date":return void(s?r.setUTCDate(n):r.setDate(n));case"FullYear":break;default:return}i=n,o=e.month(),a=e.date(),a=a===29&&o===1&&!yi(i)?28:a,s?r.setUTCFullYear(i,o,a):r.setFullYear(i,o,a)}}function Nv(e){return e=kt(e),Zt(this[e])?this[e]():this}function Uv(e,t){if(typeof e=="object"){e=Aa(e);var n=Av(e),r,s=n.length;for(r=0;r=0?(a=new Date(e+400,t,n,r,s,i,o),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,s,i,o),a}function Jr(e){var t,n;return e<100&&e>=0?(n=Array.prototype.slice.call(arguments),n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Hs(e,t,n){var r=7+t-n,s=(7+Jr(e,0,r).getUTCDay()-t)%7;return-s+r-1}function cd(e,t,n,r,s){var i=(7+n-r)%7,o=Hs(e,r,s),a=1+7*(t-1)+i+o,u,l;return a<=0?(u=e-1,l=Ur(u)+a):a>Ur(e)?(u=e+1,l=a-Ur(e)):(u=e,l=a),{year:u,dayOfYear:l}}function Xr(e,t,n){var r=Hs(e.year(),t,n),s=Math.floor((e.dayOfYear()-r-1)/7)+1,i,o;return s<1?(o=e.year()-1,i=s+fn(o,t,n)):s>fn(e.year(),t,n)?(i=s-fn(e.year(),t,n),o=e.year()+1):(o=e.year(),i=s),{week:i,year:o}}function fn(e,t,n){var r=Hs(e,t,n),s=Hs(e+1,t,n);return(Ur(e)-r+s)/7}K("w",["ww",2],"wo","week");K("W",["WW",2],"Wo","isoWeek");Y("w",Re,gr);Y("ww",Re,bt);Y("W",Re,gr);Y("WW",Re,bt);us(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=ce(e)});function Jv(e){return Xr(e,this._week.dow,this._week.doy).week}var Xv={dow:0,doy:6};function Qv(){return this._week.dow}function ey(){return this._week.doy}function ty(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function ny(e){var t=Xr(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}K("d",0,"do","day");K("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});K("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});K("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});K("e",0,0,"weekday");K("E",0,0,"isoWeekday");Y("d",Re);Y("e",Re);Y("E",Re);Y("dd",function(e,t){return t.weekdaysMinRegex(e)});Y("ddd",function(e,t){return t.weekdaysShortRegex(e)});Y("dddd",function(e,t){return t.weekdaysRegex(e)});us(["dd","ddd","dddd"],function(e,t,n,r){var s=n._locale.weekdaysParse(e,r,n._strict);s!=null?t.d=s:se(n).invalidWeekday=e});us(["d","e","E"],function(e,t,n,r){t[r]=ce(e)});function ry(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function sy(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Ia(e,t){return e.slice(t,7).concat(e.slice(0,t))}var iy="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),fd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),oy="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ay=as,uy=as,ly=as;function cy(e,t){var n=Vt(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?Ia(n,this._week.dow):e?n[e.day()]:n}function fy(e){return e===!0?Ia(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function dy(e){return e===!0?Ia(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function hy(e,t,n){var r,s,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=qt([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?t==="dddd"?(s=We.call(this._weekdaysParse,o),s!==-1?s:null):t==="ddd"?(s=We.call(this._shortWeekdaysParse,o),s!==-1?s:null):(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null):t==="dddd"?(s=We.call(this._weekdaysParse,o),s!==-1||(s=We.call(this._shortWeekdaysParse,o),s!==-1)?s:(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null)):t==="ddd"?(s=We.call(this._shortWeekdaysParse,o),s!==-1||(s=We.call(this._weekdaysParse,o),s!==-1)?s:(s=We.call(this._minWeekdaysParse,o),s!==-1?s:null)):(s=We.call(this._minWeekdaysParse,o),s!==-1||(s=We.call(this._weekdaysParse,o),s!==-1)?s:(s=We.call(this._shortWeekdaysParse,o),s!==-1?s:null))}function py(e,t,n){var r,s,i;if(this._weekdaysParseExact)return hy.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(s=qt([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(s,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(s,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(s,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&t==="dddd"&&this._fullWeekdaysParse[r].test(e))return r;if(n&&t==="ddd"&&this._shortWeekdaysParse[r].test(e))return r;if(n&&t==="dd"&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function _y(e){if(!this.isValid())return e!=null?this:NaN;var t=Zr(this,"Day");return e!=null?(e=ry(e,this.localeData()),this.add(e-t,"d")):t}function my(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function gy(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=sy(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function vy(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(ge(this,"_weekdaysRegex")||(this._weekdaysRegex=ay),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function yy(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(ge(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=uy),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Ey(e){return this._weekdaysParseExact?(ge(this,"_weekdaysRegex")||Ra.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(ge(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ly),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ra(){function e(c,f){return f.length-c.length}var t=[],n=[],r=[],s=[],i,o,a,u,l;for(i=0;i<7;i++)o=qt([2e3,1]).day(i),a=cn(this.weekdaysMin(o,"")),u=cn(this.weekdaysShort(o,"")),l=cn(this.weekdays(o,"")),t.push(a),n.push(u),r.push(l),s.push(a),s.push(u),s.push(l);t.sort(e),n.sort(e),r.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Pa(){return this.hours()%12||12}function by(){return this.hours()||24}K("H",["HH",2],0,"hour");K("h",["hh",2],0,Pa);K("k",["kk",2],0,by);K("hmm",0,0,function(){return""+Pa.apply(this)+Gt(this.minutes(),2)});K("hmmss",0,0,function(){return""+Pa.apply(this)+Gt(this.minutes(),2)+Gt(this.seconds(),2)});K("Hmm",0,0,function(){return""+this.hours()+Gt(this.minutes(),2)});K("Hmmss",0,0,function(){return""+this.hours()+Gt(this.minutes(),2)+Gt(this.seconds(),2)});function dd(e,t){K(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}dd("a",!0);dd("A",!1);function hd(e,t){return t._meridiemParse}Y("a",hd);Y("A",hd);Y("H",Re,Ma);Y("h",Re,gr);Y("k",Re,gr);Y("HH",Re,bt);Y("hh",Re,bt);Y("kk",Re,bt);Y("hmm",td);Y("hmmss",nd);Y("Hmm",td);Y("Hmmss",nd);xe(["H","HH"],ze);xe(["k","kk"],function(e,t,n){var r=ce(e);t[ze]=r===24?0:r});xe(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e});xe(["h","hh"],function(e,t,n){t[ze]=ce(e),se(n).bigHour=!0});xe("hmm",function(e,t,n){var r=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r)),se(n).bigHour=!0});xe("hmmss",function(e,t,n){var r=e.length-4,s=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r,2)),t[ln]=ce(e.substr(s)),se(n).bigHour=!0});xe("Hmm",function(e,t,n){var r=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r))});xe("Hmmss",function(e,t,n){var r=e.length-4,s=e.length-2;t[ze]=ce(e.substr(0,r)),t[Ft]=ce(e.substr(r,2)),t[ln]=ce(e.substr(s))});function Oy(e){return(e+"").toLowerCase().charAt(0)==="p"}var Sy=/[ap]\.?m?\.?/i,wy=vr("Hours",!0);function xy(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var pd={calendar:hv,longDateFormat:gv,invalidDate:yv,ordinal:bv,dayOfMonthOrdinalParse:Ov,relativeTime:wv,months:Yv,monthsShort:id,week:Xv,weekdays:iy,weekdaysMin:oy,weekdaysShort:fd,meridiemParse:Sy},Ve={},Sr={},Qr;function Ty(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(s=Ei(i.slice(0,n).join("-")),s)return s;if(r&&r.length>=n&&Ty(i,r)>=n-1)break;n--}t++}return Qr}function Ay(e){return!!(e&&e.match("^[^/\\\\]*$"))}function Ei(e){var t=null,n;if(Ve[e]===void 0&&typeof Ds<"u"&&Ds&&Ds.exports&&Ay(e))try{t=Qr._abbr,n=require,n("./locale/"+e),wn(t)}catch{Ve[e]=null}return Ve[e]}function wn(e,t){var n;return e&&(dt(t)?n=pn(e):n=Va(e,t),n?Qr=n:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),Qr._abbr}function Va(e,t){if(t!==null){var n,r=pd;if(t.abbr=e,Ve[e]!=null)Jf("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Ve[e]._config;else if(t.parentLocale!=null)if(Ve[t.parentLocale]!=null)r=Ve[t.parentLocale]._config;else if(n=Ei(t.parentLocale),n!=null)r=n._config;else return Sr[t.parentLocale]||(Sr[t.parentLocale]=[]),Sr[t.parentLocale].push({name:e,config:t}),null;return Ve[e]=new Ta(To(r,t)),Sr[e]&&Sr[e].forEach(function(s){Va(s.name,s.config)}),wn(e),Ve[e]}else return delete Ve[e],null}function ky(e,t){if(t!=null){var n,r,s=pd;Ve[e]!=null&&Ve[e].parentLocale!=null?Ve[e].set(To(Ve[e]._config,t)):(r=Ei(e),r!=null&&(s=r._config),t=To(s,t),r==null&&(t.abbr=e),n=new Ta(t),n.parentLocale=Ve[e],Ve[e]=n),wn(e)}else Ve[e]!=null&&(Ve[e].parentLocale!=null?(Ve[e]=Ve[e].parentLocale,e===wn()&&wn(e)):Ve[e]!=null&&delete Ve[e]);return Ve[e]}function pn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Qr;if(!Vt(e)){if(t=Ei(e),t)return t;e=[e]}return Dy(e)}function Cy(){return Do(Ve)}function Na(e){var t,n=e._a;return n&&se(e).overflow===-2&&(t=n[un]<0||n[un]>11?un:n[Ht]<1||n[Ht]>Fa(n[nt],n[un])?Ht:n[ze]<0||n[ze]>24||n[ze]===24&&(n[Ft]!==0||n[ln]!==0||n[Pn]!==0)?ze:n[Ft]<0||n[Ft]>59?Ft:n[ln]<0||n[ln]>59?ln:n[Pn]<0||n[Pn]>999?Pn:-1,se(e)._overflowDayOfYear&&(tHt)&&(t=Ht),se(e)._overflowWeeks&&t===-1&&(t=Rv),se(e)._overflowWeekday&&t===-1&&(t=Pv),se(e).overflow=t),e}var My=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fy=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Iy=/Z|[+-]\d\d(?::?\d\d)?/,gs=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Gi=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ry=/^\/?Date\((-?\d+)/i,Py=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Vy={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function _d(e){var t,n,r=e._i,s=My.exec(r)||Fy.exec(r),i,o,a,u,l=gs.length,c=Gi.length;if(s){for(se(e).iso=!0,t=0,n=l;tUr(o)||e._dayOfYear===0)&&(se(e)._overflowDayOfYear=!0),n=Jr(o,0,e._dayOfYear),e._a[un]=n.getUTCMonth(),e._a[Ht]=n.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=r[t]=s[t];for(;t<7;t++)e._a[t]=r[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[ze]===24&&e._a[Ft]===0&&e._a[ln]===0&&e._a[Pn]===0&&(e._nextDay=!0,e._a[ze]=0),e._d=(e._useUTC?Jr:Zv).apply(null,r),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ze]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==i&&(se(e).weekdayMismatch=!0)}}function Hy(e){var t,n,r,s,i,o,a,u,l;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(i=1,o=4,n=Qn(t.GG,e._a[nt],Xr(Ie(),1,4).year),r=Qn(t.W,1),s=Qn(t.E,1),(s<1||s>7)&&(u=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,l=Xr(Ie(),i,o),n=Qn(t.gg,e._a[nt],l.year),r=Qn(t.w,l.week),t.d!=null?(s=t.d,(s<0||s>6)&&(u=!0)):t.e!=null?(s=t.e+i,(t.e<0||t.e>6)&&(u=!0)):s=i),r<1||r>fn(n,i,o)?se(e)._overflowWeeks=!0:u!=null?se(e)._overflowWeekday=!0:(a=cd(n,r,s,i,o),e._a[nt]=a.year,e._dayOfYear=a.dayOfYear)}N.ISO_8601=function(){};N.RFC_2822=function(){};function La(e){if(e._f===N.ISO_8601){_d(e);return}if(e._f===N.RFC_2822){md(e);return}e._a=[],se(e).empty=!0;var t=""+e._i,n,r,s,i,o,a=t.length,u=0,l,c;for(s=Xf(e._f,e._locale).match(Da)||[],c=s.length,n=0;n0&&se(e).unusedInput.push(o),t=t.slice(t.indexOf(r)+r.length),u+=r.length),ar[i]?(r?se(e).empty=!1:se(e).unusedTokens.push(i),Iv(i,r,e)):e._strict&&!r&&se(e).unusedTokens.push(i);se(e).charsLeftOver=a-u,t.length>0&&se(e).unusedInput.push(t),e._a[ze]<=12&&se(e).bigHour===!0&&e._a[ze]>0&&(se(e).bigHour=void 0),se(e).parsedDateParts=e._a.slice(0),se(e).meridiem=e._meridiem,e._a[ze]=Wy(e._locale,e._a[ze],e._meridiem),l=se(e).era,l!==null&&(e._a[nt]=e._locale.erasConvertYear(l,e._a[nt])),Ua(e),Na(e)}function Wy(e,t,n){var r;return n==null?t:e.meridiemHour!=null?e.meridiemHour(t,n):(e.isPM!=null&&(r=e.isPM(n),r&&t<12&&(t+=12),!r&&t===12&&(t=0)),t)}function zy(e){var t,n,r,s,i,o,a=!1,u=e._f.length;if(u===0){se(e).invalidFormat=!0,e._d=new Date(NaN);return}for(s=0;sthis?this:e:hi()});function yd(e,t){var n,r;if(t.length===1&&Vt(t[0])&&(t=t[0]),!t.length)return Ie();for(n=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function h1(){if(!dt(this._isDSTShifted))return this._isDSTShifted;var e={},t;return xa(e,this),e=gd(e),e._a?(t=e._isUTC?qt(e._a):Ie(e._a),this._isDSTShifted=this.isValid()&&s1(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function p1(){return this.isValid()?!this._isUTC:!1}function _1(){return this.isValid()?this._isUTC:!1}function bd(){return this.isValid()?this._isUTC&&this._offset===0:!1}var m1=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,g1=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ut(e,t){var n=e,r=null,s,i,o;return xs(e)?n={ms:e._milliseconds,d:e._days,M:e._months}:dn(e)||!isNaN(+e)?(n={},t?n[t]=+e:n.milliseconds=+e):(r=m1.exec(e))?(s=r[1]==="-"?-1:1,n={y:0,d:ce(r[Ht])*s,h:ce(r[ze])*s,m:ce(r[Ft])*s,s:ce(r[ln])*s,ms:ce(ko(r[Pn]*1e3))*s}):(r=g1.exec(e))?(s=r[1]==="-"?-1:1,n={y:Cn(r[2],s),M:Cn(r[3],s),w:Cn(r[4],s),d:Cn(r[5],s),h:Cn(r[6],s),m:Cn(r[7],s),s:Cn(r[8],s)}):n==null?n={}:typeof n=="object"&&("from"in n||"to"in n)&&(o=v1(Ie(n.from),Ie(n.to)),n={},n.ms=o.milliseconds,n.M=o.months),i=new bi(n),xs(e)&&ge(e,"_locale")&&(i._locale=e._locale),xs(e)&&ge(e,"_isValid")&&(i._isValid=e._isValid),i}Ut.fn=bi.prototype;Ut.invalid=r1;function Cn(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Bl(e,t){var n={};return n.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function v1(e,t){var n;return e.isValid()&&t.isValid()?(t=$a(t,e),e.isBefore(t)?n=Bl(e,t):(n=Bl(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Od(e,t){return function(n,r){var s,i;return r!==null&&!isNaN(+r)&&(Jf(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),s=Ut(n,r),Sd(this,s,e),this}}function Sd(e,t,n,r){var s=t._milliseconds,i=ko(t._days),o=ko(t._months);e.isValid()&&(r=r??!0,o&&ad(e,Zr(e,"Month")+o*n),i&&sd(e,"Date",Zr(e,"Date")+i*n),s&&e._d.setTime(e._d.valueOf()+s*n),r&&N.updateOffset(e,i||o))}var y1=Od(1,"add"),E1=Od(-1,"subtract");function wd(e){return typeof e=="string"||e instanceof String}function b1(e){return Nt(e)||is(e)||wd(e)||dn(e)||S1(e)||O1(e)||e===null||e===void 0}function O1(e){var t=Ln(e)&&!Sa(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],s,i,o=r.length;for(s=0;sn.valueOf():n.valueOf()9999?ws(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Zt(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",ws(n,"Z")):ws(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function N1(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",n,r,s,i;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),n="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",s="-MM-DD[T]HH:mm:ss.SSS",i=t+'[")]',this.format(n+r+s+i)}function U1(e){e||(e=this.isUtc()?N.defaultFormatUtc:N.defaultFormat);var t=ws(this,e);return this.localeData().postformat(t)}function L1(e,t){return this.isValid()&&(Nt(e)&&e.isValid()||Ie(e).isValid())?Ut({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Y1(e){return this.from(Ie(),e)}function $1(e,t){return this.isValid()&&(Nt(e)&&e.isValid()||Ie(e).isValid())?Ut({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function j1(e){return this.to(Ie(),e)}function xd(e){var t;return e===void 0?this._locale._abbr:(t=pn(e),t!=null&&(this._locale=t),this)}var Td=At("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function Dd(){return this._locale}var Ws=1e3,ur=60*Ws,zs=60*ur,Ad=(365*400+97)*24*zs;function lr(e,t){return(e%t+t)%t}function kd(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-Ad:new Date(e,t,n).valueOf()}function Cd(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-Ad:Date.UTC(e,t,n)}function B1(e){var t,n;if(e=kt(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?Cd:kd,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=lr(t+(this._isUTC?0:this.utcOffset()*ur),zs);break;case"minute":t=this._d.valueOf(),t-=lr(t,ur);break;case"second":t=this._d.valueOf(),t-=lr(t,Ws);break}return this._d.setTime(t),N.updateOffset(this,!0),this}function H1(e){var t,n;if(e=kt(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?Cd:kd,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=zs-lr(t+(this._isUTC?0:this.utcOffset()*ur),zs)-1;break;case"minute":t=this._d.valueOf(),t+=ur-lr(t,ur)-1;break;case"second":t=this._d.valueOf(),t+=Ws-lr(t,Ws)-1;break}return this._d.setTime(t),N.updateOffset(this,!0),this}function W1(){return this._d.valueOf()-(this._offset||0)*6e4}function z1(){return Math.floor(this.valueOf()/1e3)}function K1(){return new Date(this.valueOf())}function G1(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function q1(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Z1(){return this.isValid()?this.toISOString():null}function J1(){return wa(this)}function X1(){return En({},se(this))}function Q1(){return se(this).overflow}function eE(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}K("N",0,0,"eraAbbr");K("NN",0,0,"eraAbbr");K("NNN",0,0,"eraAbbr");K("NNNN",0,0,"eraName");K("NNNNN",0,0,"eraNarrow");K("y",["y",1],"yo","eraYear");K("y",["yy",2],0,"eraYear");K("y",["yyy",3],0,"eraYear");K("y",["yyyy",4],0,"eraYear");Y("N",ja);Y("NN",ja);Y("NNN",ja);Y("NNNN",fE);Y("NNNNN",dE);xe(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,r){var s=n._locale.erasParse(e,r,n._strict);s?se(n).era=s:se(n).invalidEra=e});Y("y",mr);Y("yy",mr);Y("yyy",mr);Y("yyyy",mr);Y("yo",hE);xe(["y","yy","yyy","yyyy"],nt);xe(["yo"],function(e,t,n,r){var s;n._locale._eraYearOrdinalRegex&&(s=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[nt]=n._locale.eraYearOrdinalParse(e,s):t[nt]=parseInt(e,10)});function tE(e,t){var n,r,s,i=this._eras||pn("en")._eras;for(n=0,r=i.length;n=0)return i[r]}function rE(e,t){var n=e.since<=e.until?1:-1;return t===void 0?N(e.since).year():N(e.since).year()+(t-e.offset)*n}function sE(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;ei&&(t=i),EE.call(this,e,t,n,r,s))}function EE(e,t,n,r,s){var i=cd(e,t,n,r,s),o=Jr(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}K("Q",0,"Qo","quarter");Y("Q",Qf);xe("Q",function(e,t){t[un]=(ce(e)-1)*3});function bE(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}K("D",["DD",2],"Do","date");Y("D",Re,gr);Y("DD",Re,bt);Y("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});xe(["D","DD"],Ht);xe("Do",function(e,t){t[Ht]=ce(e.match(Re)[0])});var Fd=vr("Date",!0);K("DDD",["DDDD",3],"DDDo","dayOfYear");Y("DDD",_i);Y("DDDD",ed);xe(["DDD","DDDD"],function(e,t,n){n._dayOfYear=ce(e)});function OE(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}K("m",["mm",2],0,"minute");Y("m",Re,Ma);Y("mm",Re,bt);xe(["m","mm"],Ft);var SE=vr("Minutes",!1);K("s",["ss",2],0,"second");Y("s",Re,Ma);Y("ss",Re,bt);xe(["s","ss"],ln);var wE=vr("Seconds",!1);K("S",0,0,function(){return~~(this.millisecond()/100)});K(0,["SS",2],0,function(){return~~(this.millisecond()/10)});K(0,["SSS",3],0,"millisecond");K(0,["SSSS",4],0,function(){return this.millisecond()*10});K(0,["SSSSS",5],0,function(){return this.millisecond()*100});K(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});K(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});K(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});K(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});Y("S",_i,Qf);Y("SS",_i,bt);Y("SSS",_i,ed);var bn,Id;for(bn="SSSS";bn.length<=9;bn+="S")Y(bn,mr);function xE(e,t){t[Pn]=ce(("0."+e)*1e3)}for(bn="S";bn.length<=9;bn+="S")xe(bn,xE);Id=vr("Milliseconds",!1);K("z",0,0,"zoneAbbr");K("zz",0,0,"zoneName");function TE(){return this._isUTC?"UTC":""}function DE(){return this._isUTC?"Coordinated Universal Time":""}var k=os.prototype;k.add=y1;k.calendar=T1;k.clone=D1;k.diff=R1;k.endOf=H1;k.format=U1;k.from=L1;k.fromNow=Y1;k.to=$1;k.toNow=j1;k.get=Nv;k.invalidAt=Q1;k.isAfter=A1;k.isBefore=k1;k.isBetween=C1;k.isSame=M1;k.isSameOrAfter=F1;k.isSameOrBefore=I1;k.isValid=J1;k.lang=Td;k.locale=xd;k.localeData=Dd;k.max=Jy;k.min=Zy;k.parsingFlags=X1;k.set=Uv;k.startOf=B1;k.subtract=E1;k.toArray=G1;k.toObject=q1;k.toDate=K1;k.toISOString=V1;k.inspect=N1;typeof Symbol<"u"&&Symbol.for!=null&&(k[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});k.toJSON=Z1;k.toString=P1;k.unix=z1;k.valueOf=W1;k.creationData=eE;k.eraName=sE;k.eraNarrow=iE;k.eraAbbr=oE;k.eraYear=aE;k.year=rd;k.isLeapYear=Vv;k.weekYear=pE;k.isoWeekYear=_E;k.quarter=k.quarters=bE;k.month=ud;k.daysInMonth=Kv;k.week=k.weeks=ty;k.isoWeek=k.isoWeeks=ny;k.weeksInYear=vE;k.weeksInWeekYear=yE;k.isoWeeksInYear=mE;k.isoWeeksInISOWeekYear=gE;k.date=Fd;k.day=k.days=_y;k.weekday=my;k.isoWeekday=gy;k.dayOfYear=OE;k.hour=k.hours=wy;k.minute=k.minutes=SE;k.second=k.seconds=wE;k.millisecond=k.milliseconds=Id;k.utcOffset=o1;k.utc=u1;k.local=l1;k.parseZone=c1;k.hasAlignedHourOffset=f1;k.isDST=d1;k.isLocal=p1;k.isUtcOffset=_1;k.isUtc=bd;k.isUTC=bd;k.zoneAbbr=TE;k.zoneName=DE;k.dates=At("dates accessor is deprecated. Use date instead.",Fd);k.months=At("months accessor is deprecated. Use month instead",ud);k.years=At("years accessor is deprecated. Use year instead",rd);k.zone=At("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",a1);k.isDSTShifted=At("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",h1);function AE(e){return Ie(e*1e3)}function kE(){return Ie.apply(null,arguments).parseZone()}function Rd(e){return e}var ve=Ta.prototype;ve.calendar=pv;ve.longDateFormat=vv;ve.invalidDate=Ev;ve.ordinal=Sv;ve.preparse=Rd;ve.postformat=Rd;ve.relativeTime=xv;ve.pastFuture=Tv;ve.set=dv;ve.eras=tE;ve.erasParse=nE;ve.erasConvertYear=rE;ve.erasAbbrRegex=lE;ve.erasNameRegex=uE;ve.erasNarrowRegex=cE;ve.months=Bv;ve.monthsShort=Hv;ve.monthsParse=zv;ve.monthsRegex=qv;ve.monthsShortRegex=Gv;ve.week=Jv;ve.firstDayOfYear=ey;ve.firstDayOfWeek=Qv;ve.weekdays=cy;ve.weekdaysMin=dy;ve.weekdaysShort=fy;ve.weekdaysParse=py;ve.weekdaysRegex=vy;ve.weekdaysShortRegex=yy;ve.weekdaysMinRegex=Ey;ve.isPM=Oy;ve.meridiem=xy;function Ks(e,t,n,r){var s=pn(),i=qt().set(r,t);return s[n](i,e)}function Pd(e,t,n){if(dn(e)&&(t=e,e=void 0),e=e||"",t!=null)return Ks(e,t,n,"month");var r,s=[];for(r=0;r<12;r++)s[r]=Ks(e,r,n,"month");return s}function Ha(e,t,n,r){typeof e=="boolean"?(dn(t)&&(n=t,t=void 0),t=t||""):(t=e,n=t,e=!1,dn(t)&&(n=t,t=void 0),t=t||"");var s=pn(),i=e?s._week.dow:0,o,a=[];if(n!=null)return Ks(t,(n+i)%7,r,"day");for(o=0;o<7;o++)a[o]=Ks(t,(o+i)%7,r,"day");return a}function CE(e,t){return Pd(e,t,"months")}function ME(e,t){return Pd(e,t,"monthsShort")}function FE(e,t,n){return Ha(e,t,n,"weekdays")}function IE(e,t,n){return Ha(e,t,n,"weekdaysShort")}function RE(e,t,n){return Ha(e,t,n,"weekdaysMin")}wn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=ce(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}});N.lang=At("moment.lang is deprecated. Use moment.locale instead.",wn);N.langData=At("moment.langData is deprecated. Use moment.localeData instead.",pn);var en=Math.abs;function PE(){var e=this._data;return this._milliseconds=en(this._milliseconds),this._days=en(this._days),this._months=en(this._months),e.milliseconds=en(e.milliseconds),e.seconds=en(e.seconds),e.minutes=en(e.minutes),e.hours=en(e.hours),e.months=en(e.months),e.years=en(e.years),this}function Vd(e,t,n,r){var s=Ut(t,n);return e._milliseconds+=r*s._milliseconds,e._days+=r*s._days,e._months+=r*s._months,e._bubble()}function VE(e,t){return Vd(this,e,t,1)}function NE(e,t){return Vd(this,e,t,-1)}function Hl(e){return e<0?Math.floor(e):Math.ceil(e)}function UE(){var e=this._milliseconds,t=this._days,n=this._months,r=this._data,s,i,o,a,u;return e>=0&&t>=0&&n>=0||e<=0&&t<=0&&n<=0||(e+=Hl(Mo(n)+t)*864e5,t=0,n=0),r.milliseconds=e%1e3,s=xt(e/1e3),r.seconds=s%60,i=xt(s/60),r.minutes=i%60,o=xt(i/60),r.hours=o%24,t+=xt(o/24),u=xt(Nd(t)),n+=u,t-=Hl(Mo(u)),a=xt(n/12),n%=12,r.days=t,r.months=n,r.years=a,this}function Nd(e){return e*4800/146097}function Mo(e){return e*146097/4800}function LE(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if(e=kt(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+r/864e5,n=this._months+Nd(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Mo(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return t*24+r/36e5;case"minute":return t*1440+r/6e4;case"second":return t*86400+r/1e3;case"millisecond":return Math.floor(t*864e5)+r;default:throw new Error("Unknown unit "+e)}}function _n(e){return function(){return this.as(e)}}var Ud=_n("ms"),YE=_n("s"),$E=_n("m"),jE=_n("h"),BE=_n("d"),HE=_n("w"),WE=_n("M"),zE=_n("Q"),KE=_n("y"),GE=Ud;function qE(){return Ut(this)}function ZE(e){return e=kt(e),this.isValid()?this[e+"s"]():NaN}function Kn(e){return function(){return this.isValid()?this._data[e]:NaN}}var JE=Kn("milliseconds"),XE=Kn("seconds"),QE=Kn("minutes"),eb=Kn("hours"),tb=Kn("days"),nb=Kn("months"),rb=Kn("years");function sb(){return xt(this.days()/7)}var rn=Math.round,nr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ib(e,t,n,r,s){return s.relativeTime(t||1,!!n,e,r)}function ob(e,t,n,r){var s=Ut(e).abs(),i=rn(s.as("s")),o=rn(s.as("m")),a=rn(s.as("h")),u=rn(s.as("d")),l=rn(s.as("M")),c=rn(s.as("w")),f=rn(s.as("y")),g=i<=n.ss&&["s",i]||i0,g[4]=r,ib.apply(null,g)}function ab(e){return e===void 0?rn:typeof e=="function"?(rn=e,!0):!1}function ub(e,t){return nr[e]===void 0?!1:t===void 0?nr[e]:(nr[e]=t,e==="s"&&(nr.ss=t-1),!0)}function lb(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,r=nr,s,i;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(n=e),typeof t=="object"&&(r=Object.assign({},nr,t),t.s!=null&&t.ss==null&&(r.ss=t.s-1)),s=this.localeData(),i=ob(this,!n,r,s),n&&(i=s.pastFuture(+this,i)),s.postformat(i)}var qi=Math.abs;function Jn(e){return(e>0)-(e<0)||+e}function Si(){if(!this.isValid())return this.localeData().invalidDate();var e=qi(this._milliseconds)/1e3,t=qi(this._days),n=qi(this._months),r,s,i,o,a=this.asSeconds(),u,l,c,f;return a?(r=xt(e/60),s=xt(r/60),e%=60,r%=60,i=xt(n/12),n%=12,o=e?e.toFixed(3).replace(/\.?0+$/,""):"",u=a<0?"-":"",l=Jn(this._months)!==Jn(a)?"-":"",c=Jn(this._days)!==Jn(a)?"-":"",f=Jn(this._milliseconds)!==Jn(a)?"-":"",u+"P"+(i?l+i+"Y":"")+(n?l+n+"M":"")+(t?c+t+"D":"")+(s||r||e?"T":"")+(s?f+s+"H":"")+(r?f+r+"M":"")+(e?f+o+"S":"")):"P0D"}var he=bi.prototype;he.isValid=n1;he.abs=PE;he.add=VE;he.subtract=NE;he.as=LE;he.asMilliseconds=Ud;he.asSeconds=YE;he.asMinutes=$E;he.asHours=jE;he.asDays=BE;he.asWeeks=HE;he.asMonths=WE;he.asQuarters=zE;he.asYears=KE;he.valueOf=GE;he._bubble=UE;he.clone=qE;he.get=ZE;he.milliseconds=JE;he.seconds=XE;he.minutes=QE;he.hours=eb;he.days=tb;he.weeks=sb;he.months=nb;he.years=rb;he.humanize=lb;he.toISOString=Si;he.toString=Si;he.toJSON=Si;he.locale=xd;he.localeData=Dd;he.toIsoString=At("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Si);he.lang=Td;K("X",0,0,"unix");K("x",0,0,"valueOf");Y("x",gi);Y("X",Cv);xe("X",function(e,t,n){n._d=new Date(parseFloat(e)*1e3)});xe("x",function(e,t,n){n._d=new Date(ce(e))});//! moment.js -N.version="2.30.1";cv(Ie);N.fn=k;N.min=Xy;N.max=Qy;N.now=e1;N.utc=qt;N.unix=AE;N.months=CE;N.isDate=is;N.locale=wn;N.invalid=hi;N.duration=Ut;N.isMoment=Nt;N.weekdays=FE;N.parseZone=kE;N.localeData=pn;N.isDuration=xs;N.monthsShort=ME;N.weekdaysMin=RE;N.defineLocale=Va;N.updateLocale=ky;N.locales=Cy;N.weekdaysShort=IE;N.normalizeUnits=kt;N.relativeTimeRounding=ab;N.relativeTimeThreshold=ub;N.calendarFormat=x1;N.prototype=k;N.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const cb={class:"dialog"},fb={class:"dialog__body"},db={class:"dialog__form-group"},hb={class:"dialog__form-validation"},pb={class:"dialog__form-group"},_b={class:"dialog__form-validation"},mb={class:"dialog__form-group"},gb={class:"dialog__form-group"},vb={class:"dialog__form-group dialog__form-group--radio"},yb={class:"dialog__form-radio"},Eb={class:"dialog__form-radio"},bb={class:"dialog__form-group"},Ob={__name:"Identity",setup(e){const t=r=>{fetch("http://esx_identity/register",{method:"POST",body:JSON.stringify({firstname:r.firstname,lastname:r.lastname,dateofbirth:N(r.dob).format("DD/MM/YYYY"),sex:r.gender,height:r.height})})},n=zf({firstname:Os().required("Firstname is required").min(3,"Firstname must be at least 3 characters"),lastname:Os().required("Lastname is required").min(3,"Lastname must be at least 3 characters"),dob:Oa().required("Date of Birth is required").min(new Date("1900-01-01"),"Date is too early").max(N().subtract(1,"years").toDate(),"You need to be atleast 1 year old"),gender:Os().required("Gender is required"),height:jf().required("Height is required").min(120,"Minimum height is 120cm").max(220,"Maximum height is 220cm").typeError("Amount must be a number")});return(r,s)=>(Uc(),D0("div",cb,[s[9]||(s[9]=we("div",{class:"dialog__header"},[we("h1",null,[Tr("CHARACTER "),we("span",null,"IDENTITY")])],-1)),we("div",fb,[s[8]||(s[8]=we("p",{class:"dialog__body-hint"},"Start by creating your identity",-1)),Ne(re(hg),{class:"dialog__body-form",id:"register",action:"#",novalidate:"",onSubmit:t,"validation-schema":re(n)},{default:_c(()=>[we("div",db,[s[0]||(s[0]=we("label",{for:"firstname"},"Firstname",-1)),we("div",hb,[Ne(re(qn),{id:"firstname",type:"text",name:"firstname",placeholder:"Firstname",validateOnInput:""})]),Ne(re(Or),{name:"firstname",class:"dialog__form-message dialog__form-message--error"})]),we("div",pb,[s[1]||(s[1]=we("label",{for:"lastname"},"Lastname",-1)),we("div",_b,[Ne(re(qn),{id:"lastname",type:"text",name:"lastname",placeholder:"Lastname",validateOnInput:""})]),Ne(re(Or),{name:"lastname",class:"dialog__form-message dialog__form-message--error"})]),we("div",mb,[s[2]||(s[2]=we("label",{for:"dob"},"Date of birth",-1)),Ne(re(qn),{id:"dob",type:"date",name:"dob",placeholder:"dd/mm/yyyy",validateOnInput:""}),Ne(re(Or),{name:"dob",class:"dialog__form-message dialog__form-message--error"})]),we("div",gb,[s[5]||(s[5]=we("label",{for:"gender"},"Gender",-1)),we("div",vb,[we("div",yb,[Ne(re(qn),{type:"radio",id:"male",value:"m",name:"gender",validateOnInput:""}),s[3]||(s[3]=we("label",{for:"male"},[we("i",{class:"fas fa-mars"}),Tr("Male ")],-1))]),we("div",Eb,[Ne(re(qn),{type:"radio",id:"female",value:"f",name:"gender",validateOnInput:""}),s[4]||(s[4]=we("label",{for:"female"},[we("i",{class:"fas fa-venus"}),Tr("Female ")],-1))])]),Ne(re(Or),{name:"gender",class:"dialog__form-message dialog__form-message--error"})]),we("div",bb,[s[6]||(s[6]=we("label",{for:"height"},"Height",-1)),Ne(re(qn),{id:"height",type:"text",name:"height",placeholder:"175",validateOnInput:""}),Ne(re(Or),{name:"height",class:"dialog__form-message dialog__form-message--error"})]),s[7]||(s[7]=we("button",{class:"dialog__form-submit",id:"submit",type:"submit"},[we("i",{class:"fas fa-user-plus"}),Tr("CREATE ")],-1))]),_:1},8,["validation-schema"])])]))}},Sb={__name:"App",setup(e){return ti(()=>{fetch("http://esx_identity/ready",{method:"POST",body:JSON.stringify({})}),window.addEventListener("message",t=>{t.data.type==="enableui"&&document.body.classList[t.data.enable?"remove":"add"]("none")})}),(t,n)=>(Uc(),A0(Ob))}};cp(Sb).mount("#app")});export default wb(); diff --git a/[core]/esx_identity/dist/assets/index-CBKwBtku.css b/[core]/esx_identity/dist/assets/index-CBKwBtku.css deleted file mode 100644 index 1ad7fe3fb..000000000 --- a/[core]/esx_identity/dist/assets/index-CBKwBtku.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";body{font-family:sans-serif;overflow:hidden;background-color:transparent}.none{display:none}.dialog{width:477px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#080808;border-radius:8px;border:none;color:#fff;font-family:Poppins,sans-serif}.dialog__header{background-color:#040404;border-top-left-radius:8px;border-top-right-radius:8px;padding:20px;text-align:center}.dialog__header h1{font-weight:700;margin-bottom:0;font-size:30px}.dialog__header span{color:#fd9800}.dialog__body{padding-block:20px;padding-inline:65px}.dialog__body-hint{text-align:center;margin-bottom:20px}.dialog__body-form{display:flex;flex-direction:column;gap:35px;font-weight:600;font-size:15px}.dialog__form-submit{border:none;background-color:#fd9800;color:#fff;font-size:18px;font-weight:700;border-radius:4px;padding-block:5px}.dialog__form-submit i{margin-right:5px}.dialog__form-group{display:flex;align-items:center;justify-content:space-between;gap:30px;background-color:#040404;position:relative}.dialog__form-group--radio{gap:0}.dialog__form-group label{flex-grow:1;flex-shrink:1;padding-inline:20px}.dialog__form-group input{background-color:transparent;border:none;height:30px;width:180px;flex-shrink:0;color:#fff}.dialog__form-group input:focus{background-color:#0f0f0fe6;border:none;border-radius:5px;color:#fff;outline:none;box-shadow:none}.dialog__form-validation{position:relative}.dialog__form-validation i{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.dialog__form-radio{display:flex;align-items:center}.dialog__form-radio input{display:none}.dialog__form-radio label{display:flex;align-items:center;gap:10px;cursor:pointer}.dialog__form-radio input+label{height:30px;display:flex;align-items:center}.dialog__form-radio input:checked+label{color:#30a1fd;height:30px}.dialog__form-radio input:not(:checked)+label{color:#242424;height:30px}.dialog__form-message{position:absolute;top:35px;right:0;font-size:9px}.dialog__form-message--error{color:#733838}#male:checked+label{color:#30a1fd}#female:checked+label{color:#ff69b4}::placeholder{color:#242424;font-weight:600}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none} diff --git a/[core]/esx_identity/dist/index.html b/[core]/esx_identity/dist/index.html deleted file mode 100644 index 0bd855e17..000000000 --- a/[core]/esx_identity/dist/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - Vite + Vue - - - - - - - -
- - - \ No newline at end of file diff --git a/[core]/esx_identity/dist/vite.svg b/[core]/esx_identity/dist/vite.svg deleted file mode 100644 index e7b8dfb1b..000000000 --- a/[core]/esx_identity/dist/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/[core]/esx_identity/fxmanifest.lua b/[core]/esx_identity/fxmanifest.lua index 4860f3155..872696e57 100644 --- a/[core]/esx_identity/fxmanifest.lua +++ b/[core]/esx_identity/fxmanifest.lua @@ -24,10 +24,10 @@ client_scripts { } files ({ - 'dist/assets/**', - 'dist/**', + 'web/dist/assets/**', + 'web/dist/**', }) -ui_page 'dist/index.html' +ui_page 'web/dist/index.html' dependency 'es_extended' diff --git a/[core]/esx_identity/index.html b/[core]/esx_identity/index.html deleted file mode 100644 index 1159b9eb4..000000000 --- a/[core]/esx_identity/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - Vite + Vue - - - - - -
- - - - \ No newline at end of file diff --git a/[core]/esx_identity/package-lock.json b/[core]/esx_identity/package-lock.json deleted file mode 100644 index 98ec28e7d..000000000 --- a/[core]/esx_identity/package-lock.json +++ /dev/null @@ -1,1186 +0,0 @@ -{ - "name": "esx_identity_new", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "esx_identity_new", - "version": "0.0.0", - "dependencies": { - "moment": "^2.30.1", - "vee-validate": "^4.14.3", - "vue": "^3.5.10", - "yup": "^1.4.0" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^5.1.4", - "vite": "^5.4.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", - "dependencies": { - "@babel/types": "^7.25.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", - "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz", - "integrity": "sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==", - "dev": true, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", - "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.12", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", - "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", - "dependencies": { - "@vue/compiler-core": "3.5.12", - "@vue/shared": "3.5.12" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", - "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.12", - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.47", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", - "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", - "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/shared": "3.5.12" - } - }, - "node_modules/@vue/devtools-api": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.5.2.tgz", - "integrity": "sha512-VxPbAQxJrYSIkoGVvQ2oOoKW8u4CMpvRLySTxhoJA38z8bQEGy9GO33eoRY/DulJbSFRfjZFNvH+dh8B4qpesQ==", - "dependencies": { - "@vue/devtools-kit": "^7.5.2" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.5.2.tgz", - "integrity": "sha512-0leUOE2HBfl8sHf9ePKzxqnCFskkU22tWWqd9OfeSlslAKE30/TViYvWcF4vgQmPlJnAAdHU0WfW5dYlCeOiuw==", - "dependencies": { - "@vue/devtools-shared": "^7.5.2", - "birpc": "^0.2.19", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.1" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.5.2.tgz", - "integrity": "sha512-+zmcixnD6TAo+zwm30YuwZckhL9iIi4u+gFwbq9C8zpm3SMndTlEYZtNhAHUhOXB+bCkzyunxw80KQ/T0trF4w==", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz", - "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", - "dependencies": { - "@vue/shared": "3.5.12" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz", - "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", - "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/shared": "3.5.12" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz", - "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", - "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/runtime-core": "3.5.12", - "@vue/shared": "3.5.12", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz", - "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", - "dependencies": { - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12" - }, - "peerDependencies": { - "vue": "3.5.12" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", - "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==" - }, - "node_modules/birpc": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", - "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/property-expr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", - "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" - }, - "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/superjson": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", - "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tiny-case": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", - "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" - }, - "node_modules/type-fest": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", - "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vee-validate": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.14.3.tgz", - "integrity": "sha512-o4yABwgmCxyNz63hAFiDuLtK4qSrJ3+Ri5kbbJ9RQecXpaMp6NzJUEGE3LOcScakkSmtLDzvliQ2yBdFyPWDIw==", - "dependencies": { - "@vue/devtools-api": "^7.5.2", - "type-fest": "^4.8.3" - }, - "peerDependencies": { - "vue": "^3.4.26" - } - }, - "node_modules/vite": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", - "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", - "dev": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz", - "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", - "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-sfc": "3.5.12", - "@vue/runtime-dom": "3.5.12", - "@vue/server-renderer": "3.5.12", - "@vue/shared": "3.5.12" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/yup": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz", - "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==", - "dependencies": { - "property-expr": "^2.0.5", - "tiny-case": "^1.0.3", - "toposort": "^2.0.2", - "type-fest": "^2.19.0" - } - }, - "node_modules/yup/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/[core]/esx_identity/package.json b/[core]/esx_identity/package.json deleted file mode 100644 index c40a19182..000000000 --- a/[core]/esx_identity/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "esx_identity_new", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "moment": "^2.30.1", - "vee-validate": "^4.14.3", - "vue": "^3.5.10", - "yup": "^1.4.0" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^5.1.4", - "vite": "^5.4.8" - } -} diff --git a/[core]/esx_identity/public/vite.svg b/[core]/esx_identity/public/vite.svg deleted file mode 100644 index e7b8dfb1b..000000000 --- a/[core]/esx_identity/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/[core]/esx_identity/src/App.vue b/[core]/esx_identity/src/App.vue deleted file mode 100644 index c8dc6797a..000000000 --- a/[core]/esx_identity/src/App.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/[core]/esx_identity/src/assets/vue.svg b/[core]/esx_identity/src/assets/vue.svg deleted file mode 100644 index 770e9d333..000000000 --- a/[core]/esx_identity/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/[core]/esx_identity/src/components/Identity.vue b/[core]/esx_identity/src/components/Identity.vue deleted file mode 100644 index d51739ba7..000000000 --- a/[core]/esx_identity/src/components/Identity.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - - diff --git a/[core]/esx_identity/src/main.js b/[core]/esx_identity/src/main.js deleted file mode 100644 index 5a6e24688..000000000 --- a/[core]/esx_identity/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' - -createApp(App).mount('#app') \ No newline at end of file diff --git a/[core]/esx_identity/src/style.css b/[core]/esx_identity/src/style.css deleted file mode 100644 index 17023ffc0..000000000 --- a/[core]/esx_identity/src/style.css +++ /dev/null @@ -1,195 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); -/* body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} */ - -/* REMOVE LATER, ADD SCSS */ - -body { - font-family: sans-serif; - overflow: hidden; - background-color: transparent; -} - -.none { - display: none; -} - -.dialog { - width: 477px; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background-color: #080808; - border-radius: 8px; - border: none; - color: #ffffff; - font-family: "Poppins", sans-serif; -} - -.dialog__header { - background-color: #040404; - border-top-left-radius: 8px; - border-top-right-radius: 8px; - padding: 20px; - text-align: center; -} - -.dialog__header h1 { - font-weight: 700; - margin-bottom: 0; - font-size: 30px; -} - -.dialog__header span { - color: #FD9800; -} - -.dialog__body { - padding-block: 20px; - padding-inline: 65px; -} - -.dialog__body-hint { - text-align: center; - margin-bottom: 20px; -} - -.dialog__body-form { - display: flex; - flex-direction: column; - gap: 35px; - font-weight: 600; - font-size: 15px; -} - -.dialog__form-submit { - border:none; - background-color: #FD9800; - color: #fff; - font-size: 18px; - font-weight:bold; - border-radius: 4px; - padding-block: 5px; -} - -.dialog__form-submit i { - margin-right: 5px; -} - -.dialog__form-group { - display: flex; - align-items: center; - justify-content: space-between; - gap: 30px; - background-color: #040404; - position: relative; -} - -.dialog__form-group--radio { - gap: 0; -} - -.dialog__form-group label { - flex-grow: 1; /* Label will expand to fill available space */ - flex-shrink: 1; /* Allows the label to shrink if necessary */ - padding-inline: 20px; /* Horizontal padding */ -} - -.dialog__form-group input { - background-color: transparent; - border: none; - height: 30px; - width: 180px; /* Fixed width for input */ - flex-shrink: 0; /* Prevent input from shrinking */ - color: white; -} - - -.dialog__form-group input:focus { - background-color: rgba(15, 15, 15, 0.9); - border: none; - border-radius: 5px; - color: #ffffff; - outline: none; - box-shadow: none; -} - -.dialog__form-validation { - position: relative; -} - -.dialog__form-validation i { - position: absolute; - right: 10px; - top: 50%; - transform: translate(0, -50%); -} - -.dialog__form-radio { - display: flex; - align-items: center; -} - -.dialog__form-radio input { - display: none; -} - -.dialog__form-radio label { - display: flex; - align-items: center; - gap: 10px; - cursor: pointer; -} - -.dialog__form-radio input + label { - height: 30px; - display: flex; - align-items: center; -} - -.dialog__form-radio input:checked + label { - color: #30A1FD; - height: 30px; -} - -.dialog__form-radio input:not(:checked) + label { - color: #242424; - height: 30px; -} - -.dialog__form-message { - position: absolute; - top: 35px; - right: 0; - font-size: 9px; -} - -.dialog__form-message--error { - color: #733838; -} - -#male:checked + label { - color: #30A1FD; /* Blue color */ -} - -/* For the female radio button */ -#female:checked + label { - color: #FF69B4; /* Pink color */ -} - -::placeholder { - color: #242424; - font-weight: 600; -} - -input[type="date"]::-webkit-inner-spin-button, -input[type="date"]::-webkit-calendar-picker-indicator { - display: none; - -webkit-appearance: none; -} \ No newline at end of file diff --git a/[core]/esx_identity/vite.config.js b/[core]/esx_identity/vite.config.js deleted file mode 100644 index 4b141472e..000000000 --- a/[core]/esx_identity/vite.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -// https://vitejs.dev/config/ -export default defineConfig({ - base: './', - plugins: [vue()], -}) From 2b9b4067a77712372913ccbe22119e8bb4c4224b Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:56:03 +0100 Subject: [PATCH 043/161] fix(es_extended/locales/de): Fix German received_weapon_noweapon --- [core]/es_extended/locales/de.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index 6490f8e71..da224c3a4 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -21,7 +21,7 @@ Locales["de"] = { ["received_weapon_ammo"] = "Du bekommst ~o~%sx %s für deine %s von %s", ["received_weapon_withammo"] = "Du bekommst %s mit ~o~%sx %s von %s", ["received_weapon_hasalready"] = "%s hat versucht dir eine %s zu geben, jedoch hast du diese Waffe bereits!", - ["received_weapon_noweapon"] = "%s hat versucht dir Munition für eine %s zu geben, jedoch hast du diese Waffe bereits!", + ["received_weapon_noweapon"] = "%s hat versucht dir Munition für eine %s zu geben, jedoch hast du diese Waffe nicht!", ["gave_account_money"] = "Du gibst %s€ (%s) an %s", ["received_account_money"] = "Du bekommst %s€ (%s) von %s", ["amount_invalid"] = "Ungültige Anzahl", From 0576b209670780b34d5b0483bedda630b69515ea Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:28:45 +0100 Subject: [PATCH 044/161] validate serialized function references --- [core]/cron/server/main.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/[core]/cron/server/main.lua b/[core]/cron/server/main.lua index fb6cec253..51da085df 100644 --- a/[core]/cron/server/main.lua +++ b/[core]/cron/server/main.lua @@ -1,7 +1,7 @@ ---@class CronJob ---@field h number ---@field m number ----@field cb function +---@field cb function|table ---@type CronJob[] local cronJobs = {} @@ -10,7 +10,7 @@ local lastTimestamp = false ---@param h number ---@param m number ----@param cb function +---@param cb function|table function RunAt(h, m, cb) cronJobs[#cronJobs + 1] = { h = h, @@ -60,11 +60,16 @@ Tick() ---@param h number ---@param m number ----@param cb function +---@param cb function|table AddEventHandler("cron:runAt", function(h, m, cb) - assert(type(h) == "number", ("Expected number for h, got %s"):format(type(h))) - assert(type(m) == "number", ("Expected number for m, got %s"):format(type(m))) - assert(type(cb) == "function", ("Expected function for cb, got %s"):format(type(cb))) + local invokingResource = GetInvokingResource() or "Unknown" + local typeH = type(h) + local typeM = type(m) + local typeCb = type(cb) + + assert(typeH == "number", ("Expected number for h, got %s. Invoking Resource: '%s'"):format(typeH, invokingResource)) + assert(typeM == "number", ("Expected number for m, got %s. Invoking Resource: '%s'"):format(typeM, invokingResource)) + assert(typeCb == "function" or (typeCb == "table" and type(getmetatable(cb)?.__call) == "function"), ("Expected function for cb, got %s. Invoking Resource: '%s'"):format(typeCb, invokingResource)) RunAt(h, m, cb) end) From 3922e190e0eca83e8b97c09cc31d243d851de6a8 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sat, 16 Nov 2024 01:00:13 +0000 Subject: [PATCH 045/161] fix(skinchanger): wrong operator --- [core]/skinchanger/client/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/skinchanger/client/main.lua b/[core]/skinchanger/client/main.lua index 85620d81b..133d8a220 100644 --- a/[core]/skinchanger/client/main.lua +++ b/[core]/skinchanger/client/main.lua @@ -104,7 +104,7 @@ function SkinChanger:ValidClothes(key) ["blemishes_2"] = true, ["blemishes_3"] = true, ["blush_1"] = true, ["blush_2"] = true, ["blush_3"] = true, ["complexion_1"] = true, ["complexion_2"] = true, ["sun_1"] = true, ["sun_2"] = true, ["moles_1"] = true, ["moles_2"] = true, ["chest_1"] = true, ["chest_2"] = true, ["chest_3"] = true, ["bodyb_1"] = true, ["bodyb_2"] = true, ["bodyb_3"] = true, ["bodyb_4"] = true} - return keys[key] ~= nil + return keys[key] == nil end local function Normalise(weight, divison) From e0ccc667850f401030cae6ea6e549006f6fbf0f9 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 02:04:16 +0100 Subject: [PATCH 046/161] fix(es_extended/client/modules/actions): correctly update ped reference in TrackPed --- [core]/es_extended/client/modules/actions.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 3a81e129e..23189d98b 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -45,9 +45,9 @@ function Actions:TrackPed() if playerPed ~= newPed then ESX.PlayerData.ped = newPed - ESX.SetPlayerData("ped", playerPed) + ESX.SetPlayerData("ped", newPed) - TriggerEvent("esx:playerPedChanged", playerPed) + TriggerEvent("esx:playerPedChanged", newPed) end end From b10c599dc9bf3ee67619fb2a04dd92352b3a34d2 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Nov 2024 13:02:59 +0100 Subject: [PATCH 047/161] test for lua lint ignore --- [core]/es_extended/server/classes/player.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 1011c0d35..2bfeb79fd 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -130,6 +130,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, ---@return number function self.getPlayTime() + -- luacheck: ignore return self.lastPlaytime + GetPlayerTimeOnline(self.source) end From 5c8d65dd7fda73fc333361f54eb6d65ecf899caa Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Nov 2024 13:05:27 +0100 Subject: [PATCH 048/161] test for lua lint ignore --- [core]/es_extended/server/modules/onesync.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index cb9bfdfa2..87c5f7f0d 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -101,7 +101,7 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) return error(("Could not spawn vehicle - ^5%s^7!"):format(model)) end end - + -- luacheck: ignore SetEntityOrphanMode(createdVehicle, 2) local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true) From f367b8e0e0f1fc6f9c7a91838a3974cfe4a17bfd Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Nov 2024 13:31:38 +0100 Subject: [PATCH 049/161] :pencil2: ignore/handle lint errors --- [core]/es_extended/server/main.lua | 4 ++-- [core]/esx_multicharacter/server/modules/functions.lua | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 1b9c75221..ab0937aa2 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -102,7 +102,7 @@ if not Config.Multichar then Wait(0) -- Required local identifier = ESX.GetIdentifier(playerId) - + -- luacheck: ignore if not SetEntityOrphanMode then return deferrals.done(("[ESX] ESX Requires a minimum Artifact version of 10188, Please update your server.")) end @@ -694,7 +694,7 @@ AddEventHandler("onResourceStart", function(key) StopResource(key) error(("WE STOPPED A RESOURCE THAT WILL BREAK ^1ESX^1, PLEASE REMOVE ^5%s^1"):format(key)) end - + -- luacheck: ignore if not SetEntityOrphanMode then CreateThread(function() while true do diff --git a/[core]/esx_multicharacter/server/modules/functions.lua b/[core]/esx_multicharacter/server/modules/functions.lua index 47aeb5b47..f1750e2fb 100644 --- a/[core]/esx_multicharacter/server/modules/functions.lua +++ b/[core]/esx_multicharacter/server/modules/functions.lua @@ -25,7 +25,8 @@ function Server:OnConnecting(source, deferrals) deferrals.defer() Wait(0) -- Required local identifier = self:GetIdentifier(source) - + + -- luacheck: ignore if not SetEntityOrphanMode then return deferrals.done(("[ESX] ESX Requires a minimum Artifact version of 10188, Please update your server.")) end From e40d48750077741230ecbf423e597e3209434cb1 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:15:34 +0100 Subject: [PATCH 050/161] fix(skinchanger/client/main): fix HeadOverlay not being applied correctly --- [core]/skinchanger/client/main.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/[core]/skinchanger/client/main.lua b/[core]/skinchanger/client/main.lua index 133d8a220..67be80d5c 100644 --- a/[core]/skinchanger/client/main.lua +++ b/[core]/skinchanger/client/main.lua @@ -140,7 +140,7 @@ function SkinChanger:SetFace() end function SkinChanger:SetHeadOverlay() - local features = {{"age_1", "age_2"}, {"blemishes_1", "blemishes_2"}, {"beard_1", "beard_2"}, {"eyebrows_1", "eyebrows_2"}, {"makeup_1", "makeup_2"}, {"lipstick_1", "lipstick_2"}, {"blush_1", "blush_2"}, {"complexion_1", "complexion_2"}, {"sun_1", "sun_2"}, {"moles_1", "moles_2"}, {"chest_1", "chest_2"}} + local features = {{"blemishes_1", "blemishes_2"}, {"beard_1", "beard_2"}, {"eyebrows_1", "eyebrows_2"}, {"age_1", "age_2"}, {"makeup_1", "makeup_2"}, {"blush_1", "blush_2"}, {"complexion_1", "complexion_2"}, {"sun_1", "sun_2"}, {"lipstick_1", "lipstick_2"}, {"moles_1", "moles_2"}, {"chest_1", "chest_2"}} for i = 1, #features, 1 do local feature = features[i] SetPedHeadOverlay(self.playerPed, i - 1, self.character[feature[1]], Normalise(self.character[feature[2]], 10)) @@ -148,10 +148,9 @@ function SkinChanger:SetHeadOverlay() end function SkinChanger:SetHeadOverlayColour() - local features = {{"beard_3", "beard_4"}, {"eyebrows_3", "eyebrows_4"}, {"makeup_3", "makeup_4"}, {"lipstick_3", "lipstick_4"}, {"blush_3", 0}, {"chest_3", 0}} - for i = 1, #features, 1 do - local feature = features[i] - SetPedHeadOverlayColor(self.playerPed, i - 1, 1, self.character[feature[1]], self.character[feature[2]]) + local features = {[1] = {"beard_3", "beard_4"}, [2] = {"eyebrows_3", "eyebrows_4"}, [4] = {"makeup_3", "makeup_4"}, [5] = {"blush_3", 0}, [8] = {"lipstick_3", "lipstick_4"}, [10] = {"chest_3", 0}} + for i, feature in pairs(features) do + SetPedHeadOverlayColor(self.playerPed, i, 1, self.character[feature[1]], self.character[feature[2]]) end if self.character["bodyb_1"] == -1 then SetPedHeadOverlay(self.playerPed, 11, 255, (self.character["bodyb_2"] / 10) + 0.0) -- Body Blemishes + opacity From 1fb6037aad7f95bc85beb4182771e25d6a59e5d5 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 21:47:33 +0100 Subject: [PATCH 051/161] fix(es_extended/client/main): use RegisterNetEvent for esx:playerLoaded --- [core]/es_extended/client/main.lua | 2 +- [core]/esx_skin/client/main.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 25a79182c..b989857fd 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -14,7 +14,7 @@ local function ApplyMetadata(metadata) end end -ESX.SecureNetEvent("esx:playerLoaded", function(xPlayer, _, skin) +RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) ESX.PlayerData = xPlayer if not Config.Multichar then diff --git a/[core]/esx_skin/client/main.lua b/[core]/esx_skin/client/main.lua index 7240ae839..f30c86bc2 100644 --- a/[core]/esx_skin/client/main.lua +++ b/[core]/esx_skin/client/main.lua @@ -70,7 +70,7 @@ AddEventHandler("esx_skin:playerRegistered", function() end) end) -ESX.SecureNetEvent("esx:playerLoaded", function(_, _, skin) +RegisterNetEvent("esx:playerLoaded", function(_, _, skin) ESX.PlayerLoaded = true TriggerServerEvent("esx_skin:setWeight", skin) end) From 56cd03c68a429561a27cd3eda95b5fba7042f3c8 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 21:47:43 +0100 Subject: [PATCH 052/161] fix(es_extended/client/modules/npwd): use RegisterNetEvent for esx:playerLoaded --- [core]/es_extended/client/modules/npwd.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/npwd.lua b/[core]/es_extended/client/modules/npwd.lua index 98ff92e60..a1aa73a8f 100644 --- a/[core]/es_extended/client/modules/npwd.lua +++ b/[core]/es_extended/client/modules/npwd.lua @@ -9,7 +9,7 @@ local function checkPhone() npwd:setPhoneDisabled((phoneItem and phoneItem.count or 0) <= 0) end -ESX.SecureNetEvent("esx:playerLoaded", checkPhone) +RegisterNetEvent("esx:playerLoaded", checkPhone) AddEventHandler("onClientResourceStart", function(resource) if resource ~= "npwd" then From 9446d73e9b041df6d657ce7fab275e59dac25ac1 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 21:56:05 +0100 Subject: [PATCH 053/161] fix(esx_multicharacter/client/main): use RegisterNetEvent for esx:playerLoaded --- [core]/esx_multicharacter/client/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_multicharacter/client/main.lua b/[core]/esx_multicharacter/client/main.lua index 33568bc68..0e6da55ce 100644 --- a/[core]/esx_multicharacter/client/main.lua +++ b/[core]/esx_multicharacter/client/main.lua @@ -33,7 +33,7 @@ ESX.SecureNetEvent("esx_multicharacter:SetupUI", function(data, slots) Multicharacter:SetupUI(data, slots) end) -ESX.SecureNetEvent('esx:playerLoaded', function(playerData, isNew, skin) +RegisterNetEvent('esx:playerLoaded', function(playerData, isNew, skin) Multicharacter:PlayerLoaded(playerData, isNew, skin) end) From 5d59b2d94d4f1011692fd3dc5d740392f433e833 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 21:56:14 +0100 Subject: [PATCH 054/161] refactor(es_extended/server/main): use esx:playerLoaded:internal --- [core]/es_extended/imports.lua | 4 +++- [core]/es_extended/server/main.lua | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index f1483d0a5..9069aac37 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -12,9 +12,11 @@ if not IsDuplicityVersion() then -- Only register this event for the client end end) - ESX.SecureNetEvent("esx:playerLoaded", function(xPlayer) + ESX.SecureNetEvent("esx:playerLoaded:internal", function(xPlayer, isNew, playerSkin) ESX.PlayerData = xPlayer ESX.PlayerLoaded = true + + TriggerEvent("esx:playerLoaded", xPlayer, isNew, playerSkin) end) ESX.SecureNetEvent("esx:onPlayerLogout", function() diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 61fbe78ed..cc1a6a955 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -290,7 +290,7 @@ function loadESXPlayer(identifier, playerId, isNew) TriggerEvent("esx:playerLoaded", playerId, xPlayer, isNew) userData.money = xPlayer.getMoney() userData.maxWeight = xPlayer.getMaxWeight() - xPlayer.triggerEvent("esx:playerLoaded", userData, isNew, userData.skin) + xPlayer.triggerEvent("esx:playerLoaded:internal", userData, isNew, userData.skin) if not Config.CustomInventory then xPlayer.triggerEvent("esx:createMissingPickups", Core.Pickups) From 8004dcfbf087aa1e1668cc6a7a6ba5f5b0b5d727 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 17 Nov 2024 21:42:23 +0000 Subject: [PATCH 055/161] feat(es_extended/client/callback): implement ESX.AwaitServerCallback example usage: ```lua RegisterCommand("callback", function () local value, value2 = ESX.AwaitServerCallback("es_extended:callbackTest") print(value, value2) end, false) ``` --- .../es_extended/client/modules/callback.lua | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 738b3bb15..7d69a6ffb 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -7,10 +7,18 @@ Callbacks.storage = {} Callbacks.id = 0 function Callbacks:Trigger(event, cb, invoker, ...) - self.requests[self.id] = cb + + self.requests[self.id] = { + await = type(cb) == "boolean", + cb = cb or promise:new() + } + local table = self.requests[self.id] + TriggerServerEvent("esx:triggerServerCallback", event, self.id, invoker, ...) self.id += 1 + + return table.cb end function Callbacks:Execute(cb, ...) @@ -32,7 +40,12 @@ function Callbacks:ServerRecieve(requestId, invoker, ...) local callback = self.requests[self.currentId] - Callbacks:Execute(callback, ...) + if callback.await then + return callback.cb:resolve({...}) + else + Callbacks:Execute(callback.cb, ...) + end + self.requests[requestId] = nil end @@ -66,6 +79,28 @@ ESX.TriggerServerCallback = function(eventName, callback, ...) Callbacks:Trigger(eventName, callback, invoker, ...) end +---@param eventName string +---@param ... any +---@return any +ESX.AwaitServerCallback = function(eventName, ...) + local invokingResource = GetInvokingResource() + local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended" + + local p = Callbacks:Trigger(eventName, false, invoker, ...) + if not p then return end + + -- if the server callback takes longer than 15 seconds to respond, reject the promise + SetTimeout(15000, function() + if p.state == "pending" then + p:reject("Server Callback Timed Out") + end + end) + + Citizen.Await(p) + + return table.unpack(p.value) +end + ESX.SecureNetEvent("esx:serverCallback", function(...) Callbacks:ServerRecieve(...) end) From 6aa49369a12463927a10db0502ca32d6e857ca24 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:48:04 +0100 Subject: [PATCH 056/161] Revert "refactor(es_extended/server/main): use esx:playerLoaded:internal" This reverts commit 5d59b2d94d4f1011692fd3dc5d740392f433e833. --- [core]/es_extended/imports.lua | 4 +--- [core]/es_extended/server/main.lua | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 9069aac37..f1483d0a5 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -12,11 +12,9 @@ if not IsDuplicityVersion() then -- Only register this event for the client end end) - ESX.SecureNetEvent("esx:playerLoaded:internal", function(xPlayer, isNew, playerSkin) + ESX.SecureNetEvent("esx:playerLoaded", function(xPlayer) ESX.PlayerData = xPlayer ESX.PlayerLoaded = true - - TriggerEvent("esx:playerLoaded", xPlayer, isNew, playerSkin) end) ESX.SecureNetEvent("esx:onPlayerLogout", function() diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index cc1a6a955..61fbe78ed 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -290,7 +290,7 @@ function loadESXPlayer(identifier, playerId, isNew) TriggerEvent("esx:playerLoaded", playerId, xPlayer, isNew) userData.money = xPlayer.getMoney() userData.maxWeight = xPlayer.getMaxWeight() - xPlayer.triggerEvent("esx:playerLoaded:internal", userData, isNew, userData.skin) + xPlayer.triggerEvent("esx:playerLoaded", userData, isNew, userData.skin) if not Config.CustomInventory then xPlayer.triggerEvent("esx:createMissingPickups", Core.Pickups) From 37aaae629622ca35ebe27a3a6018e9c332a84931 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:49:25 +0100 Subject: [PATCH 057/161] fix(es_extended/imports): use RegisterNetEvent for esx:playerLoaded --- [core]/es_extended/imports.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index f1483d0a5..d6eb1449e 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -12,7 +12,7 @@ if not IsDuplicityVersion() then -- Only register this event for the client end end) - ESX.SecureNetEvent("esx:playerLoaded", function(xPlayer) + RegisterNetEvent("esx:playerLoaded", function(xPlayer) ESX.PlayerData = xPlayer ESX.PlayerLoaded = true end) From b4548945dddd6dc0a4695071f5040db6abc46966 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 17 Nov 2024 22:09:55 +0000 Subject: [PATCH 058/161] tweak(es_extended/client/callback): use self:Execute --- [core]/es_extended/client/modules/callback.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 7d69a6ffb..9e614b43c 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -43,7 +43,7 @@ function Callbacks:ServerRecieve(requestId, invoker, ...) if callback.await then return callback.cb:resolve({...}) else - Callbacks:Execute(callback.cb, ...) + self:Execute(callback.cb, ...) end self.requests[requestId] = nil @@ -65,7 +65,7 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) end local callback = self.storage[eventName] - Callbacks:Execute(callback, returnCb, ...) + self:Execute(callback, returnCb, ...) end ---@param eventName string From 32f8e05442d1856f178fb1af992240dee2ba0f3f Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 17 Nov 2024 22:12:29 +0000 Subject: [PATCH 059/161] fix(es_extended/client/callback): dont return before cleanup --- [core]/es_extended/client/modules/callback.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 9e614b43c..746928407 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -41,7 +41,7 @@ function Callbacks:ServerRecieve(requestId, invoker, ...) local callback = self.requests[self.currentId] if callback.await then - return callback.cb:resolve({...}) + callback.cb:resolve({...}) else self:Execute(callback.cb, ...) end From faef100addef0fb98ab2010a3c3e542e9b1fd12d Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 17 Nov 2024 22:59:21 +0000 Subject: [PATCH 060/161] fix(es_extended/client/callback): make sure data is cleaned up --- .../es_extended/client/modules/callback.lua | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 746928407..bd47e4476 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -21,32 +21,30 @@ function Callbacks:Trigger(event, cb, invoker, ...) return table.cb end -function Callbacks:Execute(cb, ...) +function Callbacks:Execute(cb, id, ...) local success, errorString = pcall(cb, ...) if not success then - print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(self.currentId)) + print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(id)) error(errorString) return end - self.currentId = nil end function Callbacks:ServerRecieve(requestId, invoker, ...) - self.currentId = requestId - if not self.requests[self.currentId] then - return error(("Server Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(self.currentId, invoker)) + if not self.requests[requestId] then + return error(("Server Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(requestId, invoker)) end - local callback = self.requests[self.currentId] + local callback = self.requests[requestId] + + self.requests[requestId] = nil if callback.await then callback.cb:resolve({...}) else - self:Execute(callback.cb, ...) + self:Execute(callback.cb, requestId, ...) end - - self.requests[requestId] = nil end function Callbacks:Register(name, cb) @@ -54,7 +52,6 @@ function Callbacks:Register(name, cb) end function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) - self.currentId = requestId if not self.storage[eventName] then return error(("Client Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(eventName, invoker)) @@ -65,7 +62,7 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) end local callback = self.storage[eventName] - self:Execute(callback, returnCb, ...) + self:Execute(callback, requestId, returnCb, ...) end ---@param eventName string From e4f55ab2f5df569de61ac5b2b0a1b2f48f559ed9 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 18 Nov 2024 16:08:45 +0000 Subject: [PATCH 061/161] fix(esx_skin): restrict menu --- [core]/esx_skin/client/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_skin/client/main.lua b/[core]/esx_skin/client/main.lua index 7240ae839..a2e26a4f8 100644 --- a/[core]/esx_skin/client/main.lua +++ b/[core]/esx_skin/client/main.lua @@ -80,7 +80,7 @@ RegisterNetEvent("esx_skin:openMenu", function(submitCb, cancelCb) end) RegisterNetEvent("esx_skin:openRestrictedMenu", function(submitCb, cancelCb, restrict) - Menu:Open(submitCb, cancelCb, nil) + Menu:Open(submitCb, cancelCb, restrict) end) RegisterNetEvent("esx_skin:openSaveableMenu", function(submitCb, cancelCb) From de7dcb75bae8a759da14d336c93d5a123620397c Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:36:49 +0100 Subject: [PATCH 062/161] fix(esx_skin/client/modules/menu): clear old menu items before inserting new ones --- [core]/esx_skin/client/modules/menu.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index e7ddcf1b4..786a1b3b4 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -37,7 +37,8 @@ end function Menu:InsertElements() local playerPed = PlayerPedId() - + + self.elements = {} for i = 1, #self.components, 1 do local value = self.components[i].value local componentId = self.components[i].componentId From d947633be8869d562eb86e23a536d2922d3b43aa Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:47:50 +0100 Subject: [PATCH 063/161] refactor(esx_skin/client/modules/menu): remove redundant check --- [core]/esx_skin/client/modules/menu.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index 786a1b3b4..7af77cd67 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -37,7 +37,7 @@ end function Menu:InsertElements() local playerPed = PlayerPedId() - + self.elements = {} for i = 1, #self.components, 1 do local value = self.components[i].value @@ -52,9 +52,6 @@ function Menu:InsertElements() data.type = "slider" data.max = self.maxValues[self.components[i].name] - if not self.elements then - self.elements = {} - end self.elements[#self.elements + 1] = data end end From 6ed90e8a06a083483a577c12a096ef8b77c39b8c Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 20 Nov 2024 20:10:15 +0100 Subject: [PATCH 064/161] fix(esx_skin/client/modules/menu): set initial camera offsets properly --- [core]/esx_skin/client/modules/menu.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index e7ddcf1b4..3767d9b1f 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -122,8 +122,8 @@ function Menu:Open(submit, cancel, restrict) self:InsertElements() - self.zoomOffset = self.components[1].zoomOffset - self.camOffset = self.components[1].camOffset + Skin.zoomOffset = self.components[1].zoomOffset + Skin.camOffset = self.components[1].camOffset Camera:Create() self:ESXMenu() From e64c7f73497c826240f25aa547e10846b344f2c2 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Thu, 21 Nov 2024 00:44:56 +0000 Subject: [PATCH 065/161] fix(es_extended/callback): correctly dispose of function references This has been an Issue since ESX 1.0, This should hopefully stop invalid callbacks being called --- .../es_extended/client/modules/callback.lua | 22 ++++++++++++++---- .../es_extended/server/modules/callback.lua | 23 +++++++++++++++---- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index bd47e4476..1d23d9b62 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -47,8 +47,11 @@ function Callbacks:ServerRecieve(requestId, invoker, ...) end end -function Callbacks:Register(name, cb) - self.storage[name] = cb +function Callbacks:Register(name, resource, cb) + self.storage[name] = { + resource = resource, + cb = cb + } end function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) @@ -60,7 +63,7 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) local returnCb = function(...) TriggerServerEvent("esx:clientCallback", requestId, invoker, ...) end - local callback = self.storage[eventName] + local callback = self.storage[eventName].cb self:Execute(callback, requestId, returnCb, ...) end @@ -106,9 +109,20 @@ end) ---@param callback function ---@return nil ESX.RegisterClientCallback = function(eventName, callback) - Callbacks:Register(eventName, callback) + local invokingResource = GetInvokingResource() + local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended" + + Callbacks:Register(eventName, invoker, callback) end ESX.SecureNetEvent("esx:triggerClientCallback", function(...) Callbacks:ClientRecieve(...) end) + +AddEventHandler("onResourceStop", function(resource) + for k, v in pairs(Callbacks.storage) do + if v.resource == resource then + Callbacks.storage[k] = nil + end + end +end) diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index 245b0987e..df06cc2e3 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -6,8 +6,11 @@ Callbacks.requests = {} Callbacks.storage = {} Callbacks.id = 0 -function Callbacks:Register(name, cb) - self.storage[name] = cb +function Callbacks:Register(name, resource, cb) + self.storage[name] = { + resource = resource, + cb = cb + } end function Callbacks:Execute(cb, ...) @@ -39,7 +42,7 @@ function Callbacks:ServerRecieve(player, event, requestId, invoker, ...) local returnCb = function(...) TriggerClientEvent("esx:serverCallback", player, requestId, invoker, ...) end - local callback = self.storage[event] + local callback = self.storage[event].cb self:Execute(callback, player, returnCb, ...) end @@ -73,7 +76,7 @@ end) ---@param ... any function ESX.TriggerClientCallback(player, eventName, callback, ...) local invokingResource = GetInvokingResource() - local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended" + local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended" Callbacks:Trigger(player, eventName, callback, invoker, ...) end @@ -81,6 +84,16 @@ end ---@param eventName string ---@param callback function ESX.RegisterServerCallback = function(eventName, callback) - Callbacks:Register(eventName, callback) + local invokingResource = GetInvokingResource() + local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended" + + Callbacks:Register(eventName, invoker, callback) end +AddEventHandler("onResourceStop", function(resource) + for k, v in pairs(Callbacks.storage) do + if v.resource == resource then + Callbacks.storage[k] = nil + end + end +end) From 7c4c3aec56d70c994ebbbbba1cc184cec1cdbc93 Mon Sep 17 00:00:00 2001 From: Rafael Antunes <147253092+Fellow1990@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:39:35 +0000 Subject: [PATCH 066/161] update: menu.lua Confusion of lowercase and uppercase letters --- [core]/esx_skin/client/modules/menu.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index e7ddcf1b4..5f9e090a8 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -59,7 +59,7 @@ function Menu:InsertElements() end function Menu:Submit(data, menu) - Skin.last = exports["skinchanger"]:GetSkin() + Skin.Last = exports["skinchanger"]:GetSkin() self.submitCb(data, menu) Camera:Destroy() end @@ -67,7 +67,7 @@ end function Menu:Cancel(data, menu) menu.close() Camera:Destroy() - TriggerEvent("skinchanger:loadSkin", Skin.last) + TriggerEvent("skinchanger:loadSkin", Skin.Last) if self.cancelCb then self.cancelCb(data, menu) @@ -113,7 +113,7 @@ function Menu:Open(submit, cancel, restrict) self.submitCb = submit self.cancelCb = cancel self.restricted = restrict - Skin.last = exports["skinchanger"]:GetSkin() + Skin.Last = exports["skinchanger"]:GetSkin() self.components, self.maxValues = exports["skinchanger"]:GetData() if restrict then @@ -130,7 +130,7 @@ function Menu:Open(submit, cancel, restrict) end function Menu:Saveable(submitCb, cancelCb, restrict) - Skin.last = exports["skinchanger"]:GetSkin() + Skin.Last = exports["skinchanger"]:GetSkin() self:Open(function(data, menu) menu.close() From 7954d6ec108786a1c4468231d4b078cea817452f Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:15:14 +0100 Subject: [PATCH 067/161] refactor(es_extended/server/modules/actions): replace deprecated RegisterServerEvent --- [core]/es_extended/server/modules/actions.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/[core]/es_extended/server/modules/actions.lua b/[core]/es_extended/server/modules/actions.lua index 52eeeb5b1..e7c91e6ac 100644 --- a/[core]/es_extended/server/modules/actions.lua +++ b/[core]/es_extended/server/modules/actions.lua @@ -1,9 +1,9 @@ -RegisterServerEvent("esx:playerPedChanged") -RegisterServerEvent("esx:playerJumping") -RegisterServerEvent("esx:enteringVehicle") -RegisterServerEvent("esx:enteringVehicleAborted") -RegisterServerEvent("esx:enteredVehicle") -RegisterServerEvent("esx:exitedVehicle") +RegisterNetEvent("esx:playerPedChanged") +RegisterNetEvent("esx:playerJumping") +RegisterNetEvent("esx:enteringVehicle") +RegisterNetEvent("esx:enteringVehicleAborted") +RegisterNetEvent("esx:enteredVehicle") +RegisterNetEvent("esx:exitedVehicle") if Config.EnableDebug then AddEventHandler("esx:playerPedChanged", function(netId) From 4feda3ba0879c9643c90ef25917856f4aa585dfa Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:54:37 +0100 Subject: [PATCH 068/161] feat(es_extended/shared/modules/table): add ESX.Table.ToArray --- [core]/es_extended/shared/modules/table.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/[core]/es_extended/shared/modules/table.lua b/[core]/es_extended/shared/modules/table.lua index fc3452005..aacb25840 100644 --- a/[core]/es_extended/shared/modules/table.lua +++ b/[core]/es_extended/shared/modules/table.lua @@ -223,3 +223,11 @@ function ESX.Table.Sort(t, order) end end end + +function ESX.Table.ToArray(table) + local array = {} + for _, v in pairs(table) do + array[#array + 1] = v + end + return array +end From 3a61ae53103f30bae189b5efbe23a0527c9c03bd Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 23 Nov 2024 01:00:47 +0100 Subject: [PATCH 069/161] refactor(es_extended/server/functions): refactor ESX.GetExtendedPlayers --- [core]/es_extended/server/functions.lua | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 606ab0e74..cec340b53 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -276,15 +276,15 @@ end ESX.GetPlayers = GetPlayers -local function checkTable(key, val, player, xPlayers) +local function checkTable(key, val, xPlayer, xPlayers) for valIndex = 1, #val do local value = val[valIndex] if not xPlayers[value] then xPlayers[value] = {} end - if (key == "job" and player.job.name == value) or player[key] == value then - xPlayers[value][#xPlayers[value] + 1] = player + if (key == "job" and xPlayer.job.name == value) or xPlayer[key] == value then + xPlayers[value][#xPlayers[value] + 1] = xPlayer end end end @@ -293,20 +293,22 @@ end ---@param val? string|table ---@return table function ESX.GetExtendedPlayers(key, val) + if not key then + return ESX.Table.ToArray(ESX.Players) + end + local xPlayers = {} if type(val) == "table" then - for _, v in pairs(ESX.Players) do - checkTable(key, val, v, xPlayers) + for i, xPlayer in pairs(ESX.Players) do + checkTable(key, val, xPlayer, xPlayers) end - else - for _, v in pairs(ESX.Players) do - if key then - if (key == "job" and v.job.name == val) or v[key] == val then - xPlayers[#xPlayers + 1] = v - end - else - xPlayers[#xPlayers + 1] = v - end + + return xPlayers + end + + for i, xPlayer in pairs(ESX.Players) do + if (key == "job" and xPlayer.job.name == val) or xPlayer[key] == val then + xPlayers[#xPlayers + 1] = xPlayer end end From d69af15d28550ec8469758cf8590cd8e803d7faa Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 24 Nov 2024 16:24:23 +0100 Subject: [PATCH 070/161] feat(es_extended/client/modules/adjustments): add adjustment DisableRadio --- [core]/es_extended/client/modules/adjustments.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/[core]/es_extended/client/modules/adjustments.lua b/[core]/es_extended/client/modules/adjustments.lua index 42fa93982..4b46a4a88 100644 --- a/[core]/es_extended/client/modules/adjustments.lua +++ b/[core]/es_extended/client/modules/adjustments.lua @@ -215,6 +215,15 @@ function Adjustments:WantedLevel() end end +function Adjustments:DisableRadio() + if Config.RemoveHudComponents[16] then + AddEventHandler("esx:enteredVehicle", function(vehicle, plate, seat, displayName, netId) + SetVehRadioStation(vehicle,"OFF") + SetUserRadioControlEnabled(false) + end) + end +end + function Adjustments:Load() self:RemoveHudComponents() self:DisableAimAssist() @@ -228,4 +237,5 @@ function Adjustments:Load() self:LicensePlates() self:DiscordPresence() self:WantedLevel() + self:DisableRadio() end From 359077c66e03d33d7bb13a57c2672b766c7f196f Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 24 Nov 2024 16:53:52 +0100 Subject: [PATCH 071/161] fix(es_extended/client/modules/adjustments): add SetHudComponentPosition --- [core]/es_extended/client/modules/adjustments.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/client/modules/adjustments.lua b/[core]/es_extended/client/modules/adjustments.lua index 4b46a4a88..b4d4fe8ad 100644 --- a/[core]/es_extended/client/modules/adjustments.lua +++ b/[core]/es_extended/client/modules/adjustments.lua @@ -4,6 +4,7 @@ function Adjustments:RemoveHudComponents() for i = 1, #Config.RemoveHudComponents do if Config.RemoveHudComponents[i] then SetHudComponentSize(i, 0.0, 0.0) + SetHudComponentPosition(i, 900, 900) end end end From 4fb1ac0aa73edbc8d139277e41d21b65f91a18a3 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:19:15 +0100 Subject: [PATCH 072/161] fix(es_extended/client/functions): properly call SetVehicleExtra --- [core]/es_extended/client/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 425693815..58252a0f9 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -1019,7 +1019,7 @@ function ESX.Game.SetVehicleProperties(vehicle, props) for extraId, enabled in pairs(props.extras) do extraId = tonumber(extraId) if extraId then - SetVehicleExtra(vehicle, extraId, enabled) + SetVehicleExtra(vehicle, extraId, not enabled) end end end From ef935e14d6fd90059e93552efba6b0b007a4450a Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 25 Nov 2024 18:11:51 +0000 Subject: [PATCH 073/161] feat(es_extended/server): more callback functions --- [core]/es_extended/server/modules/callback.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index 245b0987e..4e17f2c50 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -80,7 +80,18 @@ end ---@param eventName string ---@param callback function -ESX.RegisterServerCallback = function(eventName, callback) +function ESX.RegisterServerCallback(eventName, callback) Callbacks:Register(eventName, callback) end +---@param eventName string +---@return boolean +function ESX.DoesServerCallbackExist(eventName) + return Callbacks.storage[eventName] ~= nil +end + +---@param eventName string +---@return table | nil +function ESX.GetCallbackInfo(eventName) + return Callbacks.storage[eventName] +end From a4115d516502a64a6da172ae7c4f96579e4477c9 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 25 Nov 2024 18:22:57 +0000 Subject: [PATCH 074/161] feat(es_extended/client): extra callback functions --- .../es_extended/client/modules/callback.lua | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index bd47e4476..20fa74634 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -6,6 +6,10 @@ Callbacks.requests = {} Callbacks.storage = {} Callbacks.id = 0 +-- ============================================= +-- MARK: Internal Functions +-- ============================================= + function Callbacks:Trigger(event, cb, invoker, ...) self.requests[self.id] = { @@ -65,11 +69,24 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) self:Execute(callback, requestId, returnCb, ...) end +ESX.SecureNetEvent("esx:triggerClientCallback", function(...) + Callbacks:ClientRecieve(...) +end) + + +ESX.SecureNetEvent("esx:serverCallback", function(...) + Callbacks:ServerRecieve(...) +end) + +-- ============================================= +-- MARK: ESX Functions +-- ============================================= + ---@param eventName string ---@param callback function ---@param ... any ---@return nil -ESX.TriggerServerCallback = function(eventName, callback, ...) +function ESX.TriggerServerCallback(eventName, callback, ...) local invokingResource = GetInvokingResource() local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended" @@ -79,7 +96,7 @@ end ---@param eventName string ---@param ... any ---@return any -ESX.AwaitServerCallback = function(eventName, ...) +function ESX.AwaitServerCallback(eventName, ...) local invokingResource = GetInvokingResource() local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended" @@ -98,17 +115,21 @@ ESX.AwaitServerCallback = function(eventName, ...) return table.unpack(p.value) end -ESX.SecureNetEvent("esx:serverCallback", function(...) - Callbacks:ServerRecieve(...) -end) - ---@param eventName string ---@param callback function ---@return nil -ESX.RegisterClientCallback = function(eventName, callback) +function ESX.RegisterClientCallback(eventName, callback) Callbacks:Register(eventName, callback) end -ESX.SecureNetEvent("esx:triggerClientCallback", function(...) - Callbacks:ClientRecieve(...) -end) +---@param eventName string +---@return boolean +function ESX.DoesClientCallbackExist(eventName) + return Callbacks.storage[eventName] ~= nil +end + +---@param eventName string +---@return table | nil +function ESX.GetClientCallbackInfo(eventName) + return Callbacks.storage[eventName] +end From 672237cd3bf75be1401156411293b32cab7f856f Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 25 Nov 2024 18:28:01 +0000 Subject: [PATCH 075/161] fix(es_extended/server/callback): correct function names --- [core]/es_extended/server/modules/callback.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index 4e17f2c50..f84ae9879 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -92,6 +92,6 @@ end ---@param eventName string ---@return table | nil -function ESX.GetCallbackInfo(eventName) +function ESX.GetServerCallbackInfo(eventName) return Callbacks.storage[eventName] end From ccc9b3d3e7a6f796c8cd20f9d1eceb74de190d73 Mon Sep 17 00:00:00 2001 From: Tom <111147401+1OSaft@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:19:17 +0100 Subject: [PATCH 076/161] Added missing parameter Added a missing parameter that wouldnt allow users to have custom charSlots --- [core]/esx_multicharacter/server/modules/multicharacter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_multicharacter/server/modules/multicharacter.lua b/[core]/esx_multicharacter/server/modules/multicharacter.lua index 923dd55e1..c43be5819 100644 --- a/[core]/esx_multicharacter/server/modules/multicharacter.lua +++ b/[core]/esx_multicharacter/server/modules/multicharacter.lua @@ -13,7 +13,7 @@ function Multicharacter:SetupCharacters(source) local identifier = Server:GetIdentifier(source) ESX.Players[identifier] = true - local slots = Database:GetPlayerSlots() + local slots = Database:GetPlayerSlots(identifier) identifier = Server.prefix .. "%:" .. identifier local rawCharacters = Database:GetPlayerInfo(identifier, slots) From 9272d71ba89ee58b2226861400b41f31560dcf8c Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 26 Nov 2024 22:00:16 +0100 Subject: [PATCH 077/161] fix(esx_multicharacter/client/modules/multicharacter): remove redundant playerSpawned trigger --- [core]/esx_multicharacter/client/modules/multicharacter.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[core]/esx_multicharacter/client/modules/multicharacter.lua b/[core]/esx_multicharacter/client/modules/multicharacter.lua index 9ea9b9749..ef099f58e 100644 --- a/[core]/esx_multicharacter/client/modules/multicharacter.lua +++ b/[core]/esx_multicharacter/client/modules/multicharacter.lua @@ -272,7 +272,6 @@ function Multicharacter:PlayerLoaded(playerData, isNew, skin) TriggerServerEvent("esx:onPlayerSpawn") TriggerEvent("esx:onPlayerSpawn") - TriggerEvent("playerSpawned") TriggerEvent("esx:restoreLoadout") self:Reset() From 8528321c055c33ae07148598e92df57bddaa48ca Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 26 Nov 2024 22:00:56 +0100 Subject: [PATCH 078/161] fix(es_extended/client/main): apply player metadata in esx:onPlayerSpawn to fix race condition --- [core]/es_extended/client/main.lua | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index b989857fd..6516355ed 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -4,16 +4,6 @@ ESX.SecureNetEvent("esx:requestModel", function(model) ESX.Streaming.RequestModel(model) end) -local function ApplyMetadata(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 -end - RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) ESX.PlayerData = xPlayer @@ -34,8 +24,6 @@ RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) ESX.PlayerLoaded = true - ApplyMetadata(ESX.PlayerData.metadata) - local timer = GetGameTimer() while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do Wait(0) @@ -72,7 +60,17 @@ local function onPlayerSpawn() end AddEventHandler("playerSpawned", onPlayerSpawn) -AddEventHandler("esx:onPlayerSpawn", onPlayerSpawn) +AddEventHandler("esx:onPlayerSpawn", function() + onPlayerSpawn() + + if ESX.PlayerData.metadata.health then + SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) + end + + if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then + SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor) + end +end) AddEventHandler("esx:onPlayerDeath", function() ESX.SetPlayerData("ped", PlayerPedId()) From 47442020074e75fa6b3d577236501b974f15a86a Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 26 Nov 2024 22:05:01 +0100 Subject: [PATCH 079/161] fix(es_extended/client/main): only apply metadata on first spawn --- [core]/es_extended/client/main.lua | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 6516355ed..9912bbff2 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -59,16 +59,21 @@ local function onPlayerSpawn() ESX.SetPlayerData("dead", false) end +local isFirstSpawn = true AddEventHandler("playerSpawned", onPlayerSpawn) AddEventHandler("esx:onPlayerSpawn", function() onPlayerSpawn() - if ESX.PlayerData.metadata.health then - SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) - end + if isFirstSpawn then + isFirstSpawn = false + + if ESX.PlayerData.metadata.health then + SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) + end - if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then - SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor) + if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then + SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor) + end end end) From 51c777f6c27709cadb0b84b35ccc326d4dbed508 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:02:13 +0100 Subject: [PATCH 080/161] fix(es_extended/client/main): reset isFirstSpawn on logout --- [core]/es_extended/client/main.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 9912bbff2..3cfdc449d 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -46,8 +46,10 @@ RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) StartServerSyncLoops() end) +local isFirstSpawn = true ESX.SecureNetEvent("esx:onPlayerLogout", function() ESX.PlayerLoaded = false + isFirstSpawn = true end) ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight) @@ -59,7 +61,6 @@ local function onPlayerSpawn() ESX.SetPlayerData("dead", false) end -local isFirstSpawn = true AddEventHandler("playerSpawned", onPlayerSpawn) AddEventHandler("esx:onPlayerSpawn", function() onPlayerSpawn() From 47ae063aa150722ff5019741d6ab726dd31fc1f3 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:20:35 +0100 Subject: [PATCH 081/161] feat(es_extended/shared/config/main): add Config.SaveDeathStatus --- [core]/es_extended/client/main.lua | 2 +- [core]/es_extended/shared/config/main.lua | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 3cfdc449d..a4d1daa93 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -68,7 +68,7 @@ AddEventHandler("esx:onPlayerSpawn", function() if isFirstSpawn then isFirstSpawn = false - if ESX.PlayerData.metadata.health then + if ESX.PlayerData.metadata.health and (ESX.PlayerData.metadata.health > 0 or Config.SaveDeathStatus) then SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) end diff --git a/[core]/es_extended/shared/config/main.lua b/[core]/es_extended/shared/config/main.lua index 2c3756053..7db1e472b 100644 --- a/[core]/es_extended/shared/config/main.lua +++ b/[core]/es_extended/shared/config/main.lua @@ -40,6 +40,7 @@ Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via 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 a backpack Config.PaycheckInterval = 7 * 60000 -- how often to receive paychecks in milliseconds +Config.SaveDeathStatus = true -- Save the death status of a player Config.EnableDebug = false -- Use Debug options? Config.DefaultJobDuty = true -- A players default duty status when changing jobs From 5392f38c7a080f676693e204f3e46da25ae1f45b Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:36:54 +0100 Subject: [PATCH 082/161] feat(es_extended/shared/functions): add ESX.IsFunctionReference --- [core]/es_extended/shared/functions.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index fc342bce4..1a5d00900 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -164,3 +164,10 @@ function ESX.AssertType(...) return matches end + +---@param val unknown +function ESX.IsFunctionReference(val) + local typeVal = type(val) + + return typeVal == "function" or (typeVal == "table" and type(getmetatable(val)?.__call) == "function") +end \ No newline at end of file From 346ce349020256aac4f46c4bbaae9d9e8535a7b4 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:38:19 +0100 Subject: [PATCH 083/161] fix(skinchanger/config): add missing textureof --- [core]/skinchanger/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/skinchanger/config.lua b/[core]/skinchanger/config.lua index 2401b9c73..1d5a0fed5 100644 --- a/[core]/skinchanger/config.lua +++ b/[core]/skinchanger/config.lua @@ -237,6 +237,7 @@ Config.Components = { min = 0, zoomOffset = 0.6, camOffset = 0.65, + textureof = "hair_1", max = function(playerPed, Character) return GetNumberOfPedTextureVariations(playerPed, 2, Character["hair_1"]) - 1 end From 2b8841c95a308e2df257e1d580a72262f21110dc Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:38:48 +0100 Subject: [PATCH 084/161] fix(esx_skin/client/modules/menu): fix texture variations not updating --- [core]/esx_skin/client/modules/menu.lua | 38 +++++++++++++++---------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index 0137f40a1..f11791516 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -47,7 +47,7 @@ function Menu:InsertElements() value = GetPedPropIndex(playerPed, self.components[i].componentId) end - local data = self.components[i] + local data = table.clone(self.components[i]) data.value = value data.type = "slider" data.max = self.maxValues[self.components[i].name] @@ -78,27 +78,35 @@ function Menu:Change(data, menu) Skin.zoomOffset = data.current.zoomOffset Skin.camOffset = data.current.camOffset - if skin[data.current.name] ~= data.current.value then - -- Change skin element - exports["skinchanger"]:Change(data.current.name, data.current.value) - skin[data.current.name] = data.current.value + if skin[data.current.name] == data.current.value then + return + end - local newData = {} + -- Change skin element + exports["skinchanger"]:Change(data.current.name, data.current.value) + skin[data.current.name] = data.current.value - for i = 1, #self.elements, 1 do - local component = self.components[i] + -- Texture variation changed. We don't have to update anything. + if data.current.textureof then + return + end - newData.max = type(component.max) == "function" and component.max(PlayerPedId(), skin) or component.max + -- Texture changed. Update variation max value. + for i = 1, #self.elements, 1 do + local element = self.elements[i] - if self.elements[i].textureof ~= nil and data.current.name == self.elements[i].textureof then - newData.value = 0 + if element.textureof == data.current.name then + local component = self.components[i] + + if (ESX.IsFunctionReference(component.max)) then + self.elements[i].max = component.max(PlayerPedId(), skin) end + self.elements[i].value = 0 - menu.update({ name = self.elements[i].name }, newData) + menu.update({ name = self.elements[i].name }, self.elements[i]) + menu.refresh() + break end - - self.elements = newData - menu.refresh() end end From 166fdff8eb3e295ec207fc85c4488f6777d273c2 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:52:15 +0100 Subject: [PATCH 085/161] refactor(esx_skin/client/modules/menu): bad habbits --- [core]/esx_skin/client/modules/menu.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index f11791516..effed0d87 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -98,7 +98,7 @@ function Menu:Change(data, menu) if element.textureof == data.current.name then local component = self.components[i] - if (ESX.IsFunctionReference(component.max)) then + if ESX.IsFunctionReference(component.max) then self.elements[i].max = component.max(PlayerPedId(), skin) end self.elements[i].value = 0 From 016b9bb97ec9b0a8083da86f934cd11ef521ed15 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 27 Nov 2024 22:06:02 +0100 Subject: [PATCH 086/161] fix(esx_skin/client/modules/menu): immediately update texture variation on texture change --- [core]/esx_skin/client/modules/menu.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/[core]/esx_skin/client/modules/menu.lua b/[core]/esx_skin/client/modules/menu.lua index effed0d87..b6de67456 100644 --- a/[core]/esx_skin/client/modules/menu.lua +++ b/[core]/esx_skin/client/modules/menu.lua @@ -103,6 +103,10 @@ function Menu:Change(data, menu) end self.elements[i].value = 0 + -- Change skin element + exports["skinchanger"]:Change(element.name, 0) + skin[element.name] = data.current.value + menu.update({ name = self.elements[i].name }, self.elements[i]) menu.refresh() break From 96cb6b04fbcb74c0b559ad22fc7140201ee1d44d Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:22:49 +0100 Subject: [PATCH 087/161] refactor(es_extended/client/modules/death): replace gameEventTriggered --- [core]/es_extended/client/modules/death.lua | 29 ++++++++------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index 4054421e2..936d64113 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -43,19 +43,7 @@ function Death:Natual() TriggerServerEvent("esx:onPlayerDeath", data) end -function Death:Damaged(victim, victimDied) - if not victimDied then - return - end - - if not IsEntityAPed(victim) then - return - end - - if not IsPedAPlayer(victim) then - return - end - +function Death:Damaged(victim) local victimId = NetworkGetPlayerIndexFromPed(victim) local isDead = IsPedDeadOrDying(victim, true) or IsPedFatallyInjured(victim) if victimId ~= ESX.playerId or not isDead then @@ -78,9 +66,14 @@ function Death:Damaged(victim, victimDied) self:ResetValues() end -AddEventHandler("gameEventTriggered", function(event, data) - if event ~= "CEventNetworkEntityDamage" then - return - end - Death:Damaged(data[1], data[4]) +AddEventHandler("esx:onPlayerSpawn", function() + Citizen.CreateThreadNow(function() + while not ESX.PlayerData.dead do + if IsPedDeadOrDying(ESX.PlayerData.ped, true) then + Death:Damaged(ESX.PlayerData.ped) + break + end + Citizen.Wait(250) + end + end) end) From e2c4ab73a6a47e7e55f0b1ab98f849222c408df6 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:23:09 +0100 Subject: [PATCH 088/161] refactor(es_extended/client/modules/death): fix typo --- [core]/es_extended/client/modules/death.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index 936d64113..248916b62 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -29,7 +29,7 @@ function Death:ByPlayer() TriggerServerEvent("esx:onPlayerDeath", data) end -function Death:Natual() +function Death:Natural() local coords = GetEntityCoords(ESX.PlayerData.ped) local data = { @@ -60,7 +60,7 @@ function Death:Damaged(victim) if self.killerEntity ~= ESX.PlayerData.ped and self.killerId and isActive then self:ByPlayer() else - self:Natual() + self:Natural() end self:ResetValues() From 1bbd9b119ad3b979f9589929948ed878ca9a845e Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:49:34 +0100 Subject: [PATCH 089/161] refactor(es_extended/client/modules/death): cleanup redundant checks --- [core]/es_extended/client/modules/death.lua | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index 248916b62..ccd7d3806 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -44,12 +44,6 @@ function Death:Natural() end function Death:Damaged(victim) - local victimId = NetworkGetPlayerIndexFromPed(victim) - local isDead = IsPedDeadOrDying(victim, true) or IsPedFatallyInjured(victim) - if victimId ~= ESX.playerId or not isDead then - return - end - self.killerEntity = GetPedSourceOfDeath(ESX.PlayerData.ped) self.deathCause = GetPedCauseOfDeath(ESX.PlayerData.ped) self.killerId = NetworkGetPlayerIndexFromPed(self.killerEntity) @@ -69,7 +63,7 @@ end AddEventHandler("esx:onPlayerSpawn", function() Citizen.CreateThreadNow(function() while not ESX.PlayerData.dead do - if IsPedDeadOrDying(ESX.PlayerData.ped, true) then + if IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped) then Death:Damaged(ESX.PlayerData.ped) break end From 3af9ce34fdea99d7a68d0e0e996332f1db59f9b4 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:50:41 +0100 Subject: [PATCH 090/161] refactor(es_extended/client/modules/death): remove unused function param --- [core]/es_extended/client/modules/death.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index ccd7d3806..810525f20 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -43,7 +43,7 @@ function Death:Natural() TriggerServerEvent("esx:onPlayerDeath", data) end -function Death:Damaged(victim) +function Death:Damaged() self.killerEntity = GetPedSourceOfDeath(ESX.PlayerData.ped) self.deathCause = GetPedCauseOfDeath(ESX.PlayerData.ped) self.killerId = NetworkGetPlayerIndexFromPed(self.killerEntity) @@ -64,7 +64,7 @@ AddEventHandler("esx:onPlayerSpawn", function() Citizen.CreateThreadNow(function() while not ESX.PlayerData.dead do if IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped) then - Death:Damaged(ESX.PlayerData.ped) + Death:Damaged() break end Citizen.Wait(250) From 114c337d6c80766905704765b32e3b01ff2edc1a Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:51:26 +0100 Subject: [PATCH 091/161] refactor(es_extended/client/modules/death): more appropriate function name --- [core]/es_extended/client/modules/death.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index 810525f20..28e860de8 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -43,7 +43,7 @@ function Death:Natural() TriggerServerEvent("esx:onPlayerDeath", data) end -function Death:Damaged() +function Death:Died() self.killerEntity = GetPedSourceOfDeath(ESX.PlayerData.ped) self.deathCause = GetPedCauseOfDeath(ESX.PlayerData.ped) self.killerId = NetworkGetPlayerIndexFromPed(self.killerEntity) @@ -64,7 +64,7 @@ AddEventHandler("esx:onPlayerSpawn", function() Citizen.CreateThreadNow(function() while not ESX.PlayerData.dead do if IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped) then - Death:Damaged() + Death:Died() break end Citizen.Wait(250) From 0fe6ef4b1cfec028be03fb2965d1c2eaf3510e26 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:40:09 +0100 Subject: [PATCH 092/161] fix(es_extended/server/classes/player): remove throwables from loadout when out of ammo --- [core]/es_extended/server/classes/player.lua | 13 +++++++++++-- [core]/es_extended/shared/config/weapons.lua | 16 ++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 2bfeb79fd..9f6c9c8c1 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -608,8 +608,17 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, function self.updateWeaponAmmo(weaponName, ammoCount) local _, weapon = self.getWeapon(weaponName) - if weapon then - weapon.ammo = ammoCount + if not weapon then + return + end + + weapon.ammo = ammoCount + + if weapon.ammo <= 0 then + local index, weaponConfig = ESX.GetWeapon(weaponName) + if weaponConfig.throwable then + self.removeWeapon(weaponName) + end end end diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index d26ab75ab..5b8107ad9 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -1008,22 +1008,22 @@ Config.Weapons = { { name = "WEAPON_RPG", label = TranslateCap("weapon_rpg"), tints = Config.DefaultWeaponTints, components = {}, ammo = { label = TranslateCap("ammo_rockets"), hash = `AMMO_RPG` } }, { name = "WEAPON_RAYMINIGUN", label = TranslateCap("weapon_rayminigun"), tints = Config.DefaultWeaponTints, components = {}, ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MINIGUN` } }, -- Thrown - { name = "WEAPON_BALL", label = TranslateCap("weapon_ball"), components = {}, ammo = { label = TranslateCap("ammo_ball"), hash = `AMMO_BALL` } }, - { name = "WEAPON_BZGAS", label = TranslateCap("weapon_bzgas"), components = {}, ammo = { label = TranslateCap("ammo_bzgas"), hash = `AMMO_BZGAS` } }, + { name = "WEAPON_BALL", label = TranslateCap("weapon_ball"), components = {}, ammo = { label = TranslateCap("ammo_ball"), hash = `AMMO_BALL` }, throwable = true }, + { name = "WEAPON_BZGAS", label = TranslateCap("weapon_bzgas"), components = {}, ammo = { label = TranslateCap("ammo_bzgas"), hash = `AMMO_BZGAS` }, throwable = true }, { name = "WEAPON_FLARE", label = TranslateCap("weapon_flare"), components = {}, ammo = { label = TranslateCap("ammo_flare"), hash = `AMMO_FLARE` } }, - { name = "WEAPON_GRENADE", label = TranslateCap("weapon_grenade"), components = {}, ammo = { label = TranslateCap("ammo_grenade"), hash = `AMMO_GRENADE` } }, + { name = "WEAPON_GRENADE", label = TranslateCap("weapon_grenade"), components = {}, ammo = { label = TranslateCap("ammo_grenade"), hash = `AMMO_GRENADE` }, throwable = true }, { name = "WEAPON_PETROLCAN", label = TranslateCap("weapon_petrolcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, { name = "WEAPON_HAZARDCAN", label = TranslateCap("weapon_hazardcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, - { name = "WEAPON_MOLOTOV", label = TranslateCap("weapon_molotov"), components = {}, ammo = { label = TranslateCap("ammo_molotov"), hash = `AMMO_MOLOTOV` } }, + { name = "WEAPON_MOLOTOV", label = TranslateCap("weapon_molotov"), components = {}, ammo = { label = TranslateCap("ammo_molotov"), hash = `AMMO_MOLOTOV` }, throwable = true }, { name = "WEAPON_PROXMINE", label = TranslateCap("weapon_proxmine"), components = {}, ammo = { label = TranslateCap("ammo_proxmine"), hash = `AMMO_PROXMINE` } }, { name = "WEAPON_PIPEBOMB", label = TranslateCap("weapon_pipebomb"), components = {}, ammo = { label = TranslateCap("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` } }, - { name = "WEAPON_SNOWBALL", label = TranslateCap("weapon_snowball"), components = {}, ammo = { label = TranslateCap("ammo_snowball"), hash = `AMMO_SNOWBALL` } }, - { name = "WEAPON_STICKYBOMB", label = TranslateCap("weapon_stickybomb"), components = {}, ammo = { label = TranslateCap("ammo_stickybomb"), hash = `AMMO_STICKYBOMB` } }, - { name = "WEAPON_SMOKEGRENADE", label = TranslateCap("weapon_smokegrenade"), components = {}, ammo = { label = TranslateCap("ammo_smokebomb"), hash = `AMMO_SMOKEGRENADE` } }, + { name = "WEAPON_SNOWBALL", label = TranslateCap("weapon_snowball"), components = {}, ammo = { label = TranslateCap("ammo_snowball"), hash = `AMMO_SNOWBALL` }, throwable = true }, + { name = "WEAPON_STICKYBOMB", label = TranslateCap("weapon_stickybomb"), components = {}, ammo = { label = TranslateCap("ammo_stickybomb"), hash = `AMMO_STICKYBOMB` }, throwable = true }, + { name = "WEAPON_SMOKEGRENADE", label = TranslateCap("weapon_smokegrenade"), components = {}, ammo = { label = TranslateCap("ammo_smokebomb"), hash = `AMMO_SMOKEGRENADE` }, throwable = true }, -- Tools { name = "WEAPON_FIREEXTINGUISHER", label = TranslateCap("weapon_fireextinguisher"), components = {}, ammo = { label = TranslateCap("ammo_charge"), hash = `AMMO_FIREEXTINGUISHER` } }, { name = "WEAPON_DIGISCANNER", label = TranslateCap("weapon_digiscanner"), components = {} }, - { name = "GADGET_PARACHUTE", label = TranslateCap("gadget_parachute"), components = {} }, + { name = "GADGET_PARACHUTE", label = TranslateCap("gadget_parachute"), components = {}, throwable = true }, { name = "WEAPON_TACTICALRIFLE", label = TranslateCap("weapon_tactilerifle"), From d1cdd3584b6d2c2dc46e1f62ca9eb491d5f1d90f Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 00:09:23 +0100 Subject: [PATCH 093/161] refactor(es_extended/client/main): lowercase ammo --- [core]/es_extended/client/main.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index a4d1daa93..2b82a1d11 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -288,7 +288,7 @@ function StartServerSyncLoops() if Config.CustomInventory then return end -- keep track of ammo CreateThread(function() - local currentWeapon = { Ammo = 0 } + local currentWeapon = { ammo = 0 } while ESX.PlayerLoaded do local sleep = 1500 if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then @@ -298,11 +298,11 @@ function StartServerSyncLoops() if weapon then local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash) if weapon.name ~= currentWeapon.name then - currentWeapon.Ammo = ammoCount + currentWeapon.ammo = ammoCount currentWeapon.name = weapon.name else - if ammoCount ~= currentWeapon.Ammo then - currentWeapon.Ammo = ammoCount + if ammoCount ~= currentWeapon.ammo then + currentWeapon.ammo = ammoCount TriggerServerEvent("esx:updateWeaponAmmo", weapon.name, ammoCount) end end From 6fd92c72d4ca2a977df5d35ac617b9703d3f1327 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 00:47:19 +0100 Subject: [PATCH 094/161] refactor(es_extended/client/main): faster thread, but only update weapon ammo on weapon change --- [core]/es_extended/client/main.lua | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 2b82a1d11..6a3eba711 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -286,29 +286,32 @@ end function StartServerSyncLoops() if Config.CustomInventory then return end - -- keep track of ammo + CreateThread(function() - local currentWeapon = { ammo = 0 } + local currentWeapon = { + ---@type number + ---@diagnostic disable-next-line: assign-type-mismatch + hash = `WEAPON_UNARMED`, + ammo = 0, + } + while ESX.PlayerLoaded do - local sleep = 1500 - if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then - sleep = 1000 - local _, weaponHash = GetCurrentPedWeapon(ESX.PlayerData.ped, true) - local weapon = ESX.GetWeaponFromHash(weaponHash) - if weapon then - local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash) - if weapon.name ~= currentWeapon.name then - currentWeapon.ammo = ammoCount - currentWeapon.name = weapon.name - else - if ammoCount ~= currentWeapon.ammo then - currentWeapon.ammo = ammoCount - TriggerServerEvent("esx:updateWeaponAmmo", weapon.name, ammoCount) - end + currentWeapon.hash = GetSelectedPedWeapon(ESX.PlayerData.ped) + + if currentWeapon.hash ~= `WEAPON_UNARMED` then + local weaponConfig = ESX.GetWeaponFromHash(currentWeapon.hash) + + if weaponConfig then + currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) + while (GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash) do Citizen.Wait(500) end + + local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) + if newAmmo ~= currentWeapon.ammo then + TriggerServerEvent("esx:updateWeaponAmmo", weaponConfig.name, newAmmo) end end end - Wait(sleep) + Wait(250) end end) end From d1412c74123226582513f4c2ed0112eab8ddc5e3 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:30:29 +0100 Subject: [PATCH 095/161] fix(es_extended/client/main): track parachute opening to remove from loadout --- [core]/es_extended/client/main.lua | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 6a3eba711..5df66c321 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -303,7 +303,7 @@ function StartServerSyncLoops() if weaponConfig then currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) - while (GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash) do Citizen.Wait(500) end + while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do Wait(500) end local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) if newAmmo ~= currentWeapon.ammo then @@ -314,6 +314,22 @@ function StartServerSyncLoops() Wait(250) end end) + + CreateThread(function() + local PARACHUTE_OPENING = 1 + local PARACHUTE_OPEN = 2 + + while ESX.PlayerLoaded do + local parachuteState = GetPedParachuteState(ESX.PlayerData.ped) + + if parachuteState == PARACHUTE_OPENING or parachuteState == PARACHUTE_OPEN then + while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end + + TriggerServerEvent("esx:updateWeaponAmmo", "GADGET_PARACHUTE", 0) + end + Wait(500) + end + end) end if not Config.CustomInventory and Config.EnableDefaultInventory then From edc73a1048ef58bbe7e11a039aaf7a57177a6b7b Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:49:41 +0100 Subject: [PATCH 096/161] fix(es_extended/shared/config/weapons): add remaining throwables --- [core]/es_extended/shared/config/weapons.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index 5b8107ad9..82acd9449 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -1010,13 +1010,13 @@ Config.Weapons = { -- Thrown { name = "WEAPON_BALL", label = TranslateCap("weapon_ball"), components = {}, ammo = { label = TranslateCap("ammo_ball"), hash = `AMMO_BALL` }, throwable = true }, { name = "WEAPON_BZGAS", label = TranslateCap("weapon_bzgas"), components = {}, ammo = { label = TranslateCap("ammo_bzgas"), hash = `AMMO_BZGAS` }, throwable = true }, - { name = "WEAPON_FLARE", label = TranslateCap("weapon_flare"), components = {}, ammo = { label = TranslateCap("ammo_flare"), hash = `AMMO_FLARE` } }, + { name = "WEAPON_FLARE", label = TranslateCap("weapon_flare"), components = {}, ammo = { label = TranslateCap("ammo_flare"), hash = `AMMO_FLARE` }, throwable = true }, { name = "WEAPON_GRENADE", label = TranslateCap("weapon_grenade"), components = {}, ammo = { label = TranslateCap("ammo_grenade"), hash = `AMMO_GRENADE` }, throwable = true }, { name = "WEAPON_PETROLCAN", label = TranslateCap("weapon_petrolcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, { name = "WEAPON_HAZARDCAN", label = TranslateCap("weapon_hazardcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, { name = "WEAPON_MOLOTOV", label = TranslateCap("weapon_molotov"), components = {}, ammo = { label = TranslateCap("ammo_molotov"), hash = `AMMO_MOLOTOV` }, throwable = true }, - { name = "WEAPON_PROXMINE", label = TranslateCap("weapon_proxmine"), components = {}, ammo = { label = TranslateCap("ammo_proxmine"), hash = `AMMO_PROXMINE` } }, - { name = "WEAPON_PIPEBOMB", label = TranslateCap("weapon_pipebomb"), components = {}, ammo = { label = TranslateCap("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` } }, + { name = "WEAPON_PROXMINE", label = TranslateCap("weapon_proxmine"), components = {}, ammo = { label = TranslateCap("ammo_proxmine"), hash = `AMMO_PROXMINE` }, throwable = true }, + { name = "WEAPON_PIPEBOMB", label = TranslateCap("weapon_pipebomb"), components = {}, ammo = { label = TranslateCap("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` }, throwable = true }, { name = "WEAPON_SNOWBALL", label = TranslateCap("weapon_snowball"), components = {}, ammo = { label = TranslateCap("ammo_snowball"), hash = `AMMO_SNOWBALL` }, throwable = true }, { name = "WEAPON_STICKYBOMB", label = TranslateCap("weapon_stickybomb"), components = {}, ammo = { label = TranslateCap("ammo_stickybomb"), hash = `AMMO_STICKYBOMB` }, throwable = true }, { name = "WEAPON_SMOKEGRENADE", label = TranslateCap("weapon_smokegrenade"), components = {}, ammo = { label = TranslateCap("ammo_smokebomb"), hash = `AMMO_SMOKEGRENADE` }, throwable = true }, @@ -1057,7 +1057,7 @@ Config.Weapons = { { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_PISTOLXM3_SUPP` }, }, }, - { name = "WEAPON_ACIDPACKAGE", label = TranslateCap("weapon_acidpackage"), components = {} }, + { name = "WEAPON_ACIDPACKAGE", label = TranslateCap("weapon_acidpackage"), components = {}, throwable = true }, { name = "WEAPON_CANDYCANE", label = TranslateCap("weapon_candycane"), components = {} }, { name = "WEAPON_RAILGUNXM3", From 018b663b8a8b5032a4ec9a271c7f1851d3b59da7 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 02:02:33 +0100 Subject: [PATCH 097/161] fix(es_extended/shared/config/weapons): add missing throwables --- [core]/es_extended/shared/config/weapons.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index 82acd9449..e9392f305 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -1012,8 +1012,8 @@ Config.Weapons = { { name = "WEAPON_BZGAS", label = TranslateCap("weapon_bzgas"), components = {}, ammo = { label = TranslateCap("ammo_bzgas"), hash = `AMMO_BZGAS` }, throwable = true }, { name = "WEAPON_FLARE", label = TranslateCap("weapon_flare"), components = {}, ammo = { label = TranslateCap("ammo_flare"), hash = `AMMO_FLARE` }, throwable = true }, { name = "WEAPON_GRENADE", label = TranslateCap("weapon_grenade"), components = {}, ammo = { label = TranslateCap("ammo_grenade"), hash = `AMMO_GRENADE` }, throwable = true }, - { name = "WEAPON_PETROLCAN", label = TranslateCap("weapon_petrolcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, - { name = "WEAPON_HAZARDCAN", label = TranslateCap("weapon_hazardcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` } }, + { name = "WEAPON_PETROLCAN", label = TranslateCap("weapon_petrolcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` }, throwable = true }, + { name = "WEAPON_HAZARDCAN", label = TranslateCap("weapon_hazardcan"), components = {}, ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` }, throwable = true }, { name = "WEAPON_MOLOTOV", label = TranslateCap("weapon_molotov"), components = {}, ammo = { label = TranslateCap("ammo_molotov"), hash = `AMMO_MOLOTOV` }, throwable = true }, { name = "WEAPON_PROXMINE", label = TranslateCap("weapon_proxmine"), components = {}, ammo = { label = TranslateCap("ammo_proxmine"), hash = `AMMO_PROXMINE` }, throwable = true }, { name = "WEAPON_PIPEBOMB", label = TranslateCap("weapon_pipebomb"), components = {}, ammo = { label = TranslateCap("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` }, throwable = true }, From 2b74b5f5e2adb549c22bf601bb0b57dd35e9a689 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 12:55:50 +0100 Subject: [PATCH 098/161] fix(es_extended/client/main): remove parachute immediately on use --- [core]/es_extended/client/main.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 5df66c321..1736b5d1d 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -323,9 +323,9 @@ function StartServerSyncLoops() local parachuteState = GetPedParachuteState(ESX.PlayerData.ped) if parachuteState == PARACHUTE_OPENING or parachuteState == PARACHUTE_OPEN then - while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end - TriggerServerEvent("esx:updateWeaponAmmo", "GADGET_PARACHUTE", 0) + + while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end end Wait(500) end From 0b21afff67aa1434622c56884d3199a65433dcb9 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 14:07:05 +0100 Subject: [PATCH 099/161] fix(es_extended/client/main): revert ammo caching --- [core]/es_extended/client/main.lua | 32 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 1736b5d1d..5ba9fad5c 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -287,14 +287,23 @@ end function StartServerSyncLoops() if Config.CustomInventory then return end - CreateThread(function() - local currentWeapon = { - ---@type number - ---@diagnostic disable-next-line: assign-type-mismatch - hash = `WEAPON_UNARMED`, - ammo = 0, - } + local currentWeapon = { + ---@type number + ---@diagnostic disable-next-line: assign-type-mismatch + hash = `WEAPON_UNARMED`, + ammo = 0, + } + + local function updateCurrentWeaponAmmo(weaponName) + local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) + if newAmmo ~= currentWeapon.ammo then + currentWeapon.ammo = newAmmo + TriggerServerEvent("esx:updateWeaponAmmo", weaponName, newAmmo) + end + end + + CreateThread(function() while ESX.PlayerLoaded do currentWeapon.hash = GetSelectedPedWeapon(ESX.PlayerData.ped) @@ -303,12 +312,13 @@ function StartServerSyncLoops() if weaponConfig then currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) - while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do Wait(500) end - local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) - if newAmmo ~= currentWeapon.ammo then - TriggerServerEvent("esx:updateWeaponAmmo", weaponConfig.name, newAmmo) + while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do + updateCurrentWeaponAmmo(weaponConfig.name) + Wait(1000) end + + updateCurrentWeaponAmmo(weaponConfig.name) end end Wait(250) From 727ef8395eb7ee9d84114e013755be83f5282cb5 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 1 Dec 2024 14:32:52 +0100 Subject: [PATCH 100/161] refactor(es_extended/server/classes/player): index is unused --- [core]/es_extended/server/classes/player.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 9f6c9c8c1..b5e66e7b8 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -615,7 +615,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, weapon.ammo = ammoCount if weapon.ammo <= 0 then - local index, weaponConfig = ESX.GetWeapon(weaponName) + local _, weaponConfig = ESX.GetWeapon(weaponName) if weaponConfig.throwable then self.removeWeapon(weaponName) end From 783c8125d5dcd66c3a6ca6eca2fcc680457ce298 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:11:43 +0100 Subject: [PATCH 101/161] feat(es_extended/client/main): sync where players look at --- [core]/es_extended/client/main.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 5ba9fad5c..08d85b78b 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -44,6 +44,7 @@ RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) Actions:Init() StartPointsLoop() StartServerSyncLoops() + NetworkSetLocalPlayerSyncLookAt(true) end) local isFirstSpawn = true From 2e3917f7d26dd467fd034e3165041d75a3ba9966 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Tue, 3 Dec 2024 22:46:59 +0000 Subject: [PATCH 102/161] tweak(es_extended/callback): remove GetCallbackInfo --- [core]/es_extended/client/modules/callback.lua | 6 ------ [core]/es_extended/server/modules/callback.lua | 6 ------ 2 files changed, 12 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 0230aa874..ec80d76eb 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -135,12 +135,6 @@ function ESX.DoesClientCallbackExist(eventName) return Callbacks.storage[eventName] ~= nil end ----@param eventName string ----@return table | nil -function ESX.GetClientCallbackInfo(eventName) - return Callbacks.storage[eventName] -end - AddEventHandler("onResourceStop", function(resource) for k, v in pairs(Callbacks.storage) do if v.resource == resource then diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index 59fa74351..f01a9da64 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -97,12 +97,6 @@ function ESX.DoesServerCallbackExist(eventName) return Callbacks.storage[eventName] ~= nil end ----@param eventName string ----@return table | nil -function ESX.GetServerCallbackInfo(eventName) - return Callbacks.storage[eventName] -end - AddEventHandler("onResourceStop", function(resource) for k, v in pairs(Callbacks.storage) do if v.resource == resource then From a9a4ff69f9c5d828503ab4dfd67d5dbbf0f6af38 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Tue, 3 Dec 2024 22:49:28 +0000 Subject: [PATCH 103/161] fix(es_extended/client/callback): merge issues --- [core]/es_extended/client/modules/callback.lua | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index ec80d76eb..7a364c92e 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -72,15 +72,6 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...) self:Execute(callback, requestId, returnCb, ...) end -ESX.SecureNetEvent("esx:triggerClientCallback", function(...) - Callbacks:ClientRecieve(...) -end) - - -ESX.SecureNetEvent("esx:serverCallback", function(...) - Callbacks:ServerRecieve(...) -end) - -- ============================================= -- MARK: ESX Functions -- ============================================= @@ -129,6 +120,10 @@ ESX.SecureNetEvent("esx:triggerClientCallback", function(...) Callbacks:ClientRecieve(...) end) +ESX.SecureNetEvent("esx:serverCallback", function(...) + Callbacks:ServerRecieve(...) +end) + ---@param eventName string ---@return boolean function ESX.DoesClientCallbackExist(eventName) From d23b7ceea3b90960f0e2d71a97b353685a716734 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Tue, 3 Dec 2024 22:53:37 +0000 Subject: [PATCH 104/161] tweak(es)extended/client/callback): merging style issues --- [core]/es_extended/client/modules/callback.lua | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 7a364c92e..450f2e3ee 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -109,13 +109,23 @@ function ESX.AwaitServerCallback(eventName, ...) return table.unpack(p.value) end -ESX.RegisterClientCallback = function(eventName, callback) +function ESX.RegisterClientCallback(eventName, callback) local invokingResource = GetInvokingResource() local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended" Callbacks:Register(eventName, invoker, callback) end +---@param eventName string +---@return boolean +function ESX.DoesClientCallbackExist(eventName) + return Callbacks.storage[eventName] ~= nil +end + +-- ============================================= +-- MARK: Events +-- ============================================= + ESX.SecureNetEvent("esx:triggerClientCallback", function(...) Callbacks:ClientRecieve(...) end) @@ -124,12 +134,6 @@ ESX.SecureNetEvent("esx:serverCallback", function(...) Callbacks:ServerRecieve(...) end) ----@param eventName string ----@return boolean -function ESX.DoesClientCallbackExist(eventName) - return Callbacks.storage[eventName] ~= nil -end - AddEventHandler("onResourceStop", function(resource) for k, v in pairs(Callbacks.storage) do if v.resource == resource then From 76a1df36f9a261e735deb12430f7e388e0a50847 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Tue, 3 Dec 2024 22:56:39 +0000 Subject: [PATCH 105/161] fix(es_extended/callback): merge styling issues --- .../es_extended/client/modules/callback.lua | 4 +++ .../es_extended/server/modules/callback.lua | 35 +++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua index 450f2e3ee..6bd2d7586 100644 --- a/[core]/es_extended/client/modules/callback.lua +++ b/[core]/es_extended/client/modules/callback.lua @@ -1,5 +1,9 @@ ---@diagnostic disable: duplicate-set-field +-- ============================================= +-- MARK: Variables +-- ============================================= + Callbacks = {} Callbacks.requests = {} diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index f01a9da64..3301e6a6f 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -1,11 +1,19 @@ ---@diagnostic disable: duplicate-set-field +-- ============================================= +-- MARK: Variables +-- ============================================= + Callbacks = {} Callbacks.requests = {} Callbacks.storage = {} Callbacks.id = 0 +-- ============================================= +-- MARK: Internal Functions +-- ============================================= + function Callbacks:Register(name, resource, cb) self.storage[name] = { resource = resource, @@ -60,15 +68,9 @@ function Callbacks:RecieveClient(requestId, invoker, ...) self.requests[requestId] = nil end -RegisterNetEvent("esx:clientCallback", function(requestId, invoker, ...) - Callbacks:RecieveClient(requestId, invoker, ...) -end) - -RegisterNetEvent("esx:triggerServerCallback", function(eventName, requestId, invoker, ...) - local source = source - Callbacks:ServerRecieve(source, eventName, requestId, invoker, ...) -end) - +-- ============================================= +-- MARK: ESX Functions +-- ============================================= ---@param player number playerId ---@param eventName string @@ -84,7 +86,7 @@ end ---@param eventName string ---@param callback function ---@return nil -ESX.RegisterServerCallback = function(eventName, callback) +function ESX.RegisterServerCallback(eventName, callback) local invokingResource = GetInvokingResource() local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended" @@ -97,6 +99,19 @@ function ESX.DoesServerCallbackExist(eventName) return Callbacks.storage[eventName] ~= nil end +-- ============================================= +-- MARK: Events +-- ============================================= + +RegisterNetEvent("esx:clientCallback", function(requestId, invoker, ...) + Callbacks:RecieveClient(requestId, invoker, ...) +end) + +RegisterNetEvent("esx:triggerServerCallback", function(eventName, requestId, invoker, ...) + local source = source + Callbacks:ServerRecieve(source, eventName, requestId, invoker, ...) +end) + AddEventHandler("onResourceStop", function(resource) for k, v in pairs(Callbacks.storage) do if v.resource == resource then From 1b8774f515a61b519c337846bddaad0544df4b0d Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Wed, 4 Dec 2024 06:00:41 +0000 Subject: [PATCH 106/161] fix(es_extended/client/functions): validate model is a vehicle --- [core]/es_extended/client/functions.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 58252a0f9..8c35eae6a 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -391,7 +391,7 @@ function ESX.UI.Menu.Close(menuType, namespace, name, cancel) else local menu = ESX.UI.Menu.Opened[i] ESX.UI.Menu.RegisteredTypes[menu.type].close(menu.namespace, menu.name) - + if type(menu.cancel) ~= "nil" then menu.cancel(menu.data, menu) end @@ -412,7 +412,7 @@ function ESX.UI.Menu.CloseAll(cancel) else local menu = ESX.UI.Menu.Opened[i] ESX.UI.Menu.RegisteredTypes[menu.type].close(menu.namespace, menu.name) - + if type(menu.cancel) ~= "nil" then menu.cancel(menu.data, menu) end @@ -1585,6 +1585,11 @@ function ESX.GetVehicleTypeClient(model) if not IsModelInCdimage(model) then return false end + + if not IsModelAVehicle(model) then + return false + end + if mismatchedTypes[model] then return mismatchedTypes[model] end From a9b52fadc62524b02fec2436884e89a9f78392c6 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:32:13 +0100 Subject: [PATCH 107/161] chore: add contrinbution guidelines --- CONTRIBUTION_GUIDELINES.md | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 CONTRIBUTION_GUIDELINES.md diff --git a/CONTRIBUTION_GUIDELINES.md b/CONTRIBUTION_GUIDELINES.md new file mode 100644 index 000000000..a97fae66f --- /dev/null +++ b/CONTRIBUTION_GUIDELINES.md @@ -0,0 +1,47 @@ +# Contribution Guidelines + +If you're planning to contribute, **please follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) standard.** + +Pull Requests (PRs) that do not adhere to this standard will **not be accepted**. + +## Branch Requirements + +- **All PRs must be based on the `dev` branch.** +- Merges will only occur into the `dev` branch before being released to the main branch. + +## Commit Message Format + +Ensure your commit messages and PR titles use the following format: + +``` +(): +``` + +For example: +``` +feat(es_extended/client/main): sync where players look at +fix(es_extended/client/functions): validate model is a vehicle +refactor(es_extended/client/modules/death): replace gameEventTriggered +``` + +Common commit types include: +- **`feat`** for new features +- **`fix`** for bug fixes +- **`refactor`** for code improvements without functionality changes +- **`!`** to indicate breaking changes (e.g., `feat!` or `fix!`) + +--- + +## PR Checklist + +**Please include this in your PR.** +``` +- [ ] My commit messages and PR title follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) standard. +- [ ] My changes have been tested locally and function as expected. +- [ ] My PR does not introduce any breaking changes. +- [ ] I have provided a clear explanation of what my PR does, including the reasoning behind the changes and any relevant context. +``` + + +# We value your contribution! +By adhering to these guidelines, we can ensure a clean and maintainable codebase. Thank you for contributing to ESX! \ No newline at end of file From 32fb097428f7bf36d23942ad44a28b47fd3604a5 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:38:36 +0100 Subject: [PATCH 108/161] chore: rename contribution guidelines --- CONTRIBUTION_GUIDELINES.md => CONTRIBUTING.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CONTRIBUTION_GUIDELINES.md => CONTRIBUTING.md (100%) diff --git a/CONTRIBUTION_GUIDELINES.md b/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTION_GUIDELINES.md rename to CONTRIBUTING.md From 7e61031c31cdbad95d31dbcbee24e12c17e477ef Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:30:20 +0100 Subject: [PATCH 109/161] feat(es_extended/server/modules/commands): match target dimension on tp cmds --- [core]/es_extended/server/modules/commands.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/[core]/es_extended/server/modules/commands.lua b/[core]/es_extended/server/modules/commands.lua index 4e9d68625..519f72e4f 100644 --- a/[core]/es_extended/server/modules/commands.lua +++ b/[core]/es_extended/server/modules/commands.lua @@ -593,6 +593,9 @@ ESX.RegisterCommand( "admin", function(xPlayer, args) local targetCoords = args.playerId.getCoords() + local targetDim = GetPlayerRoutingBucket(args.playerId.source) + + SetPlayerRoutingBucket(xPlayer.source, targetDim) xPlayer.setCoords(targetCoords) if Config.AdminLogging then ESX.DiscordLogFields("UserActions", "Admin Teleport /goto Triggered!", "pink", { @@ -619,6 +622,9 @@ ESX.RegisterCommand( function(xPlayer, args) local targetCoords = args.playerId.getCoords() local playerCoords = xPlayer.getCoords() + local srcDim = GetPlayerRoutingBucket(xPlayer.source) + + SetPlayerRoutingBucket(args.playerId.source, srcDim) args.playerId.setCoords(playerCoords) if Config.AdminLogging then ESX.DiscordLogFields("UserActions", "Admin Teleport /bring Triggered!", "pink", { From fcdd257cabdaf711efaa7330c493c79473454bd6 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:33:47 +0100 Subject: [PATCH 110/161] feat(es_extended/server/modules/commands): add /setdim admin cmd --- [core]/es_extended/locales/en.lua | 2 ++ .../es_extended/server/modules/commands.lua | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index c0b71869b..44d622930 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -114,9 +114,11 @@ Locales["en"] = { ["commanderror_invalidcommand"] = "Invalid Command - /%s", ["commanderror_invalidplayerid"] = "Specified Player is not online", ["commandgeneric_playerid"] = "Player`s Server Id", + ["commandgeneric_dimension"] = "Target Dimension", ["command_giveammo_noweapon_found"] = "%s does not have that weapon", ["command_giveammo_weapon"] = "Weapon name", ["command_giveammo_ammo"] = "Ammo Quantity", + ["command_setdim"] = "Set a players dimension", ["tpm_nowaypoint"] = "No Waypoint Set.", ["tpm_success"] = "Successfully Teleported", diff --git a/[core]/es_extended/server/modules/commands.lua b/[core]/es_extended/server/modules/commands.lua index 519f72e4f..7df37401d 100644 --- a/[core]/es_extended/server/modules/commands.lua +++ b/[core]/es_extended/server/modules/commands.lua @@ -732,3 +732,28 @@ ESX.RegisterCommand("players", "admin", function() print(("^1[^2ID: ^5%s^0 | ^2Name : ^5%s^0 | ^2Group : ^5%s^0 | ^2Identifier : ^5%s^1]^0\n"):format(xPlayer.source, xPlayer.getName(), xPlayer.getGroup(), xPlayer.identifier)) end end, true) + +ESX.RegisterCommand( + {"setdim", "setbucket"}, + "admin", + function(xPlayer, args) + SetPlayerRoutingBucket(args.playerId.source, args.dimension) + if Config.AdminLogging then + ESX.DiscordLogFields("UserActions", "Admin Set Dim /setdim Triggered!", "pink", { + { name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true }, + { name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true }, + { name = "Target", value = args.playerId.name, inline = true }, + { name = "Dimension", value = args.dimension, inline = true }, + }) + end + end, + true, + { + help = TranslateCap("command_setdim"), + validate = true, + arguments = { + { name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" }, + { name = "dimension", help = TranslateCap("commandgeneric_dimension"), type = "number" }, + }, + } +) From be7a448feca5b5b513830af68528be8f5179913d Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:42:08 +0100 Subject: [PATCH 111/161] fix(es_extended/server/modules/commands): only set dim if needed --- [core]/es_extended/server/modules/commands.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/modules/commands.lua b/[core]/es_extended/server/modules/commands.lua index 7df37401d..628e85ea8 100644 --- a/[core]/es_extended/server/modules/commands.lua +++ b/[core]/es_extended/server/modules/commands.lua @@ -593,9 +593,12 @@ ESX.RegisterCommand( "admin", function(xPlayer, args) local targetCoords = args.playerId.getCoords() + local srcDim = GetPlayerRoutingBucket(xPlayer.source) local targetDim = GetPlayerRoutingBucket(args.playerId.source) - SetPlayerRoutingBucket(xPlayer.source, targetDim) + if srcDim ~= targetDim then + SetPlayerRoutingBucket(xPlayer.source, targetDim) + end xPlayer.setCoords(targetCoords) if Config.AdminLogging then ESX.DiscordLogFields("UserActions", "Admin Teleport /goto Triggered!", "pink", { @@ -622,9 +625,12 @@ ESX.RegisterCommand( function(xPlayer, args) local targetCoords = args.playerId.getCoords() local playerCoords = xPlayer.getCoords() + local targetDim = GetPlayerRoutingBucket(args.playerId.source) local srcDim = GetPlayerRoutingBucket(xPlayer.source) - SetPlayerRoutingBucket(args.playerId.source, srcDim) + if targetDim ~= srcDim then + SetPlayerRoutingBucket(args.playerId.source, srcDim) + end args.playerId.setCoords(playerCoords) if Config.AdminLogging then ESX.DiscordLogFields("UserActions", "Admin Teleport /bring Triggered!", "pink", { From 6c9726ffbd55061a84ac3a836f3bc5c9f149d53d Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:58:51 +0100 Subject: [PATCH 112/161] refactor(es_extended/server/functions): address lint errors --- [core]/es_extended/server/functions.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index cec340b53..884ef4a57 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -299,14 +299,14 @@ function ESX.GetExtendedPlayers(key, val) local xPlayers = {} if type(val) == "table" then - for i, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(ESX.Players) do checkTable(key, val, xPlayer, xPlayers) end return xPlayers end - for i, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(ESX.Players) do if (key == "job" and xPlayer.job.name == val) or xPlayer[key] == val then xPlayers[#xPlayers + 1] = xPlayer end From 74d1820df29c70b4bb5fb45a6978c04e40a92ff2 Mon Sep 17 00:00:00 2001 From: FirstSanchez <87505001+FirstSanchez@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:35:51 +0100 Subject: [PATCH 113/161] feat(es_extended/locales/de): translated 2 missing locales --- [core]/es_extended/locales/de.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index da224c3a4..5391c0522 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -114,9 +114,11 @@ Locales["de"] = { ["commanderror_invalidcommand"] = "Ungültiger Befehl - /%s", ["commanderror_invalidplayerid"] = "Angegebener Spieler ist nicht online!", ["commandgeneric_playerid"] = "Spieler ID", + ["commandgeneric_dimension"] = "Ziel Dimension", ["command_giveammo_noweapon_found"] = "%s besitzt diese Waffe nicht!", ["command_giveammo_weapon"] = "Waffenname", ["command_giveammo_ammo"] = "Munitionsanzahl", + ["command_setdim"] = "Setzt Spielerdimension!", ["tpm_nowaypoint"] = "Kein Wegpunkt gesetzt!", ["tpm_success"] = "Erfolgreich teleportiert.", From b436fc6072e33ead6a58fa0ba182bc09c0843600 Mon Sep 17 00:00:00 2001 From: FirstSanchez <87505001+FirstSanchez@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:56:58 +0000 Subject: [PATCH 114/161] Space error --- [core]/es_extended/locales/de.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index 5391c0522..8951fdf08 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -118,7 +118,7 @@ Locales["de"] = { ["command_giveammo_noweapon_found"] = "%s besitzt diese Waffe nicht!", ["command_giveammo_weapon"] = "Waffenname", ["command_giveammo_ammo"] = "Munitionsanzahl", - ["command_setdim"] = "Setzt Spielerdimension!", + ["command_setdim"] = "Setzt Spieler Dimension!", ["tpm_nowaypoint"] = "Kein Wegpunkt gesetzt!", ["tpm_success"] = "Erfolgreich teleportiert.", From 23ad35b6e271cdbc3bcba36d3600c40f787ef4d0 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Fri, 6 Dec 2024 22:00:33 +0100 Subject: [PATCH 115/161] feat(es_extended/shared/main): restore backwards compat --- [core]/es_extended/shared/main.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/shared/main.lua b/[core]/es_extended/shared/main.lua index 0e78f0cb7..00f775b46 100644 --- a/[core]/es_extended/shared/main.lua +++ b/[core]/es_extended/shared/main.lua @@ -4,9 +4,12 @@ exports("getSharedObject", function() return ESX end) -AddEventHandler("esx:getSharedObject", function() - local Invoke = GetInvokingResource() - error(("Resource ^5%s^1 Used the ^5getSharedObject^1 Event, this event ^1no longer exists!^1 Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent for how to fix!"):format(Invoke)) +AddEventHandler("esx:getSharedObject", function(cb) + if ESX.IsFunctionReference(cb) then + cb(ESX) + end + local invokingResource = GetInvokingResource() + print(("^3[WARNING]^0 Resource ^5%s^0 used the ^5getSharedObject^0 event. This is not the recommended way to import ESX. Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent to find out why."):format(invokingResource)) end) -- backwards compatibility (DO NOT TOUCH !) From 092b843674177f7712d58bfa90a683a82b9e8c53 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:22:02 +0100 Subject: [PATCH 116/161] feat(es_extended/client/modules/actions): track current ped weapon --- [core]/es_extended/client/modules/actions.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 23189d98b..16c75c80e 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -4,6 +4,7 @@ Actions._index = Actions Actions.inVehicle = false Actions.enteringVehicle = false Actions.inPauseMenu = false +Actions.currentWeapon = false function Actions:GetSeatPedIsIn() for i = -1, 16 do @@ -132,12 +133,24 @@ function Actions:TrackVehicle() end end +function Actions:TrackWeapon() + ---@type number|false + local newWeapon = GetSelectedPedWeapon(ESX.PlayerData.ped) + newWeapon = newWeapon ~= `WEAPON_UNARMED` and newWeapon or false + + if newWeapon ~= self.currentWeapon then + self.currentWeapon = newWeapon + TriggerEvent("esx:weaponChanged", self.currentWeapon) + end +end + function Actions:SlowLoop() CreateThread(function() while ESX.PlayerLoaded do self:TrackPedCoords() self:TrackPauseMenu() self:TrackVehicle() + self:TrackWeapon() Wait(500) end end) From ce773fe7dd1495661e728bb7a726c8d28dd4327e Mon Sep 17 00:00:00 2001 From: xGhostxDev <69668488+xGhostxDev@users.noreply.github.com> Date: Sat, 7 Dec 2024 20:44:27 +0100 Subject: [PATCH 117/161] Create pl.lua Adds translation for Polish language --- [core]/esx_multicharacter/locales/pl.lua | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 [core]/esx_multicharacter/locales/pl.lua diff --git a/[core]/esx_multicharacter/locales/pl.lua b/[core]/esx_multicharacter/locales/pl.lua new file mode 100644 index 000000000..b71f35fd6 --- /dev/null +++ b/[core]/esx_multicharacter/locales/pl.lua @@ -0,0 +1,33 @@ +Locales["pl"] = { + ["male"] = "Mężczyzna", + ["female"] = "Kobieta", + ["select_char"] = "Wybierz postać", + ["select_char_description"] = "Wybierz postać, którą chcesz grać.", + ["create_char"] = "Nowa postać", + ["char_play"] = "Graj", + ["char_play_description"] = "Przejdź do miasta.", + ["char_disabled"] = "Wyłączona", + ["char_disabled_description"] = "Ta postać jest niedostępna.", + ["char_delete"] = "Usuń", + ["char_delete_description"] = "Trwale usuń tę postać.", + ["char_delete_confirmation"] = "Potwierdz usunięcie", + ["char_delete_confirmation_description"] = "Czy na pewno chcesz usunąć wybraną postać?", + ["char_delete_yes_description"] = "Tak, jestem pewien, że chcę usunąć wybraną postać", + ["char_delete_no_description"] = "Nie, wróć do opcji postaci", + ["character"] = "Postać: %s", + ["return"] = "Powrót", + ["return_description"] = "Wróć do wyboru postaci.", + ["command_setslots"] = "Ustaw liczbę slotów dla wielu postaci", + ["command_remslots"] = "Usuń liczbę slotów dla wielu postaci", + ["command_enablechar"] = "Włącz określoną postać", + ["command_disablechar"] = "Wyłącz określoną postać", + ["command_charslot"] = "Numer slotu postaci", + ["command_identifier"] = "Identyfikator postaci", + ["command_slots"] = "# liczba slotów", + ["slotsadd"] = "Ustawiłeś %s slotów dla %s", + ["slotsrem"] = "Usunąłeś sloty dla %s", + ["charenabled"] = "Włączyłeś postać #%s gracza %s", + ["chardisabled"] = "Wyłączyłeś postać #%s gracza %s", + ["charnotfound"] = "Postać #%s gracza %s nie istnieje", + +} From db685e612bb4be2911ec7dbc8c68579a6be015d0 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:30:00 +0100 Subject: [PATCH 118/161] feat(es_extended/client/modules/actions): track vehicle seat --- [core]/es_extended/client/modules/actions.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 16c75c80e..1b2206bb4 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -130,6 +130,20 @@ function Actions:TrackVehicle() end elseif self.inVehicle then self:ExitVehicle() + self:TrackSeat() + end +end + +function Actions:TrackSeat() + if not self.inVehicle then + return + end + + local newSeat = self:GetSeatPedIsIn() + if newSeat ~= self.seat then + self.seat = newSeat + ESX.SetPlayerData("seat", self.seat) + TriggerEvent("esx:vehicleSeatChanged", self.seat) end end From 3c6d88768014f462b994333419856b01c2296505 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:38:13 +0100 Subject: [PATCH 119/161] feat(es_extended/client/modules/actions): add current weapon to playerdata --- [core]/es_extended/client/modules/actions.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 1b2206bb4..89c6757c6 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -154,6 +154,7 @@ function Actions:TrackWeapon() if newWeapon ~= self.currentWeapon then self.currentWeapon = newWeapon + ESX.SetPlayerData("weapon", self.currentWeapon) TriggerEvent("esx:weaponChanged", self.currentWeapon) end end From a84c28f8b288af10369953da5d54056f1294898d Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:55:52 +0100 Subject: [PATCH 120/161] fix(es_extended/client/modules/death): fix death event for multichar relog --- [core]/es_extended/client/modules/death.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index 28e860de8..ab75719cc 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -62,7 +62,7 @@ end AddEventHandler("esx:onPlayerSpawn", function() Citizen.CreateThreadNow(function() - while not ESX.PlayerData.dead do + while ESX.PlayerLoaded and not ESX.PlayerData.dead do if IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped) then Death:Died() break From 9fb586eb8449ab752b3dbc6644346f683c26d4ff Mon Sep 17 00:00:00 2001 From: Gold14567 <70439470+Gold14567@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:03:46 +0100 Subject: [PATCH 121/161] Add files via upload --- [core]/es_extended/locales/tr.lua | 381 ++++++++++++++++++++++++++++++ 1 file changed, 381 insertions(+) create mode 100644 [core]/es_extended/locales/tr.lua diff --git a/[core]/es_extended/locales/tr.lua b/[core]/es_extended/locales/tr.lua new file mode 100644 index 000000000..5215181e2 --- /dev/null +++ b/[core]/es_extended/locales/tr.lua @@ -0,0 +1,381 @@ +Locales["en"] = { + -- Inventory + ["inventory"] = "Envanter ( Ağırlık %s / %s )", + ["use"] = "Kullan", + ["give"] = "Ver", + ["remove"] = "At", + ["return"] = "Geri Ver", + ["give_to"] = "Şuna Ver", + ["amount"] = "Miktar", + ["giveammo"] = "Mermi Ver", + ["amountammo"] = "Mermi Miktarı", + ["noammo"] = "Yeterli Değil!", + ["gave_item"] = "Verilen %sx %s %s'ye", + ["received_item"] = "Alınan %sx %s %s'den", + ["gave_weapon"] = "Verilen %s %s'ye", + ["gave_weapon_ammo"] = "Verilen ~o~%sx %s %s için %s'ye", + ["gave_weapon_withammo"] = "Verilen %s ile ~o~%sx %s %s'ye", + ["gave_weapon_hasalready"] = "%s Zaten Bir %s Sahip", + ["gave_weapon_noweapon"] = "%s O Silahı Sahip Değil", + ["received_weapon"] = "%s'den %s Alındı", + ["received_weapon_ammo"] = "%s'den %s için ~o~%sx %s Alındı", + ["received_weapon_withammo"] = "%s'den %s ile ~o~%sx %s Alındı", + ["received_weapon_hasalready"] = "%s Size Bir %s Vermeye Çalıştı, Ama Zaten Bu Silahınız Var", + ["received_weapon_noweapon"] = "%s Size Bir %s İçin Mermi Vermeye Çalıştı, Ama Bu Silaha Sahip Değilsiniz", + ["gave_account_money"] = "Verilen $%s (%s) %s'ye", + ["received_account_money"] = "Alınan $%s (%s) %s'den", + ["amount_invalid"] = "Geçersiz Miktar", + ["players_nearby"] = "Yakınlarda Hiçbir Oyuncu Yok", + ["ex_inv_lim"] = "İşlem Yapılamaz, %s Ağırlık Sınırı Aşıldı", + ["imp_invalid_quantity"] = "İşlem Yapılamaz, Miktar Geçersiz", + ["imp_invalid_amount"] = "İşlem Yapılamaz, Miktar Geçersiz", + ["threw_standard"] = "Atılan %sx %s", + ["threw_account"] = "Atılan $%s %s", + ["threw_weapon"] = "Atılan %s", + ["threw_weapon_ammo"] = "Atılan %s ile ~o~%sx %s", + ["threw_weapon_already"] = "Bu Silaha Zaten Sahipsiniz", + ["threw_cannot_pickup"] = "Envanter Dolu, Alınamaz!", + ["threw_pickup_prompt"] = "Almak İçin E'ye Basın", + + -- Key mapping + ["keymap_showinventory"] = "Envanteri Göster", + + -- Salary related + ["received_salary"] = "Maaşınız Ödendi: $%s", + ["received_help"] = "Yardım Çekiniz Ödendi: $%s", + ["company_nomoney"] = "Çalıştığınız Şirket Maaşınızı Ödeyebilecek Kadar Zengin Değil", + ["received_paycheck"] = "Maaş Alındı", + ["bank"] = "Maze Bank", + ["account_bank"] = "Banka", + ["account_black_money"] = "Kirli Para", + ["account_money"] = "Nakit", + + ["act_imp"] = "İşlem Yapılamaz", + ["in_vehicle"] = "İşlem Yapılamaz, Oyuncu Araçta", + ["not_in_vehicle"] = "İşlem Yapılamaz, Oyuncu Araçta Değil", + + -- Commands + ["command_bring"] = "Oyuncuyu Yanınıza Getir", + ["command_car"] = "Araç Spawn Et", + ["command_car_car"] = "Araç Modeli veya Hash", + ["command_cardel"] = "Yakınlardaki Araçları Kaldır", + ["command_cardel_radius"] = "Belirtilen Yarıçap İçindeki Tüm Araçları Kaldırır", + ["command_repair"] = "Araçınızı Onarın", + ["command_repair_success"] = "Araç Başarıyla Onarıldı", + ["command_repair_success_target"] = "Bir Yönetici Araçınızı Onardı", + ["command_clear"] = "Sohbeti Temizle", + ["command_clearall"] = "Tüm Oyuncular İçin Sohbeti Temizle", + ["command_clearinventory"] = "Oyuncunun Envanterindeki Tüm Eşyaları Kaldır", + ["command_clearloadout"] = "Oyuncunun Yükündeki Tüm Silahları Kaldır", + ["command_freeze"] = "Bir Oyuncuyu Dondur", + ["command_unfreeze"] = "Bir Oyuncunun Dondurmasını Kaldır", + ["command_giveaccountmoney"] = "Bir Hesaba Para Ver", + ["command_giveaccountmoney_account"] = "Ekleme Yapılacak Hesap", + ["command_giveaccountmoney_amount"] = "Eklemek İçin Miktar", + ["command_giveaccountmoney_invalid"] = "Hesap Adı Geçersiz", + ["command_removeaccountmoney"] = "Bir Hesaptan Para Çek", + ["command_removeaccountmoney_account"] = "Çekilecek Hesap", + ["command_removeaccountmoney_amount"] = "Çekilecek Miktar", + ["command_removeaccountmoney_invalid"] = "Hesap Adı Geçersiz", + ["command_giveitem"] = "Oyuncuya Eşya Ver", + ["command_giveitem_item"] = "Eşya Adı", + ["command_giveitem_count"] = "Miktar", + ["command_giveweapon"] = "Oyuncuya Silah Ver", + ["command_giveweapon_weapon"] = "Silah Adı", + ["command_giveweapon_ammo"] = "Mermi Miktarı", + ["command_giveweapon_hasalready"] = "Oyuncu Zaten Bu Silaha Sahip", + ["command_giveweaponcomponent"] = "Oyuncuya Silah Parçası Ver", + ["command_giveweaponcomponent_component"] = "Parça Adı", + ["command_giveweaponcomponent_invalid"] = "Geçersiz Silah Parçası", + ["command_giveweaponcomponent_hasalready"] = "Oyuncu Zaten Bu Silah Parçasına Sahip", + ["command_giveweaponcomponent_missingweapon"] = "Oyuncu Bu Silaha Sahip Değil", + ["command_goto"] = "Kendinizi Bir Oyuncuya Teleport Et", + ["command_kill"] = "Bir Oyuncuyu Öldür", + ["command_save"] = "Bir Oyuncunun Verilerini Zorla Kaydet", + ["command_saveall"] = "Tüm Oyuncu Verilerini Zorla Kaydet", + ["command_setaccountmoney"] = "Bir Hesaptaki Parayı Ayarla", + ["command_setaccountmoney_amount"] = "Miktar", + ["command_setcoords"] = "Belirtilen Koordinatlara Teleport Ol", + ["command_setcoords_x"] = "X Değeri", + ["command_setcoords_y"] = "Y Değeri", + ["command_setcoords_z"] = "Z Değeri", + ["command_setjob"] = "Bir Oyuncunun Mesleğini Ayarla", + ["command_setjob_job"] = "Adı", + ["command_setjob_grade"] = "Meslek Derecesi", + ["command_setjob_invalid"] = "Meslek, Derece veya Her Ikisi Geçersiz", + ["command_setgroup"] = "Bir Oyuncunun Yetki Grubunu Ayarla", + ["command_setgroup_group"] = "Grup Adı", + ["commanderror_argumentmismatch"] = "Geçersiz Argüman Sayısı (Verilen %s, İstenen %s)", + ["commanderror_argumentmismatch_number"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Metin, İstenen Sayı)", + ["commanderror_argumentmismatch_string"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Sayı, İstenen Metin)", + ["commanderror_invaliditem"] = "Geçersiz Eşya", + ["commanderror_invalidweapon"] = "Geçersiz Silah", + ["commanderror_console"] = "Komut Konsoldan Çalıştırılamaz", + ["commanderror_invalidcommand"] = "Geçersiz Komut - /%s", + ["commanderror_invalidplayerid"] = "Belirtilen Oyuncu Çevrimdışı", + ["commandgeneric_playerid"] = "Oyuncunun Sunucu ID'si", + ["command_giveammo_noweapon_found"] = "%s O Silaha Sahip Değil", + ["command_giveammo_weapon"] = "Silah Adı", + ["command_giveammo_ammo"] = "Mermi Miktarı", + ["tpm_nowaypoint"] = "Hiçbir Yol İşareti Ayarlanmadı.", + ["tpm_success"] = "Başarıyla Teleport Edildi", + + ["noclip_message"] = "Noclip %s Yapıldı", + ["enabled"] = "~g~Aktif Edildi~s~", + ["disabled"] = "~r~Pasif Edildi~s~", + + -- Locale settings + ["locale_digit_grouping_symbol"] = ",", + ["locale_currency"] = "£%s", + + -- Silahlar + + -- Melee + ["weapon_dagger"] = "Kılıç", + ["weapon_bat"] = "Sopa", + ["weapon_battleaxe"] = "Savaş Balta", + ["weapon_bottle"] = "Şişe", + ["weapon_crowbar"] = "Kaldıraç", + ["weapon_flashlight"] = "Fener", + ["weapon_golfclub"] = "Golf Sopası", + ["weapon_hammer"] = "Çekiç", + ["weapon_hatchet"] = "Balta", + ["weapon_knife"] = "Bıçak", + ["weapon_knuckle"] = "Düğmeli Eldiven", + ["weapon_machete"] = "Machete", + ["weapon_nightstick"] = "Gece Dürbünü", + ["weapon_wrench"] = "Anahtar", + ["weapon_poolcue"] = "Havuz Sopası", + ["weapon_stone_hatchet"] = "Taş Balta", + ["weapon_switchblade"] = "Dönme Bıçağı", + + -- Tabancalar + ["weapon_appistol"] = "AP Tabancası", + ["weapon_ceramicpistol"] = "Seramik Tabanca", + ["weapon_combatpistol"] = "Savaş Tabancası", + ["weapon_doubleaction"] = "Çift Aksiyonlu Tabanca", + ["weapon_navyrevolver"] = "Donanma Revolveri", + ["weapon_flaregun"] = "Işık Fişeği Tabancası", + ["weapon_gadgetpistol"] = "Cihaz Tabancası", + ["weapon_heavypistol"] = "Ağır Tabanca", + ["weapon_revolver"] = "Revolver", + ["weapon_revolver_mk2"] = "Revolver MK2", + ["weapon_marksmanpistol"] = "Nişancı Tabancası", + ["weapon_pistol"] = "Tabanca", + ["weapon_pistol_mk2"] = "Tabanca MK2", + ["weapon_pistol50"] = "Tabanca .50", + ["weapon_snspistol"] = "SNS Tabancası", + ["weapon_snspistol_mk2"] = "SNS Tabancası MK2", + ["weapon_stungun"] = "Elektrik Tabancası", + ["weapon_raypistol"] = "Atomizer Tabancası", + ["weapon_vintagepistol"] = "Vintage Tabanca", + + -- Av Tüfekleri + ["weapon_assaultshotgun"] = "Saldırı Tüfeği", + ["weapon_autoshotgun"] = "Otomatik Tüfek", + ["weapon_bullpupshotgun"] = "Bullpup Tüfeği", + ["weapon_combatshotgun"] = "Savaş Tüfeği", + ["weapon_dbshotgun"] = "Çift Namlu Tüfeği", + ["weapon_heavyshotgun"] = "Ağır Tüfek", + ["weapon_musket"] = "Tüfek", + ["weapon_pumpshotgun"] = "Pompalı Tüfek", + ["weapon_pumpshotgun_mk2"] = "Pompalı Tüfek MK2", + ["weapon_sawnoffshotgun"] = "Kısa Namlu Tüfek", + + -- SMG ve LMG + ["weapon_assaultsmg"] = "Saldırı SMG", + ["weapon_combatmg"] = "Savaş MG", + ["weapon_combatmg_mk2"] = "Savaş MG MK2", + ["weapon_combatpdw"] = "Savaş PDW", + ["weapon_gusenberg"] = "Gusenberg Sweeper", + ["weapon_machinepistol"] = "Makine Tabancası", + ["weapon_mg"] = "MG", + ["weapon_microsmg"] = "Micro SMG", + ["weapon_minismg"] = "Mini SMG", + ["weapon_smg"] = "SMG", + ["weapon_smg_mk2"] = "SMG MK2", + ["weapon_raycarbine"] = "Unholy Hellbringer", + + -- Tüfekler + ["weapon_advancedrifle"] = "İleri Düzey Tüfeği", + ["weapon_assaultrifle"] = "Saldırı Tüfeği", + ["weapon_assaultrifle_mk2"] = "Saldırı Tüfeği MK2", + ["weapon_bullpuprifle"] = "Bullpup Tüfeği", + ["weapon_bullpuprifle_mk2"] = "Bullpup Tüfeği MK2", + ["weapon_carbinerifle"] = "Carbine Tüfeği", + ["weapon_carbinerifle_mk2"] = "Carbine Tüfeği MK2", + ["weapon_compactrifle"] = "Komple Tüfek", + ["weapon_militaryrifle"] = "Askeri Tüfek", + ["weapon_specialcarbine"] = "Özel Carbine", + ["weapon_specialcarbine_mk2"] = "Özel Carbine MK2", + ["weapon_heavyrifle"] = "Ağır Tüfek", + + -- Keskin Nişancı + ["weapon_heavysniper"] = "Ağır Keskin Nişancı", + ["weapon_heavysniper_mk2"] = "Ağır Keskin Nişancı MK2", + ["weapon_marksmanrifle"] = "Keskin Nişancı Tüfeği", + ["weapon_marksmanrifle_mk2"] = "Keskin Nişancı Tüfeği MK2", + ["weapon_sniperrifle"] = "Keskin Nişancı Tüfeği", + + -- Ağır / Roket Atıcılar + ["weapon_compactlauncher"] = "Kompakt Roket Atıcı", + ["weapon_firework"] = "Havai Fişek Atıcı", + ["weapon_grenadelauncher"] = "El Bombası Atıcı", + ["weapon_hominglauncher"] = "Hedefli Roket Atıcı", + ["weapon_minigun"] = "Minigun", + ["weapon_railgun"] = "Raylı Silah", + ["weapon_rpg"] = "Roket Atıcı", + ["weapon_rayminigun"] = "Widowmaker", + + -- Suçlu Girişimleri DLC + ["weapon_metaldetector"] = "Metal Dedektörü", + ["weapon_precisionrifle"] = "Keskin Nişancı Tüfeği", + ["weapon_tactilerifle"] = "Hizmet Karabina", + + -- Uyuşturucu Savaşları DLC + ["weapon_candycane"] = "Şeker Kamışı", + ["weapon_acidpackage"] = "Asit Paketi", + ["weapon_pistolxm3"] = "Pistol8 x3m", + ["weapon_railgunxm3"] = "Raylı Silah", + + -- Atılan Silahlar + ["weapon_ball"] = "Beyzbol Topu", + ["weapon_bzgas"] = "BZ Gazı", + ["weapon_flare"] = "Duman Fişeği", + ["weapon_grenade"] = "El Bombası", + ["weapon_petrolcan"] = "Petrol Bidonu", + ["weapon_hazardcan"] = "Tehlikeli Bidon", + ["weapon_molotov"] = "Molotof Kokteyli", + ["weapon_proxmine"] = "Yakınlık Mayını", + ["weapon_pipebomb"] = "Boru Bombası", + ["weapon_snowball"] = "Karla Bombası", + ["weapon_stickybomb"] = "Yapışkan Bomba", + ["weapon_smokegrenade"] = "Gözyaşı Gazı", + + -- Özel + ["weapon_fireextinguisher"] = "Yangın Söndürücü", + ["weapon_digiscanner"] = "Dijital Tarayıcı", + ["weapon_garbagebag"] = "Çöp Torbası", + ["weapon_handcuffs"] = "Kelepçe", + ["gadget_nightvision"] = "Gece Görüşü", + ["gadget_parachute"] = "Paraşüt", + + -- Silah Bileşenleri + ["component_knuckle_base"] = "Temel Model", + ["component_knuckle_pimp"] = "Fahişe", + ["component_knuckle_ballas"] = "Ballas", + ["component_knuckle_dollar"] = "Hustler", + ["component_knuckle_diamond"] = "Elmas", + ["component_knuckle_hate"] = "Nefret", + ["component_knuckle_love"] = "Aşk", + ["component_knuckle_player"] = "Oyuncu", + ["component_knuckle_king"] = "Kral", + ["component_knuckle_vagos"] = "Vagos", + + ["component_luxary_finish"] = "Lüks Silah Kaplama", + + ["component_handle_default"] = "Varsayılan Sap", + ["component_handle_vip"] = "VIP Sap", + ["component_handle_bodyguard"] = "Vücut Koruma Sapı", + + ["component_vip_finish"] = "VIP Kaplama", + ["component_bodyguard_finish"] = "Vücut Koruma Kaplaması", + + ["component_camo_finish"] = "Dijital Kamuflaj", + ["component_camo_finish2"] = "Fırçalama Kamuflaj", + ["component_camo_finish3"] = "Orman Kamuflajı", + ["component_camo_finish4"] = "Kafatası Kamuflajı", + ["component_camo_finish5"] = "Sessanta Nove Kamuflajı", + ["component_camo_finish6"] = "Perseus Kamuflajı", + ["component_camo_finish7"] = "Leopar Kamuflajı", + ["component_camo_finish8"] = "Zebra Kamuflajı", + ["component_camo_finish9"] = "Geometrik Kamuflaj", + ["component_camo_finish10"] = "Boom Kamuflajı", + ["component_camo_finish11"] = "Patriot Kamuflajı", + + ["component_camo_slide_finish"] = "Dijital Kayma Kamuflajı", + ["component_camo_slide_finish2"] = "Fırçalama Kayma Kamuflajı", + ["component_camo_slide_finish3"] = "Orman Kayma Kamuflajı", + ["component_camo_slide_finish4"] = "Kafatası Kayma Kamuflajı", + ["component_camo_slide_finish5"] = "Sessanta Nove Kayma Kamuflajı", + ["component_camo_slide_finish6"] = "Perseus Kayma Kamuflajı", + ["component_camo_slide_finish7"] = "Leopar Kayma Kamuflajı", + ["component_camo_slide_finish8"] = "Zebra Kayma Kamuflajı", + ["component_camo_slide_finish9"] = "Geometrik Kayma Kamuflajı", + ["component_camo_slide_finish10"] = "Boom Kayma Kamuflajı", + ["component_camo_slide_finish11"] = "Patriot Kayma Kamuflajı", + + ["component_clip_default"] = "Varsayılan Şarjör", + ["component_clip_extended"] = "Uzun Şarjör", + ["component_clip_drum"] = "Davul Şarjör", + ["component_clip_box"] = "Kutu Şarjör", + + ["component_scope_holo"] = "Holografik Dürbün", + ["component_scope_small"] = "Küçük Dürbün", + ["component_scope_medium"] = "Orta Dürbün", + ["component_scope_large"] = "Büyük Dürbün", + ["component_scope"] = "Montelenmiş Dürbün", + ["component_scope_advanced"] = "İleri Seviye Dürbün", + ["component_ironsights"] = "Nişangah", + + ["component_suppressor"] = "Susturucu", + ["component_compensator"] = "Dengeleyici", + + ["component_muzzle_flat"] = "Düz Namlu Freni", + ["component_muzzle_tactical"] = "Taktiksel Namlu Freni", + ["component_muzzle_fat"] = "Geniş Uçlu Namlu Freni", + ["component_muzzle_precision"] = "Hassas Namlu Freni", + ["component_muzzle_heavy"] = "Ağır Namlu Freni", + ["component_muzzle_slanted"] = "Eğik Namlu Freni", + ["component_muzzle_split"] = "Bölünmüş Namlu Freni", + ["component_muzzle_squared"] = "Kare Namlu Freni", + + ["component_flashlight"] = "Fener", + ["component_grip"] = "Tutamak", + + ["component_barrel_default"] = "Varsayılan Namlu", + ["component_barrel_heavy"] = "Ağır Namlu", + + ["component_ammo_tracer"] = "Işık İzli Mühimmat", + ["component_ammo_incendiary"] = "Alev Alıcı Mühimmat", + ["component_ammo_hollowpoint"] = "Hollowpoint Mühimmat", + ["component_ammo_fmj"] = "FMJ Mühimmat", + ["component_ammo_armor"] = "Zırh Delici Mühimmat", + ["component_ammo_explosive"] = "Zırh Delici Alev Alıcı Mühimmat", + + ["component_shells_default"] = "Varsayılan Mühimmat", + ["component_shells_incendiary"] = "Dragon's Breath Mühimmatı", + ["component_shells_armor"] = "Çelik Buckshot Mühimmat", + ["component_shells_hollowpoint"] = "Flechette Mühimmat", + ["component_shells_explosive"] = "Patlayıcı Slug Mühimmat", + + -- Silah Mermileri + ["ammo_rounds"] = "Dişli(ler)", + ["ammo_shells"] = "Kovan(lar)", + ["ammo_charge"] = "Şarjör", + ["ammo_petrol"] = "Yakıt Galonları", + ["ammo_firework"] = "Havai Fişek(ler)", + ["ammo_rockets"] = "Roket(ler)", + ["ammo_grenadelauncher"] = "El Bombası(ları)", + ["ammo_grenade"] = "El Bombası(ları)", + ["ammo_stickybomb"] = "Bomba(lar)", + ["ammo_pipebomb"] = "Bomba(lar)", + ["ammo_smokebomb"] = "Bomba(lar)", + ["ammo_molotov"] = "Molotof Kokteyli(leri)", + ["ammo_proxmine"] = "Mayın(lar)", + ["ammo_bzgas"] = "Kutu(lar)", + ["ammo_ball"] = "Top(lar)", + ["ammo_snowball"] = "Kar Topu(ları)", + ["ammo_flare"] = "Duman Fişek(leri)", + ["ammo_flaregun"] = "Duman Fişek(leri)", + + -- Silah Renkleri + ["tint_default"] = "Varsayılan Kaplama", + ["tint_green"] = "Yeşil Kaplama", + ["tint_gold"] = "Altın Kaplama", + ["tint_pink"] = "Pembe Kaplama", + ["tint_army"] = "Ordu Kaplaması", + ["tint_lspd"] = "Mavi Kaplama", + ["tint_orange"] = "Turuncu Kaplama", + ["tint_platinum"] = "Platin Kaplama", +} \ No newline at end of file From 635a556c913e89c829e0159de5229ed58afef6ea Mon Sep 17 00:00:00 2001 From: Gold14567 <70439470+Gold14567@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:21:17 +0100 Subject: [PATCH 122/161] Update tr.lua --- [core]/es_extended/locales/tr.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/locales/tr.lua b/[core]/es_extended/locales/tr.lua index 5215181e2..f12d64957 100644 --- a/[core]/es_extended/locales/tr.lua +++ b/[core]/es_extended/locales/tr.lua @@ -1,4 +1,4 @@ -Locales["en"] = { +Locales["tr"] = { -- Inventory ["inventory"] = "Envanter ( Ağırlık %s / %s )", ["use"] = "Kullan", @@ -378,4 +378,4 @@ Locales["en"] = { ["tint_lspd"] = "Mavi Kaplama", ["tint_orange"] = "Turuncu Kaplama", ["tint_platinum"] = "Platin Kaplama", -} \ No newline at end of file +} From f34f0d2db58c27be7e5022cfaadf327227f190b9 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:05:56 +0100 Subject: [PATCH 123/161] feat(es_extended/server/modules/onesync): add promise support for ESX.OneSync.SpawnVehicle --- [core]/es_extended/server/modules/onesync.lua | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index 87c5f7f0d..a20cd16c3 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -82,35 +82,57 @@ end ---@param coords vector3|table ---@param heading number ---@param properties table ----@param cb function +---@param cb? fun(netId: number) +---@return number|nil netId function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) + if cb and not ESX.IsFunctionReference(cb) then + error("Invalid callback function") + end + + local vehicleModel = joaat(model) local vehicleProperties = properties + local promise = not cb and promise.new() CreateThread(function() local xPlayer = ESX.OneSync.GetClosestPlayer(coords, 300) ESX.GetVehicleType(vehicleModel, xPlayer.id, function(vehicleType) - if vehicleType then - local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading) - local tries = 0 - - while not createdVehicle or createdVehicle == 0 or not GetEntityCoords(createdVehicle) do - Wait(200) - tries = tries + 1 - if tries > 20 then - return error(("Could not spawn vehicle - ^5%s^7!"):format(model)) - end + if not vehicleType then + if (promise) then + return promise:reject(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model)) end - -- luacheck: ignore - SetEntityOrphanMode(createdVehicle, 2) - local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) - Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true) - cb(networkId) - else error(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model)) end + + local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading) + local tries = 0 + + while not createdVehicle or createdVehicle == 0 or not GetEntityCoords(createdVehicle) do + Wait(200) + tries = tries + 1 + if tries > 20 then + if promise then + return promise:reject(("Could not spawn vehicle - ^5%s^7!"):format(model)) + end + error(("Could not spawn vehicle - ^5%s^7!"):format(model)) + end + end + + -- luacheck: ignore + SetEntityOrphanMode(createdVehicle, 2) + local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) + Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true) + if promise then + return promise:resolve(networkId) + elseif cb then + return cb(networkId) + end end) end) + + if promise then + return Citizen.Await(promise) + end end ---@param model number|string From 16e208c7ee93ab9fbcdfec01894715192007f93a Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:14:42 +0100 Subject: [PATCH 124/161] feat(es_extended/client/functions): add promise support for ESX.Game.SpawnVehicle --- [core]/es_extended/client/functions.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 8c35eae6a..f4bce9dba 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -549,6 +549,7 @@ function ESX.Game.SpawnVehicle(vehicleModel, coords, heading, cb, networked) return error(("Resource ^5%s^1 Tried to spawn vehicle on the client but the position is too far away (Out of onesync range)."):format(executingResource)) end + local promise = not cb and promise.new() CreateThread(function() ESX.Streaming.RequestModel(model) @@ -569,10 +570,16 @@ function ESX.Game.SpawnVehicle(vehicleModel, coords, heading, cb, networked) Wait(0) end - if cb then + if promise then + promise:resolve(vehicle) + elseif cb then cb(vehicle) end end) + + if promise then + return Citizen.Await(promise) + end end ---@param vehicle integer The vehicle to spawn From 627d48a0e3b8566587c18eb36fe8f7e6d91c6ffb Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:15:27 +0100 Subject: [PATCH 125/161] fix(es_extended/client/functions): reject on invalid vehicle model --- [core]/es_extended/client/functions.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index f4bce9dba..03b7f1be1 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -551,7 +551,13 @@ function ESX.Game.SpawnVehicle(vehicleModel, coords, heading, cb, networked) local promise = not cb and promise.new() CreateThread(function() - ESX.Streaming.RequestModel(model) + local modelHash = ESX.Streaming.RequestModel(model) + if not modelHash then + if promise then + return promise:reject(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model)) + end + error(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model)) + end local vehicle = CreateVehicle(model, vector.x, vector.y, vector.z, heading, isNetworked, true) From 792543ba390c97060ea840e4e60713b13ee30827 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:38:24 +0100 Subject: [PATCH 126/161] fix(es_extended/client/functions): add optional return type --- [core]/es_extended/client/functions.lua | 2 +- [core]/es_extended/server/modules/onesync.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 03b7f1be1..5959ccac3 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -532,7 +532,7 @@ end ---@param heading number The heading of the vehicle ---@param cb? function The callback function ---@param networked? boolean Whether the vehicle should be networked ----@return nil +---@return number? 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) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index a20cd16c3..671116028 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -83,7 +83,7 @@ end ---@param heading number ---@param properties table ---@param cb? fun(netId: number) ----@return number|nil netId +---@return number? netId function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) if cb and not ESX.IsFunctionReference(cb) then error("Invalid callback function") From 1d9f52802bd700be2cb1492fe22adeca91e1a712 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:42:07 +0100 Subject: [PATCH 127/161] refactor(es_extended/client/functions): validate cb fun --- [core]/es_extended/client/functions.lua | 6 +++++- [core]/es_extended/server/modules/onesync.lua | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 5959ccac3..8a577e7e1 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -530,10 +530,14 @@ end ---@param vehicleModel integer | string The vehicle to spawn ---@param coords table | vector3 The coords to spawn the vehicle at ---@param heading number The heading of the vehicle ----@param cb? function The callback function +---@param cb? fun(vehicle: number) The callback function ---@param networked? boolean Whether the vehicle should be networked ---@return number? vehicle function ESX.Game.SpawnVehicle(vehicleModel, coords, heading, cb, networked) + if cb and not ESX.IsFunctionReference(cb) then + error("Invalid callback function") + end + 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) local isNetworked = networked == nil or networked diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index 671116028..cb914a17a 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -123,9 +123,9 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true) if promise then - return promise:resolve(networkId) + promise:resolve(networkId) elseif cb then - return cb(networkId) + cb(networkId) end end) end) From 276fc69449f4d4a12816147ffaf51492e97c073c Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:11:01 +0100 Subject: [PATCH 128/161] Add ESX.Await function --- [core]/es_extended/shared/functions.lua | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index 1a5d00900..293d73c91 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -170,4 +170,43 @@ function ESX.IsFunctionReference(val) local typeVal = type(val) return typeVal == "function" or (typeVal == "table" and type(getmetatable(val)?.__call) == "function") +end + +---@param conditionFunc function A function that returns a boolean indicating whether the condition is met. +---@param timeout number The maximum time (in milliseconds) to wait for the condition to be met. +---@param errorMessage? string The error message to print if the condition is not met within the timeout period. +---@return boolean: Returns true if the condition is met within the timeout, otherwise returns `false`. +---@return number: The time (in milliseconds) it took to meet the condition, or the timeout time if not met. +ESX.Await = function(conditionFunc, timeout, errorMessage) + timeout = timeout or 1000 + + if timeout < 0 then + error('Timeout should be a positive number.') + end + + local startTime = GetGameTimer() + local prefix = ('[%s] -> '):format(GetInvokingResource()) + + while GetGameTimer() - startTime < timeout do + local success, result = pcall(conditionFunc) + + if not success then + print(prefix .. 'Error while calling conditionFunc! Result: ' .. result) + local elapsedTime = GetGameTimer() - startTime + return false, elapsedTime + end + + if result then + local elapsedTime = GetGameTimer() - startTime + return true, elapsedTime + end + + Wait(10) + end + + if errorMessage then + print(prefix .. errorMessage) + end + + return false, timeout end \ No newline at end of file From 8568e628d55c9ee37f776cb347f5fe0aeb093b97 Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:39:19 +0100 Subject: [PATCH 129/161] Fix EnterVehicle wrong variable name assign --- [core]/es_extended/client/modules/actions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 750d3bea5..190e9472a 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -65,7 +65,7 @@ function Actions:EnterVehicle() local _, netId, plate = self:GetVehicleData() - self.isEnteringVehicle = true + self.enteringVehicle = true TriggerEvent("esx:enteringVehicle", self.vehicle, plate, self.seat, netId) TriggerServerEvent("esx:enteringVehicle", plate, self.seat, netId) From c32c41d718d62836cea6ee29e86e61ee2dfa1cf4 Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Sun, 15 Dec 2024 14:26:57 +0100 Subject: [PATCH 130/161] Addressed PR feedback from Kenshiin13 --- [core]/es_extended/shared/functions.lua | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index 293d73c91..e64112228 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -173,17 +173,22 @@ function ESX.IsFunctionReference(val) end ---@param conditionFunc function A function that returns a boolean indicating whether the condition is met. ----@param timeout number The maximum time (in milliseconds) to wait for the condition to be met. ---@param errorMessage? string The error message to print if the condition is not met within the timeout period. ----@return boolean: Returns true if the condition is met within the timeout, otherwise returns `false`. ----@return number: The time (in milliseconds) it took to meet the condition, or the timeout time if not met. -ESX.Await = function(conditionFunc, timeout, errorMessage) +---@param timeout? number The maximum time (in milliseconds) to wait for the condition to be met. +---@return boolean, number: Returns success status and the time taken +ESX.Await = function(conditionFunc, errorMessage, timeout) timeout = timeout or 1000 if timeout < 0 then error('Timeout should be a positive number.') end + local isFunctionReference = ESX.IsFunctionReference(conditionFunc) + + if not isFunctionReference then + error('Condition Function should be a function reference.') + end + local startTime = GetGameTimer() local prefix = ('[%s] -> '):format(GetInvokingResource()) @@ -191,7 +196,8 @@ ESX.Await = function(conditionFunc, timeout, errorMessage) local success, result = pcall(conditionFunc) if not success then - print(prefix .. 'Error while calling conditionFunc! Result: ' .. result) + local conditionErrorMessage = ('%s Error while calling conditionFunc! Result: %s'):format(prefix, result) + print(conditionErrorMessage) local elapsedTime = GetGameTimer() - startTime return false, elapsedTime end @@ -201,11 +207,14 @@ ESX.Await = function(conditionFunc, timeout, errorMessage) return true, elapsedTime end - Wait(10) + Wait(0) end if errorMessage then - print(prefix .. errorMessage) + ESX.AssertType(errorMessage, 'string', 'errorMessage should be a string.') + + local formattedErrorMessage = ('%s %s'):format(prefix, errorMessage) + print(formattedErrorMessage) end return false, timeout From b6e82bd93da1ceece4c70504215d87995a090283 Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Sun, 15 Dec 2024 15:31:40 +0100 Subject: [PATCH 131/161] Addressing requested changes: pcall replace, errorMessage validation before loop, throwing actual error as formattedErrorMessage --- [core]/es_extended/shared/functions.lua | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index e64112228..4b8b4f2d9 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -189,18 +189,16 @@ ESX.Await = function(conditionFunc, errorMessage, timeout) error('Condition Function should be a function reference.') end + -- since errorMessage is optional, we only validate it if the user provided it. + if errorMessage then + ESX.AssertType(errorMessage, 'string', 'errorMessage should be a string.') + end + local startTime = GetGameTimer() local prefix = ('[%s] -> '):format(GetInvokingResource()) while GetGameTimer() - startTime < timeout do - local success, result = pcall(conditionFunc) - - if not success then - local conditionErrorMessage = ('%s Error while calling conditionFunc! Result: %s'):format(prefix, result) - print(conditionErrorMessage) - local elapsedTime = GetGameTimer() - startTime - return false, elapsedTime - end + local result = conditionFunc() if result then local elapsedTime = GetGameTimer() - startTime @@ -211,10 +209,8 @@ ESX.Await = function(conditionFunc, errorMessage, timeout) end if errorMessage then - ESX.AssertType(errorMessage, 'string', 'errorMessage should be a string.') - local formattedErrorMessage = ('%s %s'):format(prefix, errorMessage) - print(formattedErrorMessage) + error(formattedErrorMessage) end return false, timeout From 9336cfdc69da223d311c4a3bcbe41c25d70d1bb3 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 15 Dec 2024 17:51:12 +0100 Subject: [PATCH 132/161] fix(es_extended/shared/functions): return result of conditionFunc & refactored code --- [core]/es_extended/shared/functions.lua | 42 +++++++++++-------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index 4b8b4f2d9..52e3030ae 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -172,46 +172,40 @@ function ESX.IsFunctionReference(val) return typeVal == "function" or (typeVal == "table" and type(getmetatable(val)?.__call) == "function") end ----@param conditionFunc function A function that returns a boolean indicating whether the condition is met. ----@param errorMessage? string The error message to print if the condition is not met within the timeout period. ----@param timeout? number The maximum time (in milliseconds) to wait for the condition to be met. ----@return boolean, number: Returns success status and the time taken -ESX.Await = function(conditionFunc, errorMessage, timeout) - timeout = timeout or 1000 - - if timeout < 0 then - error('Timeout should be a positive number.') +---@param conditionFunc function A function that is repeatedly called until it returns a truthy value or the timeout is exceeded. +---@param errorMessage? string Optional. If set, an error will be thrown with this message if the condition is not met within the timeout. If not set, no error will be thrown. +---@param timeoutMs? number Optional. The maximum time to wait (in milliseconds) for the condition to be met. Defaults to 1000ms. +---@return boolean, any: Returns success status and the returned value of the condition function. +function ESX.Await(conditionFunc, errorMessage, timeoutMs) + timeoutMs = timeoutMs or 1000 + + if timeoutMs < 0 then + error("Timeout should be a positive number.") end - local isFunctionReference = ESX.IsFunctionReference(conditionFunc) - - if not isFunctionReference then - error('Condition Function should be a function reference.') + if not ESX.IsFunctionReference(conditionFunc) then + error("Condition Function should be a function reference.") end -- since errorMessage is optional, we only validate it if the user provided it. if errorMessage then - ESX.AssertType(errorMessage, 'string', 'errorMessage should be a string.') + ESX.AssertType(errorMessage, "string", "errorMessage should be a string.") end - local startTime = GetGameTimer() - local prefix = ('[%s] -> '):format(GetInvokingResource()) - - while GetGameTimer() - startTime < timeout do + local startTimeMs = GetGameTimer() + while GetGameTimer() - startTimeMs < timeoutMs do local result = conditionFunc() if result then - local elapsedTime = GetGameTimer() - startTime - return true, elapsedTime + return true, result end Wait(0) end if errorMessage then - local formattedErrorMessage = ('%s %s'):format(prefix, errorMessage) - error(formattedErrorMessage) + error(("[%s] -> %s"):format(GetInvokingResource(), errorMessage)) end - return false, timeout -end \ No newline at end of file + return false +end From db68fceccc69f69866e4b316837d1b80e24c15b6 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 15 Dec 2024 17:56:12 +0100 Subject: [PATCH 133/161] fix(es_extended/shared/functions): invokingResource not being displayed --- [core]/es_extended/shared/functions.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/shared/functions.lua b/[core]/es_extended/shared/functions.lua index 52e3030ae..184def1bd 100644 --- a/[core]/es_extended/shared/functions.lua +++ b/[core]/es_extended/shared/functions.lua @@ -192,6 +192,7 @@ function ESX.Await(conditionFunc, errorMessage, timeoutMs) ESX.AssertType(errorMessage, "string", "errorMessage should be a string.") end + local invokingResource = GetInvokingResource() local startTimeMs = GetGameTimer() while GetGameTimer() - startTimeMs < timeoutMs do local result = conditionFunc() @@ -204,7 +205,7 @@ function ESX.Await(conditionFunc, errorMessage, timeoutMs) end if errorMessage then - error(("[%s] -> %s"):format(GetInvokingResource(), errorMessage)) + error(("[%s] -> %s"):format(invokingResource, errorMessage)) end return false From 29fbab3d46653b127a935969dad487ebf73e99c0 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 21:39:12 +0000 Subject: [PATCH 134/161] feat(es_extended/shared): add ox inventory detection back --- [core]/es_extended/shared/config/main.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/shared/config/main.lua b/[core]/es_extended/shared/config/main.lua index 7db1e472b..c87a93393 100644 --- a/[core]/es_extended/shared/config/main.lua +++ b/[core]/es_extended/shared/config/main.lua @@ -51,9 +51,13 @@ 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) --------------------------------------------------------------------- --- DO NOT CHANGE BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING --------------------------------------------------------------------- +------------------------------------- +-- DO NOT CHANGE BELOW THIS LINE !!! +------------------------------------- +if GetResourceState("ox_inventory") ~= "missing" then + Config.CustomInventory = "ox" +end + Config.EnableDefaultInventory = Config.CustomInventory == false -- Display the default Inventory ( F2 ) local txAdminLocale = GetConvar("txAdmin-locale", "en") From 11a26dc7af6c1614e10a01d13a4c5858f1fd2492 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 21:40:33 +0000 Subject: [PATCH 135/161] tweak(es_extended/shared/config/main): adjust comment --- [core]/es_extended/shared/config/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/shared/config/main.lua b/[core]/es_extended/shared/config/main.lua index c87a93393..f769f758e 100644 --- a/[core]/es_extended/shared/config/main.lua +++ b/[core]/es_extended/shared/config/main.lua @@ -1,6 +1,6 @@ Config = {} --- for ox inventory, use Config.CustomInventory = "ox", for others, set to "resource_name" +-- for ox inventory, this will automatically be adjusted, do not change! for other inventories, change to "resource_name" Config.CustomInventory = false Config.Accounts = { From f254c911281c53972f46fb3b3a04ec268d81db24 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 22:48:53 +0000 Subject: [PATCH 136/161] refactor(es_extended/client): rename common.lua and main.lua --- [core]/es_extended/client/common.lua | 30 -- [core]/es_extended/client/events.lua | 594 ++++++++++++++++++++++++++ [core]/es_extended/client/main.lua | 604 +-------------------------- [core]/es_extended/fxmanifest.lua | 4 +- 4 files changed, 616 insertions(+), 616 deletions(-) delete mode 100644 [core]/es_extended/client/common.lua create mode 100644 [core]/es_extended/client/events.lua diff --git a/[core]/es_extended/client/common.lua b/[core]/es_extended/client/common.lua deleted file mode 100644 index 441af7662..000000000 --- a/[core]/es_extended/client/common.lua +++ /dev/null @@ -1,30 +0,0 @@ -Core = {} -Core.Input = {} -Core.Events = {} - -ESX.PlayerData = {} -ESX.PlayerLoaded = false -ESX.playerId = PlayerId() -ESX.serverId = GetPlayerServerId(ESX.playerId) - -ESX.UI = {} -ESX.UI.Menu = {} -ESX.UI.Menu.RegisteredTypes = {} -ESX.UI.Menu.Opened = {} - -ESX.Game = {} -ESX.Game.Utils = {} - -CreateThread(function() - while not Config.Multichar do - Wait(100) - - if NetworkIsPlayerActive(ESX.playerId) then - ESX.DisableSpawnManager() - DoScreenFadeOut(0) - Wait(500) - TriggerServerEvent("esx:onPlayerJoined") - break - end - end -end) diff --git a/[core]/es_extended/client/events.lua b/[core]/es_extended/client/events.lua new file mode 100644 index 000000000..08d85b78b --- /dev/null +++ b/[core]/es_extended/client/events.lua @@ -0,0 +1,594 @@ +local pickups = {} + +ESX.SecureNetEvent("esx:requestModel", function(model) + ESX.Streaming.RequestModel(model) +end) + +RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) + ESX.PlayerData = xPlayer + + if not Config.Multichar then + ESX.SpawnPlayer(skin, ESX.PlayerData.coords, function() + TriggerEvent("esx:onPlayerSpawn") + TriggerEvent("esx:restoreLoadout") + TriggerServerEvent("esx:onPlayerSpawn") + TriggerEvent("esx:loadingScreenOff") + ShutdownLoadingScreen() + ShutdownLoadingScreenNui() + end) + end + + while not DoesEntityExist(ESX.PlayerData.ped) do + Wait(20) + end + + ESX.PlayerLoaded = true + + local timer = GetGameTimer() + while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do + Wait(0) + end + + Adjustments:Load() + + ClearPedTasksImmediately(ESX.PlayerData.ped) + + if not Config.Multichar then + Core.FreezePlayer(false) + end + + if IsScreenFadedOut() then + DoScreenFadeIn(500) + end + + Actions:Init() + StartPointsLoop() + StartServerSyncLoops() + NetworkSetLocalPlayerSyncLookAt(true) +end) + +local isFirstSpawn = true +ESX.SecureNetEvent("esx:onPlayerLogout", function() + ESX.PlayerLoaded = false + isFirstSpawn = true +end) + +ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight) + ESX.SetPlayerData("maxWeight", newMaxWeight) +end) + +local function onPlayerSpawn() + ESX.SetPlayerData("ped", PlayerPedId()) + ESX.SetPlayerData("dead", false) +end + +AddEventHandler("playerSpawned", onPlayerSpawn) +AddEventHandler("esx:onPlayerSpawn", function() + onPlayerSpawn() + + if isFirstSpawn then + isFirstSpawn = false + + if ESX.PlayerData.metadata.health and (ESX.PlayerData.metadata.health > 0 or Config.SaveDeathStatus) then + SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) + end + + if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then + SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor) + end + end +end) + +AddEventHandler("esx:onPlayerDeath", function() + ESX.SetPlayerData("ped", PlayerPedId()) + ESX.SetPlayerData("dead", true) +end) + +AddEventHandler("skinchanger:modelLoaded", function() + while not ESX.PlayerLoaded do + Wait(100) + end + TriggerEvent("esx:restoreLoadout") +end) + +AddEventHandler("esx:restoreLoadout", function() + ESX.SetPlayerData("ped", PlayerPedId()) + + if not Config.CustomInventory then + local ammoTypes = {} + RemoveAllPedWeapons(ESX.PlayerData.ped, true) + + for _, v in ipairs(ESX.PlayerData.loadout) do + local weaponName = v.name + local weaponHash = joaat(weaponName) + + GiveWeaponToPed(ESX.PlayerData.ped, weaponHash, 0, false, false) + SetPedWeaponTintIndex(ESX.PlayerData.ped, weaponHash, v.tintIndex) + + local ammoType = GetPedAmmoTypeFromWeapon(ESX.PlayerData.ped, weaponHash) + + for _, v2 in ipairs(v.components) do + local componentHash = ESX.GetWeaponComponent(weaponName, v2).hash + GiveWeaponComponentToPed(ESX.PlayerData.ped, weaponHash, componentHash) + end + + if not ammoTypes[ammoType] then + AddAmmoToPed(ESX.PlayerData.ped, weaponHash, v.ammo) + ammoTypes[ammoType] = true + end + end + end +end) + +---@diagnostic disable-next-line: param-type-mismatch +AddStateBagChangeHandler("VehicleProperties", nil, function(bagName, _, value) + if not value then + return + end + + bagName = bagName:gsub("entity:", "") + local netId = tonumber(bagName) + if not netId then + error("Tried to set vehicle properties with invalid netId") + return + end + + local vehicle = NetToVeh(netId) + + local tries = 0 + while not NetworkDoesEntityExistWithNetworkId(netId) do + Wait(200) + tries = tries + 1 + if tries > 20 then + return error(("Invalid entity - ^5%s^7!"):format(netId)) + end + end + + if NetworkGetEntityOwner(vehicle) ~= ESX.playerId then + return + end + + ESX.Game.SetVehicleProperties(vehicle, value) +end) + +ESX.SecureNetEvent("esx:setAccountMoney", function(account) + for i = 1, #ESX.PlayerData.accounts do + if ESX.PlayerData.accounts[i].name == account.name then + ESX.PlayerData.accounts[i] = account + break + end + end + + ESX.SetPlayerData("accounts", ESX.PlayerData.accounts) +end) + +if not Config.CustomInventory then + ESX.SecureNetEvent("esx:addInventoryItem", function(item, count, showNotification) + for k, v in ipairs(ESX.PlayerData.inventory) do + if v.name == item then + ESX.UI.ShowInventoryItemNotification(true, v.label, count - v.count) + ESX.PlayerData.inventory[k].count = count + break + end + end + + if showNotification then + ESX.UI.ShowInventoryItemNotification(true, item, count) + end + end) + + ESX.SecureNetEvent("esx:removeInventoryItem", function(item, count, showNotification) + 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 + + if showNotification then + ESX.UI.ShowInventoryItemNotification(false, item, count) + end + end) + + RegisterNetEvent("esx:addWeapon", function() + error("event ^5'esx:addWeapon'^1 Has Been Removed. Please use ^5xPlayer.addWeapon^1 Instead!") + end) + + + RegisterNetEvent("esx:addWeaponComponent", function() + error("event ^5'esx:addWeaponComponent'^1 Has Been Removed. Please use ^5xPlayer.addWeaponComponent^1 Instead!") + end) + + RegisterNetEvent("esx:setWeaponAmmo", function() + error("event ^5'esx:setWeaponAmmo'^1 Has Been Removed. Please use ^5xPlayer.addWeaponAmmo^1 Instead!") + end) + + ESX.SecureNetEvent("esx:setWeaponTint", function(weapon, weaponTintIndex) + SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex) + end) + + RegisterNetEvent("esx:removeWeapon", function() + error("event ^5'esx:removeWeapon'^1 Has Been Removed. Please use ^5xPlayer.removeWeapon^1 Instead!") + end) + + ESX.SecureNetEvent("esx:removeWeaponComponent", function(weapon, weaponComponent) + local componentHash = ESX.GetWeaponComponent(weapon, weaponComponent).hash + RemoveWeaponComponentFromPed(ESX.PlayerData.ped, joaat(weapon), componentHash) + end) +end + +ESX.SecureNetEvent("esx:setJob", function(Job) + ESX.SetPlayerData("job", Job) +end) + +ESX.SecureNetEvent("esx:setGroup", function(group) + ESX.SetPlayerData("group", group) +end) + +if not Config.CustomInventory then + ESX.SecureNetEvent("esx:createPickup", function(pickupId, label, coords, itemType, name, components, tintIndex) + local function setObjectProperties(object) + SetEntityAsMissionEntity(object, true, false) + PlaceObjectOnGroundProperly(object) + FreezeEntityPosition(object, true) + SetEntityCollision(object, false, true) + + pickups[pickupId] = { + obj = object, + label = label, + inRange = false, + coords = coords, + } + end + + 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) + SetWeaponObjectTintIndex(pickupObject, tintIndex) + + for _, v in ipairs(components) do + local component = ESX.GetWeaponComponent(name, v) + if component then + GiveWeaponComponentToWeaponObject(pickupObject, component.hash) + end + end + + setObjectProperties(pickupObject) + else + ESX.Game.SpawnLocalObject("prop_money_bag_01", coords, setObjectProperties) + end + end) + + ESX.SecureNetEvent("esx:createMissingPickups", function(missingPickups) + for pickupId, pickup in pairs(missingPickups) do + TriggerEvent("esx:createPickup", pickupId, pickup.label, vector3(pickup.coords.x, pickup.coords.y, pickup.coords.z - 1.0), pickup.type, pickup.name, pickup.components, pickup.tintIndex) + end + end) +end + +ESX.SecureNetEvent("esx:registerSuggestions", function(registeredCommands) + for name, command in pairs(registeredCommands) do + if command.suggestion then + TriggerEvent("chat:addSuggestion", ("/%s"):format(name), command.suggestion.help, command.suggestion.arguments) + end + end +end) + +if not Config.CustomInventory then + ESX.SecureNetEvent("esx:removePickup", function(pickupId) + if pickups[pickupId] and pickups[pickupId].obj then + ESX.Game.DeleteObject(pickups[pickupId].obj) + pickups[pickupId] = nil + end + end) +end + +function StartServerSyncLoops() + if Config.CustomInventory then return end + + local currentWeapon = { + ---@type number + ---@diagnostic disable-next-line: assign-type-mismatch + hash = `WEAPON_UNARMED`, + ammo = 0, + } + + local function updateCurrentWeaponAmmo(weaponName) + local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) + + if newAmmo ~= currentWeapon.ammo then + currentWeapon.ammo = newAmmo + TriggerServerEvent("esx:updateWeaponAmmo", weaponName, newAmmo) + end + end + + CreateThread(function() + while ESX.PlayerLoaded do + currentWeapon.hash = GetSelectedPedWeapon(ESX.PlayerData.ped) + + if currentWeapon.hash ~= `WEAPON_UNARMED` then + local weaponConfig = ESX.GetWeaponFromHash(currentWeapon.hash) + + if weaponConfig then + currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) + + while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do + updateCurrentWeaponAmmo(weaponConfig.name) + Wait(1000) + end + + updateCurrentWeaponAmmo(weaponConfig.name) + end + end + Wait(250) + end + end) + + CreateThread(function() + local PARACHUTE_OPENING = 1 + local PARACHUTE_OPEN = 2 + + while ESX.PlayerLoaded do + local parachuteState = GetPedParachuteState(ESX.PlayerData.ped) + + if parachuteState == PARACHUTE_OPENING or parachuteState == PARACHUTE_OPEN then + TriggerServerEvent("esx:updateWeaponAmmo", "GADGET_PARACHUTE", 0) + + while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end + end + Wait(500) + end + end) +end + +if not Config.CustomInventory and Config.EnableDefaultInventory then + ESX.RegisterInput("showinv", TranslateCap("keymap_showinventory"), "keyboard", "F2", function() + if not ESX.PlayerData.dead then + ESX.ShowInventory() + end + end) +end + +if not Config.CustomInventory 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 + + local textCoords = pickup.coords + vector3(0.0, 0.0, 0.25) + ESX.Game.Utils.DrawText3D(textCoords, label, 1.2, 1) + elseif pickup.inRange then + pickup.inRange = false + end + end + Wait(Sleep) + end + end) +end + +----- Admin commands from esx_adminplus +ESX.SecureNetEvent("esx:tpm", function() + local GetEntityCoords = GetEntityCoords + local GetGroundZFor_3dCoord = GetGroundZFor_3dCoord + local GetFirstBlipInfoId = GetFirstBlipInfoId + local DoesBlipExist = DoesBlipExist + local DoScreenFadeOut = DoScreenFadeOut + local GetBlipInfoIdCoord = GetBlipInfoIdCoord + local GetVehiclePedIsIn = GetVehiclePedIsIn + + ESX.TriggerServerCallback("esx:isUserAdmin", function(admin) + if not admin then + return + end + local blipMarker = GetFirstBlipInfoId(8) + if not DoesBlipExist(blipMarker) then + ESX.ShowNotification(TranslateCap("tpm_nowaypoint"), "error") + return "marker" + 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 + FreezeEntityPosition(vehicle > 0 and vehicle or ped, true) + + for i = Z_START, 0, -25.0 do + local z = i + if (i % 2) ~= 0 then + z = Z_START - i + end + + 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) + + while not HasCollisionLoadedAroundEntity(ped) do + RequestCollisionAtCoord(x, y, z) + if GetGameTimer() - curTime > 1000 then + break + end + Wait(0) + end + + -- 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 + + -- Remove black screen once the loop has ended. + DoScreenFadeIn(650) + FreezeEntityPosition(vehicle > 0 and vehicle or ped, false) + + 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"), "success") + end + + -- If Z coord was found, set coords in found coords. + SetPedCoordsKeepVehicle(ped, x, y, groundZ) + ESX.ShowNotification(TranslateCap("tpm_success"), "success") + end) +end) + +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, false, false, true) + + 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 + +ESX.SecureNetEvent("esx:noclip", function() + ESX.TriggerServerCallback("esx:isUserAdmin", function(admin) + if not admin then + return + end + + 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 + + if noclip then + ESX.ShowNotification(TranslateCap("noclip_message", Translate("enabled")), "success") + else + ESX.ShowNotification(TranslateCap("noclip_message", Translate("disabled")), "error") + end + end) +end) + +ESX.SecureNetEvent("esx:killPlayer", function() + SetEntityHealth(ESX.PlayerData.ped, 0) +end) + +ESX.SecureNetEvent("esx:repairPedVehicle", function() + local ped = ESX.PlayerData.ped + local vehicle = GetVehiclePedIsIn(ped, false) + SetVehicleEngineHealth(vehicle, 1000) + SetVehicleEngineOn(vehicle, true, true, false) + SetVehicleFixed(vehicle) + SetVehicleDirtLevel(vehicle, 0) +end) + +ESX.SecureNetEvent("esx:freezePlayer", function(input) + if input == "freeze" then + SetEntityCollision(ESX.PlayerData.ped, false, false) + FreezeEntityPosition(ESX.PlayerData.ped, true) + SetPlayerInvincible(ESX.playerId, true) + elseif input == "unfreeze" then + SetEntityCollision(ESX.PlayerData.ped, true, true) + FreezeEntityPosition(ESX.PlayerData.ped, false) + SetPlayerInvincible(ESX.playerId, false) + end +end) + +ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model) + cb(ESX.GetVehicleTypeClient(model)) +end) + +ESX.SecureNetEvent('esx:updatePlayerData', function(key, val) + ESX.SetPlayerData(key, val) +end) + +AddEventHandler("onResourceStop", function(resource) + if Core.Events[resource] then + for i = 1, #Core.Events[resource] do + RemoveEventHandler(Core.Events[resource][i]) + end + end +end) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 08d85b78b..441af7662 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -1,594 +1,30 @@ -local pickups = {} +Core = {} +Core.Input = {} +Core.Events = {} -ESX.SecureNetEvent("esx:requestModel", function(model) - ESX.Streaming.RequestModel(model) -end) - -RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin) - ESX.PlayerData = xPlayer - - if not Config.Multichar then - ESX.SpawnPlayer(skin, ESX.PlayerData.coords, function() - TriggerEvent("esx:onPlayerSpawn") - TriggerEvent("esx:restoreLoadout") - TriggerServerEvent("esx:onPlayerSpawn") - TriggerEvent("esx:loadingScreenOff") - ShutdownLoadingScreen() - ShutdownLoadingScreenNui() - end) - end - - while not DoesEntityExist(ESX.PlayerData.ped) do - Wait(20) - end +ESX.PlayerData = {} +ESX.PlayerLoaded = false +ESX.playerId = PlayerId() +ESX.serverId = GetPlayerServerId(ESX.playerId) - ESX.PlayerLoaded = true +ESX.UI = {} +ESX.UI.Menu = {} +ESX.UI.Menu.RegisteredTypes = {} +ESX.UI.Menu.Opened = {} - local timer = GetGameTimer() - while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do - Wait(0) - end - - Adjustments:Load() - - ClearPedTasksImmediately(ESX.PlayerData.ped) +ESX.Game = {} +ESX.Game.Utils = {} - if not Config.Multichar then - Core.FreezePlayer(false) - end - - if IsScreenFadedOut() then - DoScreenFadeIn(500) - end - - Actions:Init() - StartPointsLoop() - StartServerSyncLoops() - NetworkSetLocalPlayerSyncLookAt(true) -end) - -local isFirstSpawn = true -ESX.SecureNetEvent("esx:onPlayerLogout", function() - ESX.PlayerLoaded = false - isFirstSpawn = true -end) - -ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight) - ESX.SetPlayerData("maxWeight", newMaxWeight) -end) - -local function onPlayerSpawn() - ESX.SetPlayerData("ped", PlayerPedId()) - ESX.SetPlayerData("dead", false) -end - -AddEventHandler("playerSpawned", onPlayerSpawn) -AddEventHandler("esx:onPlayerSpawn", function() - onPlayerSpawn() - - if isFirstSpawn then - isFirstSpawn = false - - if ESX.PlayerData.metadata.health and (ESX.PlayerData.metadata.health > 0 or Config.SaveDeathStatus) then - SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health) - end - - if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then - SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor) - end - end -end) - -AddEventHandler("esx:onPlayerDeath", function() - ESX.SetPlayerData("ped", PlayerPedId()) - ESX.SetPlayerData("dead", true) -end) - -AddEventHandler("skinchanger:modelLoaded", function() - while not ESX.PlayerLoaded do +CreateThread(function() + while not Config.Multichar do Wait(100) - end - TriggerEvent("esx:restoreLoadout") -end) - -AddEventHandler("esx:restoreLoadout", function() - ESX.SetPlayerData("ped", PlayerPedId()) - - if not Config.CustomInventory then - local ammoTypes = {} - RemoveAllPedWeapons(ESX.PlayerData.ped, true) - - for _, v in ipairs(ESX.PlayerData.loadout) do - local weaponName = v.name - local weaponHash = joaat(weaponName) - - GiveWeaponToPed(ESX.PlayerData.ped, weaponHash, 0, false, false) - SetPedWeaponTintIndex(ESX.PlayerData.ped, weaponHash, v.tintIndex) - - local ammoType = GetPedAmmoTypeFromWeapon(ESX.PlayerData.ped, weaponHash) - - for _, v2 in ipairs(v.components) do - local componentHash = ESX.GetWeaponComponent(weaponName, v2).hash - GiveWeaponComponentToPed(ESX.PlayerData.ped, weaponHash, componentHash) - end - - if not ammoTypes[ammoType] then - AddAmmoToPed(ESX.PlayerData.ped, weaponHash, v.ammo) - ammoTypes[ammoType] = true - end - end - end -end) - ----@diagnostic disable-next-line: param-type-mismatch -AddStateBagChangeHandler("VehicleProperties", nil, function(bagName, _, value) - if not value then - return - end - - bagName = bagName:gsub("entity:", "") - local netId = tonumber(bagName) - if not netId then - error("Tried to set vehicle properties with invalid netId") - return - end - - local vehicle = NetToVeh(netId) - - local tries = 0 - while not NetworkDoesEntityExistWithNetworkId(netId) do - Wait(200) - tries = tries + 1 - if tries > 20 then - return error(("Invalid entity - ^5%s^7!"):format(netId)) - end - end - - if NetworkGetEntityOwner(vehicle) ~= ESX.playerId then - return - end - - ESX.Game.SetVehicleProperties(vehicle, value) -end) - -ESX.SecureNetEvent("esx:setAccountMoney", function(account) - for i = 1, #ESX.PlayerData.accounts do - if ESX.PlayerData.accounts[i].name == account.name then - ESX.PlayerData.accounts[i] = account - break - end - end - - ESX.SetPlayerData("accounts", ESX.PlayerData.accounts) -end) - -if not Config.CustomInventory then - ESX.SecureNetEvent("esx:addInventoryItem", function(item, count, showNotification) - for k, v in ipairs(ESX.PlayerData.inventory) do - if v.name == item then - ESX.UI.ShowInventoryItemNotification(true, v.label, count - v.count) - ESX.PlayerData.inventory[k].count = count - break - end - end - - if showNotification then - ESX.UI.ShowInventoryItemNotification(true, item, count) - end - end) - - ESX.SecureNetEvent("esx:removeInventoryItem", function(item, count, showNotification) - 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 - - if showNotification then - ESX.UI.ShowInventoryItemNotification(false, item, count) - end - end) - - RegisterNetEvent("esx:addWeapon", function() - error("event ^5'esx:addWeapon'^1 Has Been Removed. Please use ^5xPlayer.addWeapon^1 Instead!") - end) - - - RegisterNetEvent("esx:addWeaponComponent", function() - error("event ^5'esx:addWeaponComponent'^1 Has Been Removed. Please use ^5xPlayer.addWeaponComponent^1 Instead!") - end) - - RegisterNetEvent("esx:setWeaponAmmo", function() - error("event ^5'esx:setWeaponAmmo'^1 Has Been Removed. Please use ^5xPlayer.addWeaponAmmo^1 Instead!") - end) - - ESX.SecureNetEvent("esx:setWeaponTint", function(weapon, weaponTintIndex) - SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex) - end) - - RegisterNetEvent("esx:removeWeapon", function() - error("event ^5'esx:removeWeapon'^1 Has Been Removed. Please use ^5xPlayer.removeWeapon^1 Instead!") - end) - - ESX.SecureNetEvent("esx:removeWeaponComponent", function(weapon, weaponComponent) - local componentHash = ESX.GetWeaponComponent(weapon, weaponComponent).hash - RemoveWeaponComponentFromPed(ESX.PlayerData.ped, joaat(weapon), componentHash) - end) -end - -ESX.SecureNetEvent("esx:setJob", function(Job) - ESX.SetPlayerData("job", Job) -end) - -ESX.SecureNetEvent("esx:setGroup", function(group) - ESX.SetPlayerData("group", group) -end) - -if not Config.CustomInventory then - ESX.SecureNetEvent("esx:createPickup", function(pickupId, label, coords, itemType, name, components, tintIndex) - local function setObjectProperties(object) - SetEntityAsMissionEntity(object, true, false) - PlaceObjectOnGroundProperly(object) - FreezeEntityPosition(object, true) - SetEntityCollision(object, false, true) - - pickups[pickupId] = { - obj = object, - label = label, - inRange = false, - coords = coords, - } - end - - 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) - SetWeaponObjectTintIndex(pickupObject, tintIndex) - - for _, v in ipairs(components) do - local component = ESX.GetWeaponComponent(name, v) - if component then - GiveWeaponComponentToWeaponObject(pickupObject, component.hash) - end - end - - setObjectProperties(pickupObject) - else - ESX.Game.SpawnLocalObject("prop_money_bag_01", coords, setObjectProperties) - end - end) - - ESX.SecureNetEvent("esx:createMissingPickups", function(missingPickups) - for pickupId, pickup in pairs(missingPickups) do - TriggerEvent("esx:createPickup", pickupId, pickup.label, vector3(pickup.coords.x, pickup.coords.y, pickup.coords.z - 1.0), pickup.type, pickup.name, pickup.components, pickup.tintIndex) - end - end) -end - -ESX.SecureNetEvent("esx:registerSuggestions", function(registeredCommands) - for name, command in pairs(registeredCommands) do - if command.suggestion then - TriggerEvent("chat:addSuggestion", ("/%s"):format(name), command.suggestion.help, command.suggestion.arguments) - end - end -end) - -if not Config.CustomInventory then - ESX.SecureNetEvent("esx:removePickup", function(pickupId) - if pickups[pickupId] and pickups[pickupId].obj then - ESX.Game.DeleteObject(pickups[pickupId].obj) - pickups[pickupId] = nil - end - end) -end - -function StartServerSyncLoops() - if Config.CustomInventory then return end - - local currentWeapon = { - ---@type number - ---@diagnostic disable-next-line: assign-type-mismatch - hash = `WEAPON_UNARMED`, - ammo = 0, - } - - local function updateCurrentWeaponAmmo(weaponName) - local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) - - if newAmmo ~= currentWeapon.ammo then - currentWeapon.ammo = newAmmo - TriggerServerEvent("esx:updateWeaponAmmo", weaponName, newAmmo) - end - end - - CreateThread(function() - while ESX.PlayerLoaded do - currentWeapon.hash = GetSelectedPedWeapon(ESX.PlayerData.ped) - if currentWeapon.hash ~= `WEAPON_UNARMED` then - local weaponConfig = ESX.GetWeaponFromHash(currentWeapon.hash) - - if weaponConfig then - currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash) - - while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do - updateCurrentWeaponAmmo(weaponConfig.name) - Wait(1000) - end - - updateCurrentWeaponAmmo(weaponConfig.name) - end - end - Wait(250) - end - end) - - CreateThread(function() - local PARACHUTE_OPENING = 1 - local PARACHUTE_OPEN = 2 - - while ESX.PlayerLoaded do - local parachuteState = GetPedParachuteState(ESX.PlayerData.ped) - - if parachuteState == PARACHUTE_OPENING or parachuteState == PARACHUTE_OPEN then - TriggerServerEvent("esx:updateWeaponAmmo", "GADGET_PARACHUTE", 0) - - while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end - end + if NetworkIsPlayerActive(ESX.playerId) then + ESX.DisableSpawnManager() + DoScreenFadeOut(0) Wait(500) - end - end) -end - -if not Config.CustomInventory and Config.EnableDefaultInventory then - ESX.RegisterInput("showinv", TranslateCap("keymap_showinventory"), "keyboard", "F2", function() - if not ESX.PlayerData.dead then - ESX.ShowInventory() - end - end) -end - -if not Config.CustomInventory 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 - - local textCoords = pickup.coords + vector3(0.0, 0.0, 0.25) - ESX.Game.Utils.DrawText3D(textCoords, label, 1.2, 1) - elseif pickup.inRange then - pickup.inRange = false - end - end - Wait(Sleep) - end - end) -end - ------ Admin commands from esx_adminplus -ESX.SecureNetEvent("esx:tpm", function() - local GetEntityCoords = GetEntityCoords - local GetGroundZFor_3dCoord = GetGroundZFor_3dCoord - local GetFirstBlipInfoId = GetFirstBlipInfoId - local DoesBlipExist = DoesBlipExist - local DoScreenFadeOut = DoScreenFadeOut - local GetBlipInfoIdCoord = GetBlipInfoIdCoord - local GetVehiclePedIsIn = GetVehiclePedIsIn - - ESX.TriggerServerCallback("esx:isUserAdmin", function(admin) - if not admin then - return - end - local blipMarker = GetFirstBlipInfoId(8) - if not DoesBlipExist(blipMarker) then - ESX.ShowNotification(TranslateCap("tpm_nowaypoint"), "error") - return "marker" - 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 - FreezeEntityPosition(vehicle > 0 and vehicle or ped, true) - - for i = Z_START, 0, -25.0 do - local z = i - if (i % 2) ~= 0 then - z = Z_START - i - end - - 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) - - while not HasCollisionLoadedAroundEntity(ped) do - RequestCollisionAtCoord(x, y, z) - if GetGameTimer() - curTime > 1000 then - break - end - Wait(0) - end - - -- 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 - - -- Remove black screen once the loop has ended. - DoScreenFadeIn(650) - FreezeEntityPosition(vehicle > 0 and vehicle or ped, false) - - 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"), "success") - end - - -- If Z coord was found, set coords in found coords. - SetPedCoordsKeepVehicle(ped, x, y, groundZ) - ESX.ShowNotification(TranslateCap("tpm_success"), "success") - end) -end) - -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, false, false, true) - - 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 - -ESX.SecureNetEvent("esx:noclip", function() - ESX.TriggerServerCallback("esx:isUserAdmin", function(admin) - if not admin then - return - end - - 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 - - if noclip then - ESX.ShowNotification(TranslateCap("noclip_message", Translate("enabled")), "success") - else - ESX.ShowNotification(TranslateCap("noclip_message", Translate("disabled")), "error") - end - end) -end) - -ESX.SecureNetEvent("esx:killPlayer", function() - SetEntityHealth(ESX.PlayerData.ped, 0) -end) - -ESX.SecureNetEvent("esx:repairPedVehicle", function() - local ped = ESX.PlayerData.ped - local vehicle = GetVehiclePedIsIn(ped, false) - SetVehicleEngineHealth(vehicle, 1000) - SetVehicleEngineOn(vehicle, true, true, false) - SetVehicleFixed(vehicle) - SetVehicleDirtLevel(vehicle, 0) -end) - -ESX.SecureNetEvent("esx:freezePlayer", function(input) - if input == "freeze" then - SetEntityCollision(ESX.PlayerData.ped, false, false) - FreezeEntityPosition(ESX.PlayerData.ped, true) - SetPlayerInvincible(ESX.playerId, true) - elseif input == "unfreeze" then - SetEntityCollision(ESX.PlayerData.ped, true, true) - FreezeEntityPosition(ESX.PlayerData.ped, false) - SetPlayerInvincible(ESX.playerId, false) - end -end) - -ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model) - cb(ESX.GetVehicleTypeClient(model)) -end) - -ESX.SecureNetEvent('esx:updatePlayerData', function(key, val) - ESX.SetPlayerData(key, val) -end) - -AddEventHandler("onResourceStop", function(resource) - if Core.Events[resource] then - for i = 1, #Core.Events[resource] do - RemoveEventHandler(Core.Events[resource][i]) + TriggerServerEvent("esx:onPlayerJoined") + break end end end) diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 848289bf8..1e51f401b 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -40,14 +40,14 @@ server_scripts { } client_scripts { - 'client/common.lua', + 'client/main.lua', 'client/functions.lua', 'client/modules/wrapper.lua', 'client/modules/callback.lua', 'client/modules/adjustments.lua', 'client/modules/points.lua', - 'client/main.lua', + 'client/events.lua', 'client/modules/actions.lua', 'client/modules/death.lua', From c00a9b6ab7985ce17f00f65e3f9e3e297232e8fb Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 22:50:31 +0000 Subject: [PATCH 137/161] refactor(es_extended/client): move events.lua to modules --- [core]/es_extended/client/{ => modules}/events.lua | 0 [core]/es_extended/fxmanifest.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename [core]/es_extended/client/{ => modules}/events.lua (100%) diff --git a/[core]/es_extended/client/events.lua b/[core]/es_extended/client/modules/events.lua similarity index 100% rename from [core]/es_extended/client/events.lua rename to [core]/es_extended/client/modules/events.lua diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 1e51f401b..b6726c248 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -47,7 +47,7 @@ client_scripts { 'client/modules/adjustments.lua', 'client/modules/points.lua', - 'client/events.lua', + 'client/modules/events.lua', 'client/modules/actions.lua', 'client/modules/death.lua', From ab19608dc245397d0052c2b2eda5b5644884ab74 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 23:31:00 +0000 Subject: [PATCH 138/161] chore(es_extended/server): remove actions.lua --- [core]/es_extended/server/modules/actions.lua | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 [core]/es_extended/server/modules/actions.lua diff --git a/[core]/es_extended/server/modules/actions.lua b/[core]/es_extended/server/modules/actions.lua deleted file mode 100644 index e7c91e6ac..000000000 --- a/[core]/es_extended/server/modules/actions.lua +++ /dev/null @@ -1,28 +0,0 @@ -RegisterNetEvent("esx:playerPedChanged") -RegisterNetEvent("esx:playerJumping") -RegisterNetEvent("esx:enteringVehicle") -RegisterNetEvent("esx:enteringVehicleAborted") -RegisterNetEvent("esx:enteredVehicle") -RegisterNetEvent("esx:exitedVehicle") - -if Config.EnableDebug then - AddEventHandler("esx:playerPedChanged", function(netId) - print("esx:playerPedChanged", source, netId) - end) - - AddEventHandler("esx:enteringVehicle", function(plate, seat, netId) - print("esx:enteringVehicle", "source", source, "plate", plate, "seat", seat, "netId", netId) - end) - - AddEventHandler("esx:enteringVehicleAborted", function() - print("esx:enteringVehicleAborted", source) - end) - - AddEventHandler("esx:enteredVehicle", function(plate, seat, displayName, netId) - print("esx:enteredVehicle", "source", source, "plate", plate, "seat", seat, "displayName", displayName, "netId", netId) - end) - - AddEventHandler("esx:exitedVehicle", function(plate, seat, displayName, netId) - print("esx:exitedVehicle", "source", source, "plate", plate, "seat", seat, "displayName", displayName, "netId", netId) - end) -end From 4c8f577d8136ebef89d5c6d99d303e32387f5a10 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 23:32:13 +0000 Subject: [PATCH 139/161] tweak(es_extended/fxmanifest): remove actions.lua --- [core]/es_extended/fxmanifest.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 848289bf8..9fe19a960 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -34,7 +34,6 @@ server_scripts { 'server/modules/commands.lua', 'server/bridge/**/*.lua', - 'server/modules/actions.lua', 'server/modules/npwd.lua', 'server/modules/createJob.lua' } From 023dfa509b1b461f91a2ba963f73cb997bb59d5a Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Sun, 15 Dec 2024 23:53:43 +0000 Subject: [PATCH 140/161] feat(es_extended/client/actions): add debug prints --- [core]/es_extended/client/modules/actions.lua | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 002cf0c9a..0ff99ff94 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -49,6 +49,10 @@ function Actions:TrackPed() ESX.SetPlayerData("ped", newPed) TriggerEvent("esx:playerPedChanged", newPed) + + if Config.EnableDebug then + print("[DEBUG] Player ped changed:", newPed) + end end end @@ -58,6 +62,10 @@ function Actions:TrackPauseMenu() if isActive ~= self.inPauseMenu then self.inPauseMenu = isActive TriggerEvent("esx:pauseMenuActive", isActive) + + if Config.EnableDebug then + print("[DEBUG] Pause menu active:", isActive) + end end end @@ -71,6 +79,10 @@ function Actions:EnterVehicle() TriggerServerEvent("esx:enteringVehicle", plate, self.seat, netId) self:SetVehicleStatus() + + if Config.EnableDebug then + print("[DEBUG] Entering vehicle:", self.vehicle, plate, self.seat, netId) + end end function Actions:ResetVehicleData() @@ -87,6 +99,10 @@ function Actions:EnterAborted() TriggerEvent("esx:enteringVehicleAborted") TriggerServerEvent("esx:enteringVehicleAborted") + + if Config.EnableDebug then + print("[DEBUG] Entering vehicle aborted") + end end function Actions:WarpEnter() @@ -100,6 +116,10 @@ function Actions:WarpEnter() self:SetVehicleStatus() TriggerEvent("esx:enteredVehicle", self.vehicle, plate, self.seat, displayName, netId) TriggerServerEvent("esx:enteredVehicle", plate, self.seat, displayName, netId) + + if Config.EnableDebug then + print("[DEBUG] Entered vehicle:", self.vehicle, plate, self.seat, displayName, netId) + end end function Actions:ExitVehicle() @@ -111,6 +131,10 @@ function Actions:ExitVehicle() TriggerEvent("esx:exitedVehicle", self.vehicle, plate, self.seat, displayName, netId) TriggerServerEvent("esx:exitedVehicle", plate, self.seat, displayName, netId) + if Config.EnableDebug then + print("[DEBUG] Exited vehicle:", self.vehicle, plate, self.seat, displayName, netId) + end + self:ResetVehicleData() end end @@ -144,6 +168,10 @@ function Actions:TrackSeat() self.seat = newSeat ESX.SetPlayerData("seat", self.seat) TriggerEvent("esx:vehicleSeatChanged", self.seat) + + if Config.EnableDebug then + print("[DEBUG] Vehicle seat changed:", self.seat) + end end end @@ -156,6 +184,10 @@ function Actions:TrackWeapon() self.currentWeapon = newWeapon ESX.SetPlayerData("weapon", self.currentWeapon) TriggerEvent("esx:weaponChanged", self.currentWeapon) + + if Config.EnableDebug then + print("[DEBUG] Weapon changed:", self.currentWeapon) + end end end From 00eafee422de29071465a8f194ba5e2cd18ff123 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Mon, 16 Dec 2024 21:43:26 +0000 Subject: [PATCH 141/161] fix(es_extended/server/onesync): better vehicle spawning method --- [core]/es_extended/server/modules/onesync.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index cb914a17a..de4f4eb8d 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -107,10 +107,10 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading) local tries = 0 - while not createdVehicle or createdVehicle == 0 or not GetEntityCoords(createdVehicle) do + while not createdVehicle or createdVehicle == 0 or NetworkGetEntityOwner(createdVehicle) == -1 do Wait(200) tries = tries + 1 - if tries > 20 then + if tries > 40 then if promise then return promise:reject(("Could not spawn vehicle - ^5%s^7!"):format(model)) end @@ -122,6 +122,7 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) SetEntityOrphanMode(createdVehicle, 2) local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true) + if promise then promise:resolve(networkId) elseif cb then From f7faee7e23adcff30d77cdefe820431ea68ef981 Mon Sep 17 00:00:00 2001 From: Sergio <89666307+feelfreetofee@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:55:54 +0100 Subject: [PATCH 142/161] refactor(es_extended/client/imports/point.lua) and (es_extended/client/modules/points.lua): Performace Improvement Inside loop is now handled in the same resource as long more than one point is nearby. --- [core]/es_extended/client/imports/point.lua | 95 +++++++++------- [core]/es_extended/client/modules/points.lua | 111 +++++++++---------- 2 files changed, 106 insertions(+), 100 deletions(-) diff --git a/[core]/es_extended/client/imports/point.lua b/[core]/es_extended/client/imports/point.lua index 55ec92bca..5c505cc82 100644 --- a/[core]/es_extended/client/imports/point.lua +++ b/[core]/es_extended/client/imports/point.lua @@ -1,44 +1,53 @@ -Point = ESX.Class() - -function Point:constructor(properties) - self.coords = properties.coords - self.hidden = properties.hidden or false - self.inside = properties.inside or function() end - self.enter = properties.enter or function() end - self.leave = properties.leave or function() end - self.handle = ESX.CreatePointInternal(properties.coords, properties.distance, properties.hidden, function() - self.nearby = true - if self.enter then - self:enter() - end - if self.inside then - CreateThread(function() - while self.nearby do - local coords = GetEntityCoords(ESX.PlayerData.ped) - self.currDistance = #(coords - self.coords) - self:inside() - Wait(0) - end - end) - end - end, function() - self.nearby = false - if self.leave then - self:leave() - end - end) -end - -function Point:delete() - ESX.RemovePointInternal(self.handle) -end - -function Point:toggle(hidden) - if hidden == nil then - hidden = not self.hidden - end - self.hidden = hidden - ESX.HidePointInternal(self.handle, hidden) -end - +local Point = ESX.Class() + +local nearby, loop = {} + +function Point:constructor(properties) + self.coords = properties.coords + self.hidden = properties.hidden + self.enter = properties.enter + self.leave = properties.leave + self.inside = properties.inside + self.handle = ESX.CreatePointInternal(properties.coords, properties.distance, properties.hidden, function() + nearby[self.handle] = self + if self.enter then + self:enter() + end + if not loop then + loop = true + CreateThread(function() + while loop do + local coords = GetEntityCoords(ESX.PlayerData.ped) + for handle, point in pairs(nearby) do + if point.inside then + point:inside(#(coords - point.coords)) + end + end + Wait() + end + end) + end + end, function() + nearby[self.handle] = nil + if self.leave then + self:leave() + end + if #nearby == 0 then + loop = false + end + end) +end + +function Point:delete() + ESX.RemovePointInternal(self.handle) +end + +function Point:toggle(hidden) + if hidden == nil then + hidden = not self.hidden + end + self.hidden = hidden + ESX.HidePointInternal(self.handle, hidden) +end + return Point \ No newline at end of file diff --git a/[core]/es_extended/client/modules/points.lua b/[core]/es_extended/client/modules/points.lua index fee318be6..bbcaf8a82 100644 --- a/[core]/es_extended/client/modules/points.lua +++ b/[core]/es_extended/client/modules/points.lua @@ -1,57 +1,54 @@ -local points = {} - -function ESX.CreatePointInternal(coords, distance, hidden, enter, leave) - local point = { - coords = coords, - distance = distance, - hidden = hidden, - enter = enter, - leave = leave, - resource = GetInvokingResource() - } - local handle = ESX.Table.SizeOf(points) + 1 - points[handle] = point - return handle -end - -function ESX.RemovePointInternal(handle) - points[handle] = nil -end - -function ESX.HidePointInternal(handle, hidden) - if points[handle] then - points[handle].hidden = hidden - end -end - -function StartPointsLoop() - CreateThread(function() - while true do - local coords = GetEntityCoords(ESX.PlayerData.ped) - for i, point in pairs(points) do - local distance = #(coords - point.coords) - - if not point.hidden and distance <= point.distance then - if not point.nearby then - points[i].nearby = true - points[i].enter() - end - point.currentDistance = distance - elseif point.nearby then - points[i].nearby = false - points[i].leave() - end - end - Wait(500) - end - end) -end - - -AddEventHandler('onResourceStop', function(resource) - for i, point in pairs(points) do - if point.resource == resource then - points[i] = nil - end - end -end) +local points = {} + +function ESX.CreatePointInternal(coords, distance, hidden, enter, leave) + local point = { + coords = coords, + distance = distance, + hidden = hidden, + enter = enter, + leave = leave, + resource = GetInvokingResource() + } + local handle = ESX.Table.SizeOf(points) + 1 + points[handle] = point + return handle +end + +function ESX.RemovePointInternal(handle) + points[handle] = nil +end + +function ESX.HidePointInternal(handle, hidden) + if points[handle] then + points[handle].hidden = hidden + end +end + +function StartPointsLoop() + CreateThread(function() + while true do + local coords = GetEntityCoords(ESX.PlayerData.ped) + for handle, point in pairs(points) do + if not point.hidden and #(coords - point.coords) <= point.distance then + if not point.nearby then + points[handle].nearby = true + points[handle].enter() + end + elseif point.nearby then + points[handle].nearby = false + points[handle].leave() + end + end + Wait(500) + end + end) +end + + +AddEventHandler('onResourceStop', function(resource) + for handle, point in pairs(points) do + if point.resource == resource then + points[handle] = nil + end + end +end) \ No newline at end of file From 3a3c3f1ed1c5fe66fa9aa2b4e856f58aaf07971d Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 23 Dec 2024 00:07:22 +0100 Subject: [PATCH 143/161] fix(es_extended/imports): wait for ped to be set before setting PlayerLoaded --- [core]/es_extended/imports.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index d6eb1449e..2727995d3 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -14,6 +14,7 @@ if not IsDuplicityVersion() then -- Only register this event for the client RegisterNetEvent("esx:playerLoaded", function(xPlayer) ESX.PlayerData = xPlayer + while not ESX.PlayerData.ped or not DoesEntityExist(ESX.PlayerData.ped) do Wait(0) end ESX.PlayerLoaded = true end) From 831e4097f7c5ee8eb4ca78dbf0a498b66f8ad4a5 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:37:15 +0100 Subject: [PATCH 144/161] fix(es_extended/client/modules/actions): fix ped change not propogating --- [core]/es_extended/client/modules/actions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 0ff99ff94..028ded073 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -45,8 +45,8 @@ function Actions:TrackPed() local newPed = PlayerPedId() if playerPed ~= newPed then - ESX.PlayerData.ped = newPed ESX.SetPlayerData("ped", newPed) + ESX.PlayerData.ped = newPed TriggerEvent("esx:playerPedChanged", newPed) From 553303fd282f117076f44d45c6254b7b5aef22a2 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:39:48 +0100 Subject: [PATCH 145/161] fix(es_extended/client/modules/death): fix death module trying to access invalid ped --- [core]/es_extended/client/modules/death.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/client/modules/death.lua b/[core]/es_extended/client/modules/death.lua index ab75719cc..ba3fb846d 100644 --- a/[core]/es_extended/client/modules/death.lua +++ b/[core]/es_extended/client/modules/death.lua @@ -63,7 +63,7 @@ end AddEventHandler("esx:onPlayerSpawn", function() Citizen.CreateThreadNow(function() while ESX.PlayerLoaded and not ESX.PlayerData.dead do - if IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped) then + if DoesEntityExist(ESX.PlayerData.ped) and (IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped)) then Death:Died() break end From cb153c2fecd40d57e2ab6ffb89a5a558c35ee225 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:52:23 +0100 Subject: [PATCH 146/161] fix(es_extended/client/modules/actions): avoid manually setting playerdata entirely --- [core]/es_extended/client/modules/actions.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index 028ded073..98b864b1d 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -46,7 +46,6 @@ function Actions:TrackPed() if playerPed ~= newPed then ESX.SetPlayerData("ped", newPed) - ESX.PlayerData.ped = newPed TriggerEvent("esx:playerPedChanged", newPed) From ef9d689873a01de1c34c754a2479bf5c571e080d Mon Sep 17 00:00:00 2001 From: Epyi <68242948+epyidev@users.noreply.github.com> Date: Wed, 25 Dec 2024 11:35:18 +0100 Subject: [PATCH 147/161] feat: add missing translations for french language --- [core]/es_extended/locales/fr.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/[core]/es_extended/locales/fr.lua b/[core]/es_extended/locales/fr.lua index 3792406e2..a0a132b43 100644 --- a/[core]/es_extended/locales/fr.lua +++ b/[core]/es_extended/locales/fr.lua @@ -114,9 +114,11 @@ Locales["fr"] = { ["commanderror_invalidcommand"] = "Commande invalide - /%s", ["commanderror_invalidplayerid"] = "Le joueur spécifié n'est pas connecté", ["commandgeneric_playerid"] = "Identifiant serveur du joueur", + ["commandgeneric_dimension"] = "Dimension de la cible", ["command_giveammo_noweapon_found"] = "%s n'a pas cette arme", ["command_giveammo_weapon"] = "Nom de l'arme", ["command_giveammo_ammo"] = "Quantité de munitions", + ["command_setdim"] = "Définir la dimension d'un joueur", ["tpm_nowaypoint"] = "Aucun point n'est défini sur la carte", ["tpm_success"] = "Vous avez bien été téléporté", From 8608043bdab37a6bb90beb5e9874e36a737b44ba Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:23:56 +0100 Subject: [PATCH 148/161] refactor!(es_extended): move JobsPlayerCount into core --- [core]/es_extended/server/common.lua | 2 +- [core]/es_extended/server/functions.lua | 4 ++-- [core]/es_extended/server/main.lua | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index edbc39529..9819957c3 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,8 +1,8 @@ ESX.Players = {} ESX.Jobs = {} -ESX.JobsPlayerCount = {} ESX.Items = {} Core = {} +Core.JobsPlayerCount = {} Core.UsableItemsCallbacks = {} Core.RegisteredCommands = {} Core.Pickups = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 884ef4a57..ff02e961b 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -327,7 +327,7 @@ function ESX.GetNumPlayers(key, val) local numPlayers = {} if key == "job" then for _, v in ipairs(val) do - numPlayers[v] = (ESX.JobsPlayerCount[v] or 0) + numPlayers[v] = (Core.JobsPlayerCount[v] or 0) end return numPlayers end @@ -340,7 +340,7 @@ function ESX.GetNumPlayers(key, val) end if key == "job" then - return (ESX.JobsPlayerCount[val] or 0) + return (Core.JobsPlayerCount[val] or 0) end return #ESX.GetExtendedPlayers(key, val) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 61fbe78ed..fe0821a08 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -318,10 +318,10 @@ AddEventHandler("playerDropped", function(reason) if xPlayer then TriggerEvent("esx:playerDropped", playerId, reason) local job = xPlayer.getJob().name - local currentJob = ESX.JobsPlayerCount[job] - ESX.JobsPlayerCount[job] = ((currentJob and currentJob > 0) and currentJob or 1) - 1 + local currentJob = Core.JobsPlayerCount[job] + Core.JobsPlayerCount[job] = ((currentJob and currentJob > 0) and currentJob or 1) - 1 - GlobalState[("%s:count"):format(job)] = ESX.JobsPlayerCount[job] + GlobalState[("%s:count"):format(job)] = Core.JobsPlayerCount[job] Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() @@ -335,20 +335,20 @@ AddEventHandler("esx:playerLoaded", function(_, xPlayer) local job = xPlayer.getJob().name local jobKey = ("%s:count"):format(job) - ESX.JobsPlayerCount[job] = (ESX.JobsPlayerCount[job] or 0) + 1 - GlobalState[jobKey] = ESX.JobsPlayerCount[job] + Core.JobsPlayerCount[job] = (Core.JobsPlayerCount[job] or 0) + 1 + GlobalState[jobKey] = Core.JobsPlayerCount[job] end) AddEventHandler("esx:setJob", function(_, job, lastJob) local lastJobKey = ("%s:count"):format(lastJob.name) local jobKey = ("%s:count"):format(job.name) - local currentLastJob = ESX.JobsPlayerCount[lastJob.name] + local currentLastJob = Core.JobsPlayerCount[lastJob.name] - ESX.JobsPlayerCount[lastJob.name] = ((currentLastJob and currentLastJob > 0) and currentLastJob or 1) - 1 - ESX.JobsPlayerCount[job.name] = (ESX.JobsPlayerCount[job.name] or 0) + 1 + Core.JobsPlayerCount[lastJob.name] = ((currentLastJob and currentLastJob > 0) and currentLastJob or 1) - 1 + Core.JobsPlayerCount[job.name] = (Core.JobsPlayerCount[job.name] or 0) + 1 - GlobalState[lastJobKey] = ESX.JobsPlayerCount[lastJob.name] - GlobalState[jobKey] = ESX.JobsPlayerCount[job.name] + GlobalState[lastJobKey] = Core.JobsPlayerCount[lastJob.name] + GlobalState[jobKey] = Core.JobsPlayerCount[job.name] end) AddEventHandler("esx:playerLogout", function(playerId, cb) From f6dcb82f274b07cf4ce20ce795e953e1ce0000dd Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:29:19 +0100 Subject: [PATCH 149/161] refactor!(es_extended): move Jobs into core --- [core]/es_extended/server/classes/player.lua | 2 +- [core]/es_extended/server/common.lua | 2 +- [core]/es_extended/server/functions.lua | 8 ++++---- [core]/es_extended/server/main.lua | 6 +++--- [core]/es_extended/server/modules/createJob.lua | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index b5e66e7b8..c20948c08 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -527,7 +527,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, onDuty = Config.DefaultJobDuty end - local jobObject, gradeObject = ESX.Jobs[newJob], ESX.Jobs[newJob].grades[grade] + local jobObject, gradeObject = Core.Jobs[newJob], Core.Jobs[newJob].grades[grade] self.job = { id = jobObject.id, diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 9819957c3..a53588ee2 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,7 +1,7 @@ ESX.Players = {} -ESX.Jobs = {} ESX.Items = {} Core = {} +Core.Jobs = {} Core.JobsPlayerCount = {} Core.UsableItemsCallbacks = {} Core.RegisteredCommands = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index ff02e961b..54ebd5b82 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -495,9 +495,9 @@ function ESX.RefreshJobs() if not Jobs then -- Fallback data, if no jobs exist - ESX.Jobs["unemployed"] = { label = "Unemployed", grades = { ["0"] = { grade = 0, label = "Unemployed", salary = 200, skin_male = {}, skin_female = {} } } } + Core.Jobs["unemployed"] = { label = "Unemployed", grades = { ["0"] = { grade = 0, label = "Unemployed", salary = 200, skin_male = {}, skin_female = {} } } } else - ESX.Jobs = Jobs + Core.Jobs = Jobs end end @@ -558,7 +558,7 @@ end ---@return table function ESX.GetJobs() - return ESX.Jobs + return Core.Jobs end ---@return table @@ -601,7 +601,7 @@ end ---@param grade string ---@return boolean function ESX.DoesJobExist(job, grade) - return (ESX.Jobs[job] and ESX.Jobs[job].grades[tostring(grade)] ~= nil) or false + return (Core.Jobs[job] and Core.Jobs[job].grades[tostring(grade)] ~= nil) or false end ---@param playerId string | number diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index fe0821a08..27b621517 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -69,7 +69,7 @@ end if Config.Multichar then AddEventHandler("esx:onPlayerJoined", function(src, char, data) - while not next(ESX.Jobs) do + while not next(Core.Jobs) do Wait(50) end @@ -85,7 +85,7 @@ if Config.Multichar then else RegisterNetEvent("esx:onPlayerJoined", function() local _source = source - while not next(ESX.Jobs) do + while not next(Core.Jobs) do Wait(50) end @@ -171,7 +171,7 @@ function loadESXPlayer(identifier, playerId, isNew) job, grade = "unemployed", "0" end - local jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] + local jobObject, gradeObject = Core.Jobs[job], Core.Jobs[job].grades[grade] userData.job = { id = jobObject.id, diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua index c4c09eff6..866b6d5c7 100644 --- a/[core]/es_extended/server/modules/createJob.lua +++ b/[core]/es_extended/server/modules/createJob.lua @@ -6,7 +6,7 @@ local NOTIFY_TYPES = { } local function doesJobAndGradesExist(name, grades) - if not ESX.Jobs[name] then + if not Core.Jobs[name] then return false end @@ -86,7 +86,7 @@ function ESX.CreateJob(name, label, grades) return success end - ESX.Jobs[name] = generateNewJobTable(name, label, grades) + Core.Jobs[name] = generateNewJobTable(name, label, grades) notify("SUCCESS", currentResourceName, 'Job created successfully: `%s`', name) From dd6f0533ff77d1db62e1ed66d5d96f9b8ffe9645 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:31:18 +0100 Subject: [PATCH 150/161] refactor!(es_extended): move Items into core --- .../es_extended/server/bridge/inventory/oxinventory.lua | 4 ++-- [core]/es_extended/server/classes/player.lua | 4 ++-- [core]/es_extended/server/common.lua | 4 ++-- [core]/es_extended/server/functions.lua | 8 ++++---- [core]/es_extended/server/main.lua | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/[core]/es_extended/server/bridge/inventory/oxinventory.lua b/[core]/es_extended/server/bridge/inventory/oxinventory.lua index 62b4c2afd..f3771968c 100644 --- a/[core]/es_extended/server/bridge/inventory/oxinventory.lua +++ b/[core]/es_extended/server/bridge/inventory/oxinventory.lua @@ -3,12 +3,12 @@ if Config.CustomInventory ~= "ox" then return end MySQL.ready(function() TriggerEvent("__cfx_export_ox_inventory_Items", function(ref) if ref then - ESX.Items = ref() + Core.Items = ref() end end) AddEventHandler("ox_inventory:itemList", function(items) - ESX.Items = items + Core.Items = items end) end) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index c20948c08..5a4463e9c 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -464,8 +464,8 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, ---@param count number ---@return boolean function self.canCarryItem(itemName, count) - if ESX.Items[itemName] then - local currentWeight, itemWeight = self.weight, ESX.Items[itemName].weight + if Core.Items[itemName] then + local currentWeight, itemWeight = self.weight, Core.Items[itemName].weight local newWeight = currentWeight + (itemWeight * count) return newWeight <= self.maxWeight diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index a53588ee2..993d44bc9 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,6 +1,6 @@ ESX.Players = {} -ESX.Items = {} Core = {} +Core.Items = {} Core.Jobs = {} Core.JobsPlayerCount = {} Core.UsableItemsCallbacks = {} @@ -37,7 +37,7 @@ MySQL.ready(function() if not Config.CustomInventory then local items = MySQL.query.await("SELECT * FROM items") for _, v in ipairs(items) do - ESX.Items[v.name] = { label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove } + Core.Items[v.name] = { label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove } end end diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 54ebd5b82..d03ccec7e 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -116,7 +116,7 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) error = TranslateCap("commanderror_argumentmismatch_string", k) end elseif v.type == "item" then - if ESX.Items[args[k]] then + if Core.Items[args[k]] then newArgs[v.name] = args[k] else error = TranslateCap("commanderror_invaliditem") @@ -513,7 +513,7 @@ end ---@param ... any ---@return nil function ESX.UseItem(source, item, ...) - if ESX.Items[item] then + if Core.Items[item] then local itemCallback = Core.UsableItemsCallbacks[item] if itemCallback then @@ -549,8 +549,8 @@ end ---@return string? ---@diagnostic disable-next-line: duplicate-set-field function ESX.GetItemLabel(item) - if ESX.Items[item] then - return ESX.Items[item].label + if Core.Items[item] then + return Core.Items[item].label else print(("[^3WARNING^7] Attemting to get invalid Item -> ^5%s^7"):format(item)) end diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 27b621517..2c2ec4062 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -191,7 +191,7 @@ function loadESXPlayer(identifier, playerId, isNew) if not Config.CustomInventory then local inventory = (result.inventory and result.inventory ~= "") and json.decode(result.inventory) or {} - for name, item in pairs(ESX.Items) do + for name, item in pairs(Core.Items) do local count = inventory[name] or 0 userData.weight += (count * item.weight) From c88c9be1f4ffdaf7672b04f9705ce1c185593750 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:37:14 +0100 Subject: [PATCH 151/161] refactor!(es_extended): move players into core --- [core]/es_extended/server/common.lua | 4 ++-- [core]/es_extended/server/functions.lua | 18 +++++++++--------- [core]/es_extended/server/main.lua | 10 +++++----- [core]/es_extended/server/modules/npwd.lua | 2 +- [core]/es_extended/server/modules/onesync.lua | 2 +- [core]/es_extended/server/modules/paycheck.lua | 2 +- 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 993d44bc9..281e94391 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,5 +1,5 @@ -ESX.Players = {} Core = {} +Core.Players = {} Core.Items = {} Core.Jobs = {} Core.JobsPlayerCount = {} @@ -14,7 +14,7 @@ Core.playersByIdentifier = {} Core.vehicleTypesByModel = {} RegisterNetEvent("esx:onPlayerSpawn", function() - ESX.Players[source].spawned = true + Core.Players[source].spawned = true end) if Config.CustomInventory then diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index d03ccec7e..399b5761c 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -64,7 +64,7 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) if not command.allowConsole and playerId == 0 then print(("[^3WARNING^7] ^5%s"):format(TranslateCap("commanderror_console"))) else - local xPlayer, error = ESX.Players[playerId], nil + local xPlayer, error = Core.Players[playerId], nil if command.suggestion then if command.suggestion.validate then @@ -234,7 +234,7 @@ end ---@param cb? function ---@return nil function Core.SavePlayers(cb) - local xPlayers = ESX.Players + local xPlayers = Core.Players if not next(xPlayers) then return end @@ -242,7 +242,7 @@ function Core.SavePlayers(cb) local startTime = os.time() local parameters = {} - for _, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(Core.Players) do updateHealthAndArmorInMetadata(xPlayer) parameters[#parameters + 1] = { json.encode(xPlayer.getAccounts(true)), @@ -294,19 +294,19 @@ end ---@return table function ESX.GetExtendedPlayers(key, val) if not key then - return ESX.Table.ToArray(ESX.Players) + return ESX.Table.ToArray(Core.Players) end local xPlayers = {} if type(val) == "table" then - for _, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(Core.Players) do checkTable(key, val, xPlayer, xPlayers) end return xPlayers end - for _, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(Core.Players) do if (key == "job" and xPlayer.job.name == val) or xPlayer[key] == val then xPlayers[#xPlayers + 1] = xPlayer end @@ -349,7 +349,7 @@ end ---@param source number ---@return table function ESX.GetPlayerFromId(source) - return ESX.Players[tonumber(source)] + return Core.Players[tonumber(source)] end ---@param identifier string @@ -582,7 +582,7 @@ if not Config.CustomInventory then ---@return nil function ESX.CreatePickup(itemType, name, count, label, playerId, components, tintIndex, coords) local pickupId = (Core.PickupId == 65635 and 0 or Core.PickupId + 1) - local xPlayer = ESX.Players[playerId] + local xPlayer = Core.Players[playerId] coords = ((type(coords) == "vector3" or type(coords) == "vector4") and coords.xyz or xPlayer.getCoords(true)) Core.Pickups[pickupId] = { type = itemType, name = name, count = count, label = label, coords = coords } @@ -612,6 +612,6 @@ function Core.IsPlayerAdmin(playerId) return true end - local xPlayer = ESX.Players[playerId] + local xPlayer = Core.Players[playerId] return (xPlayer and Config.AdminGroups[xPlayer.group] and true) or false end diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 2c2ec4062..814caef30 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -73,7 +73,7 @@ if Config.Multichar then Wait(50) end - if not ESX.Players[src] then + if not Core.Players[src] then local identifier = char .. ":" .. ESX.GetIdentifier(src) if data then createESXPlayer(identifier, src, data) @@ -89,7 +89,7 @@ else Wait(50) end - if not ESX.Players[_source] then + if not Core.Players[_source] then onPlayerJoined(_source) end end) @@ -258,7 +258,7 @@ function loadESXPlayer(identifier, playerId, isNew) local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.loadout, GetPlayerName(playerId), userData.coords, userData.metadata) GlobalState["playerCount"] = GlobalState["playerCount"] + 1 - ESX.Players[playerId] = xPlayer + Core.Players[playerId] = xPlayer Core.playersByIdentifier[identifier] = xPlayer -- Identity @@ -326,7 +326,7 @@ AddEventHandler("playerDropped", function(reason) Core.SavePlayer(xPlayer, function() GlobalState["playerCount"] = GlobalState["playerCount"] - 1 - ESX.Players[playerId] = nil + Core.Players[playerId] = nil end) end end) @@ -359,7 +359,7 @@ AddEventHandler("esx:playerLogout", function(playerId, cb) Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() GlobalState["playerCount"] = GlobalState["playerCount"] - 1 - ESX.Players[playerId] = nil + Core.Players[playerId] = nil if cb then cb() end diff --git a/[core]/es_extended/server/modules/npwd.lua b/[core]/es_extended/server/modules/npwd.lua index 78aa863de..f119ddb8b 100644 --- a/[core]/es_extended/server/modules/npwd.lua +++ b/[core]/es_extended/server/modules/npwd.lua @@ -10,7 +10,7 @@ AddEventHandler("onServerResourceStart", function(resource) if not npwd then return end - for _, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(Core.Players) do npwd:newPlayer({ source = xPlayer.source, identifier = xPlayer.identifier, diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index de4f4eb8d..731ad18c9 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -39,7 +39,7 @@ local function getNearbyPlayers(source, closest, distance, ignore) end end - for _, xPlayer in pairs(ESX.Players) do + for _, xPlayer in pairs(Core.Players) do if not ignore or not ignore[xPlayer.source] then local entity = GetPlayerPed(xPlayer.source) local coords = GetEntityCoords(entity) diff --git a/[core]/es_extended/server/modules/paycheck.lua b/[core]/es_extended/server/modules/paycheck.lua index f80c7f12e..4bba19487 100644 --- a/[core]/es_extended/server/modules/paycheck.lua +++ b/[core]/es_extended/server/modules/paycheck.lua @@ -2,7 +2,7 @@ function StartPayCheck() CreateThread(function() while true do Wait(Config.PaycheckInterval) - for player, xPlayer in pairs(ESX.Players) do + for player, xPlayer in pairs(Core.Players) do local jobLabel = xPlayer.job.label local job = xPlayer.job.grade_name local salary = xPlayer.job.grade_salary From abe6b2d52e83897722c79db409f05c60c448a832 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:15:38 +0100 Subject: [PATCH 152/161] fix(esx_multicharacter): fix attempting to access nil table --- [core]/esx_multicharacter/server/modules/database.lua | 1 + [core]/esx_multicharacter/server/modules/functions.lua | 2 ++ 2 files changed, 3 insertions(+) diff --git a/[core]/esx_multicharacter/server/modules/database.lua b/[core]/esx_multicharacter/server/modules/database.lua index 96294523e..0f3d7a3e4 100644 --- a/[core]/esx_multicharacter/server/modules/database.lua +++ b/[core]/esx_multicharacter/server/modules/database.lua @@ -64,6 +64,7 @@ MySQL.ready(function() Database.connected = true + ESX.Jobs = ESX.GetJobs() while not next(ESX.Jobs) do Wait(500) ESX.Jobs = ESX.GetJobs() diff --git a/[core]/esx_multicharacter/server/modules/functions.lua b/[core]/esx_multicharacter/server/modules/functions.lua index f1750e2fb..8792cec14 100644 --- a/[core]/esx_multicharacter/server/modules/functions.lua +++ b/[core]/esx_multicharacter/server/modules/functions.lua @@ -1,3 +1,5 @@ +ESX.Players = {} + function Server:GetIdentifier(source) local fxDk = GetConvarInt("sv_fxdkMode", 0) if fxDk == 1 then From d79a3c1d1d7e1d46e8a887ca8608ba13a3227725 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:48:35 +0100 Subject: [PATCH 153/161] feat(es_extended/shared/config/weapons): add chop shop dlcs weapons --- [core]/es_extended/locales/en.lua | 6 +++++ [core]/es_extended/shared/config/weapons.lua | 24 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index 44d622930..95ff12848 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -211,6 +211,7 @@ Locales["en"] = { ["weapon_specialcarbine"] = "Special Carbine", ["weapon_specialcarbine_mk2"] = "Special Carbine MK2", ["weapon_heavyrifle"] = "Heavy Rifle", + ["weapon_battlerifle"] = "Battle Rifle", -- Sniper ["weapon_heavysniper"] = "Heavy Sniper", @@ -240,6 +241,11 @@ Locales["en"] = { ["weapon_pistolxm3"] = "Pistol8 x3m", ["weapon_railgunxm3"] = "Railgun", + -- Chop Shop DLC + ["weapon_snowlauncher"] = "Snow Launcher", + ["weapon_hackingdevice"] = "Hacking Device", + + -- Thrown ["weapon_ball"] = "Baseball", ["weapon_bzgas"] = "BZ Gas", diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index e9392f305..28d6adc92 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -1037,6 +1037,30 @@ Config.Weapons = { { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` }, }, }, + { + name = "WEAPON_BATTLERIFLE", + label = TranslateCap("weapon_battlerifle"), + ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` }, + tints = Config.DefaultWeaponTints, + components = { + { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_BATTLERIFLE_CLIP_01` }, + { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_BATTLERIFLE_CLIP_02` }, + { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` }, + }, + }, + { + name = "WEAPON_SNOWLAUNCHER", + label = TranslateCap("weapon_snowlauncher"), + ammo = { label = TranslateCap("ammo_snowball"), hash = `AMMO_SNOWLAUNCHER` }, + tints = Config.DefaultWeaponTints, + components = {}, + }, + { + name = "WEAPON_HACKINGDEVICE", + label = TranslateCap("weapon_hackingdevice"), + tints = Config.DefaultWeaponTints, + components = {}, + }, { name = "WEAPON_PRECISIONRIFLE", label = TranslateCap("weapon_precisionrifle"), From 88f9ac87bf3081938d0a5b3e21ad7d1deb2f000b Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 23:03:57 +0100 Subject: [PATCH 154/161] feat(es_extended/shared/config/weapons): add bottom dollar bounties dlc weapons --- [core]/es_extended/locales/en.lua | 2 ++ [core]/es_extended/shared/config/weapons.lua | 1 + 2 files changed, 3 insertions(+) diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index 95ff12848..6a25c2d39 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -245,6 +245,8 @@ Locales["en"] = { ["weapon_snowlauncher"] = "Snow Launcher", ["weapon_hackingdevice"] = "Hacking Device", + -- Bottom Dollar Bounties DLC + ["weapon_stunrod"] = "The Shocker", -- Thrown ["weapon_ball"] = "Baseball", diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index 28d6adc92..f686dace9 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -289,6 +289,7 @@ Config.Weapons = { }, }, { name = "WEAPON_STUNGUN", label = TranslateCap("weapon_stungun"), tints = Config.DefaultWeaponTints, components = {} }, + { name = "WEAPON_STUNROD", label = TranslateCap("weapon_stunrod"), tints = Config.DefaultWeaponTints, components = {} }, { name = "WEAPON_RAYPISTOL", label = TranslateCap("weapon_raypistol"), tints = Config.DefaultWeaponTints, components = {} }, { name = "WEAPON_VINTAGEPISTOL", From 8056d0f03c93b40f180e0675b394d8917182d60a Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Tue, 31 Dec 2024 23:29:23 +0100 Subject: [PATCH 155/161] feat(es_extended/shared/config/weapons): add WEAPON_TECPISTOL DLC: San Andreas Mercenaries --- [core]/es_extended/locales/en.lua | 1 + [core]/es_extended/shared/config/weapons.lua | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index 6a25c2d39..81431aec0 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -197,6 +197,7 @@ Locales["en"] = { ["weapon_smg"] = "SMG", ["weapon_smg_mk2"] = "SMG MK2", ["weapon_raycarbine"] = "Unholy Hellbringer", + ["weapon_tecpistol"] = "Tactical SMG", -- Rifles ["weapon_advancedrifle"] = "Advanced Rifle", diff --git a/[core]/es_extended/shared/config/weapons.lua b/[core]/es_extended/shared/config/weapons.lua index f686dace9..7afc36728 100644 --- a/[core]/es_extended/shared/config/weapons.lua +++ b/[core]/es_extended/shared/config/weapons.lua @@ -557,6 +557,18 @@ Config.Weapons = { { name = "luxary_finish", label = TranslateCap("component_luxary_finish"), hash = `COMPONENT_SMG_VARMOD_LUXE` }, }, }, + { + name = "WEAPON_TECPISTOL", + label = TranslateCap("weapon_tecpistol"), + ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` }, + tints = Config.DefaultWeaponTints, + components = { + { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_TECPISTOL_CLIP_01` }, + { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_TECPISTOL_CLIP_02` }, + { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` }, + { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` }, + }, + }, { name = "WEAPON_SMG_MK2", label = TranslateCap("weapon_smg_mk2"), From 670d0c4b7fc2afcbbd40418f059a3ad0beb1647c Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:31:27 +0100 Subject: [PATCH 156/161] feat(es_extended/server/modules/paycheck): add offDuty pay --- .../es_extended/server/modules/paycheck.lua | 34 ++++++++++--------- [core]/es_extended/shared/config/main.lua | 1 + 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/[core]/es_extended/server/modules/paycheck.lua b/[core]/es_extended/server/modules/paycheck.lua index 4bba19487..5a78cc364 100644 --- a/[core]/es_extended/server/modules/paycheck.lua +++ b/[core]/es_extended/server/modules/paycheck.lua @@ -6,61 +6,63 @@ function StartPayCheck() local jobLabel = xPlayer.job.label local job = xPlayer.job.grade_name local salary = xPlayer.job.grade_salary - + local onDuty = xPlayer.job.onDuty + local effectiveSalary = (job == "unemployed" or onDuty) and salary or ESX.Math.Round(salary * Config.OffDutyPaycheckMultiplier) + if xPlayer.paycheckEnabled then - if salary > 0 then + if effectiveSalary > 0 then if job == "unemployed" then -- unemployed - xPlayer.addAccountMoney("bank", salary, "Welfare Check") - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_help", salary), "CHAR_BANK_MAZE", 9) + xPlayer.addAccountMoney("bank", effectiveSalary, "Welfare Check") + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_help", effectiveSalary), "CHAR_BANK_MAZE", 9) if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - Unemployment Benefits", "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = salary, inline = true }, + { name = "Amount", value = effectiveSalary, inline = true }, }) end elseif Config.EnableSocietyPayouts then -- possibly a society TriggerEvent("esx_society:getSociety", xPlayer.job.name, function(society) if society ~= nil then -- verified society TriggerEvent("esx_addonaccount:getSharedAccount", society.account, function(account) - if account.money >= salary then -- does the society money to pay its employees? - xPlayer.addAccountMoney("bank", salary, "Paycheck") - account.removeMoney(salary) + if account.money >= effectiveSalary then -- does the society money to pay its employees? + xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") + account.removeMoney(effectiveSalary) if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = salary, inline = true }, + { name = "Amount", value = effectiveSalary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) else TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), "", TranslateCap("company_nomoney"), "CHAR_BANK_MAZE", 1) end end) else -- not a society - xPlayer.addAccountMoney("bank", salary, "Paycheck") + xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = salary, inline = true }, + { name = "Amount", value = effectiveSalary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) end end) else -- generic job - xPlayer.addAccountMoney("bank", salary, "Paycheck") + xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - Generic", "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = salary, inline = true }, + { name = "Amount", value = effectiveSalary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) end end end diff --git a/[core]/es_extended/shared/config/main.lua b/[core]/es_extended/shared/config/main.lua index f769f758e..5d37450af 100644 --- a/[core]/es_extended/shared/config/main.lua +++ b/[core]/es_extended/shared/config/main.lua @@ -44,6 +44,7 @@ Config.SaveDeathStatus = true -- Save the death status of a player Config.EnableDebug = false -- Use Debug options? Config.DefaultJobDuty = true -- A players default duty status when changing jobs +Config.OffDutyPaycheckMultiplier = 0.5 -- The multiplier for off duty paychecks. 0.5 = 50% of the on duty paycheck Config.Multichar = GetResourceState("esx_multicharacter") ~= "missing" Config.Identity = true -- Select a character identity data before they have loaded in (this happens by default with multichar) From de96c066ed94a968110c7fede65561e1dd3da074 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:42:11 +0100 Subject: [PATCH 157/161] fix(es_extended/server/modules/paycheck): stick to salary var --- .../es_extended/server/modules/paycheck.lua | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/[core]/es_extended/server/modules/paycheck.lua b/[core]/es_extended/server/modules/paycheck.lua index 5a78cc364..98049fe8b 100644 --- a/[core]/es_extended/server/modules/paycheck.lua +++ b/[core]/es_extended/server/modules/paycheck.lua @@ -5,64 +5,63 @@ function StartPayCheck() for player, xPlayer in pairs(Core.Players) do local jobLabel = xPlayer.job.label local job = xPlayer.job.grade_name - local salary = xPlayer.job.grade_salary local onDuty = xPlayer.job.onDuty - local effectiveSalary = (job == "unemployed" or onDuty) and salary or ESX.Math.Round(salary * Config.OffDutyPaycheckMultiplier) - + local salary = (job == "unemployed" or onDuty) and xPlayer.job.grade_salary or ESX.Math.Round(xPlayer.job.grade_salary * Config.OffDutyPaycheckMultiplier) + if xPlayer.paycheckEnabled then - if effectiveSalary > 0 then + if salary > 0 then if job == "unemployed" then -- unemployed - xPlayer.addAccountMoney("bank", effectiveSalary, "Welfare Check") - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_help", effectiveSalary), "CHAR_BANK_MAZE", 9) + xPlayer.addAccountMoney("bank", salary, "Welfare Check") + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_help", salary), "CHAR_BANK_MAZE", 9) if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - Unemployment Benefits", "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = effectiveSalary, inline = true }, + { name = "Amount", value = salary, inline = true }, }) end elseif Config.EnableSocietyPayouts then -- possibly a society TriggerEvent("esx_society:getSociety", xPlayer.job.name, function(society) if society ~= nil then -- verified society TriggerEvent("esx_addonaccount:getSharedAccount", society.account, function(account) - if account.money >= effectiveSalary then -- does the society money to pay its employees? - xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") - account.removeMoney(effectiveSalary) + if account.money >= salary then -- does the society money to pay its employees? + xPlayer.addAccountMoney("bank", salary, "Paycheck") + account.removeMoney(salary) if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = effectiveSalary, inline = true }, + { name = "Amount", value = salary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) else TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), "", TranslateCap("company_nomoney"), "CHAR_BANK_MAZE", 1) end end) else -- not a society - xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") + xPlayer.addAccountMoney("bank", salary, "Paycheck") if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = effectiveSalary, inline = true }, + { name = "Amount", value = salary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) end end) else -- generic job - xPlayer.addAccountMoney("bank", effectiveSalary, "Paycheck") + xPlayer.addAccountMoney("bank", salary, "Paycheck") if Config.LogPaycheck then ESX.DiscordLogFields("Paycheck", "Paycheck - Generic", "green", { { name = "Player", value = xPlayer.name, inline = true }, { name = "ID", value = xPlayer.source, inline = true }, - { name = "Amount", value = effectiveSalary, inline = true }, + { name = "Amount", value = salary, inline = true }, }) end - TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", effectiveSalary), "CHAR_BANK_MAZE", 9) + TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9) end end end From 71be624697dcce392991ac57e5e9c71221e049ba Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 19:35:15 +0100 Subject: [PATCH 158/161] feat(es_extended/imports): add require --- [core]/es_extended/imports.lua | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 2727995d3..80f1438aa 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -1,4 +1,5 @@ ESX = exports["es_extended"]:getSharedObject() +_resourceName = GetCurrentResourceName() OnPlayerData = function (key, val, last) end @@ -42,3 +43,66 @@ if not IsDuplicityVersion() then -- Only register this event for the client end end end + +local cachedModules = {} ---@type table +local loadingModules = {} ---@type table + +---@param modulePath string +---@return string +local function getResourceNameFromModulePath(modulePath) + local externalResourceName = modulePath:match("^@(.-)%.") + if externalResourceName then + return externalResourceName + end + + return _resourceName +end + +---@param modulePath string +---@return string, number +local function getModuleFilePath(modulePath) + if modulePath:sub(1, 1) == "@" then + modulePath = modulePath:sub(modulePath:find("%.") + 1) + end + + return modulePath:gsub("%.", "/") +end + +---@param modulePath string +---@return any +function require(modulePath) + assert(type(modulePath) == "string", "Module name must be a string") + + if loadingModules[modulePath] then + error(("Circular dependency detected for module '%s'."):format(modulePath)) + end + + if cachedModules[modulePath] then + return cachedModules[modulePath] + end + + loadingModules[modulePath] = true + + local resourceName = getResourceNameFromModulePath(modulePath) + local moduleFilePath = getModuleFilePath(modulePath) + local moduleFileContent = LoadResourceFile(resourceName, moduleFilePath .. ".lua") + + if not moduleFileContent then + loadingModules[modulePath] = nil + error(("Module '%s' not found in resource '%s'."):format(moduleFilePath, resourceName)) + end + + local chunk, err = load(moduleFileContent, ("@%s/%s"):format(resourceName, moduleFilePath), "t") + + if not chunk then + loadingModules[modulePath] = nil + error(("Failed to load module '%s': %s"):format(moduleFilePath, err)) + end + + local result = chunk() + + cachedModules[modulePath] = result ~= nil and result or true + loadingModules[modulePath] = nil + + return result +end From 7b01753274fbfb2837230eb6ba359596576dba26 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 19:54:07 +0100 Subject: [PATCH 159/161] fix(es_extended/imports): fix typo --- [core]/es_extended/imports.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 80f1438aa..ea7bf8f35 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -71,7 +71,7 @@ end ---@param modulePath string ---@return any function require(modulePath) - assert(type(modulePath) == "string", "Module name must be a string") + assert(type(modulePath) == "string", "Module path must be a string") if loadingModules[modulePath] then error(("Circular dependency detected for module '%s'."):format(modulePath)) From 354b46a005131f901d41f61d46f4971c7620240c Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 20:03:07 +0100 Subject: [PATCH 160/161] feat(es_extended/imports): avoid overwriting ox_lib require --- [core]/es_extended/imports.lua | 96 ++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index ea7bf8f35..d28c05a45 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -44,65 +44,69 @@ if not IsDuplicityVersion() then -- Only register this event for the client end end -local cachedModules = {} ---@type table -local loadingModules = {} ---@type table - ----@param modulePath string ----@return string -local function getResourceNameFromModulePath(modulePath) - local externalResourceName = modulePath:match("^@(.-)%.") - if externalResourceName then - return externalResourceName +if not lib?.require then + local cachedModules = {} ---@type table + local loadingModules = {} ---@type table + + ---@param modulePath string + ---@return string + local function getResourceNameFromModulePath(modulePath) + local externalResourceName = modulePath:match("^@(.-)%.") + if externalResourceName then + return externalResourceName + end + + return _resourceName end - return _resourceName -end + ---@param modulePath string + ---@return string, number + local function getModuleFilePath(modulePath) + if modulePath:sub(1, 1) == "@" then + modulePath = modulePath:sub(modulePath:find("%.") + 1) + end ----@param modulePath string ----@return string, number -local function getModuleFilePath(modulePath) - if modulePath:sub(1, 1) == "@" then - modulePath = modulePath:sub(modulePath:find("%.") + 1) + return modulePath:gsub("%.", "/") end - return modulePath:gsub("%.", "/") -end + ---@param modulePath string + ---@return any + function require(modulePath) + assert(type(modulePath) == "string", "Module path must be a string") ----@param modulePath string ----@return any -function require(modulePath) - assert(type(modulePath) == "string", "Module path must be a string") - - if loadingModules[modulePath] then - error(("Circular dependency detected for module '%s'."):format(modulePath)) - end + if loadingModules[modulePath] then + error(("Circular dependency detected for module '%s'."):format(modulePath)) + end - if cachedModules[modulePath] then - return cachedModules[modulePath] - end + if cachedModules[modulePath] then + return cachedModules[modulePath] + end - loadingModules[modulePath] = true + loadingModules[modulePath] = true - local resourceName = getResourceNameFromModulePath(modulePath) - local moduleFilePath = getModuleFilePath(modulePath) - local moduleFileContent = LoadResourceFile(resourceName, moduleFilePath .. ".lua") + local resourceName = getResourceNameFromModulePath(modulePath) + local moduleFilePath = getModuleFilePath(modulePath) + local moduleFileContent = LoadResourceFile(resourceName, moduleFilePath .. ".lua") - if not moduleFileContent then - loadingModules[modulePath] = nil - error(("Module '%s' not found in resource '%s'."):format(moduleFilePath, resourceName)) - end + if not moduleFileContent then + loadingModules[modulePath] = nil + error(("Module '%s' not found in resource '%s'."):format(moduleFilePath, resourceName)) + end - local chunk, err = load(moduleFileContent, ("@%s/%s"):format(resourceName, moduleFilePath), "t") + local chunk, err = load(moduleFileContent, ("@%s/%s"):format(resourceName, moduleFilePath), "t") - if not chunk then - loadingModules[modulePath] = nil - error(("Failed to load module '%s': %s"):format(moduleFilePath, err)) - end + if not chunk then + loadingModules[modulePath] = nil + error(("Failed to load module '%s': %s"):format(moduleFilePath, err)) + end - local result = chunk() + local result = chunk() - cachedModules[modulePath] = result ~= nil and result or true - loadingModules[modulePath] = nil + cachedModules[modulePath] = result ~= nil and result or true + loadingModules[modulePath] = nil - return result + return result + end +else + print("LIB LOADED") end From 1ec3f8a02ecfba086120feff97df2aec501a8f39 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 1 Jan 2025 20:04:02 +0100 Subject: [PATCH 161/161] refactor(es_extended/imports): remove debug print --- [core]/es_extended/imports.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index d28c05a45..6d6a862e1 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -107,6 +107,4 @@ if not lib?.require then return result end -else - print("LIB LOADED") end