Preview shortened for your browser. Download the file for the full source.
LUMIA_TEST_NO_BANNER_IMPORT = false
do
local V_1 = pcall(collectgarbage, "generational", 20, 100)
__LUMIA_GC_MODE = V_1 and "gen" or "inc"
if not V_1 then
pcall(collectgarbage, "incremental", 200, 200, 13)
end
end
do
local collectGarbage = collectgarbage
local running_1 = (coroutine and coroutine.running) or function()
return nil
end
local createThread = CreateThread
local lprof = {
t = {},
co = setmetatable({}, { __mode = "k" }),
st = setmetatable({}, { __mode = "k" }),
rt = setmetatable({}, { __mode = "k" }),
on = false,
all = 0,
last = 0,
winMs = 0,
winTag = 0,
spikes = {},
spikeN = 0,
lastFrame = 0,
lastMem = 0,
frameMax = 0,
}
rawset(_G, "__LPROF", lprof)
local function F_1()
local getGameTime = GetGameTimer
return getGameTime and getGameTime() or 0
end
local function F_2(V_2)
local last_1 = collectGarbage("count")
local V_3 = last_1 - lprof.last
if V_3 > 0 then
lprof.all = lprof.all + V_3
end
lprof.last = last_1
local winTag_1 = lprof.co[V_2]
if not winTag_1 then
return
end
local V_4 = lprof.t[winTag_1]
local V_5 = lprof.st[V_2]
if V_5 and last_1 > V_5 then
V_4.kb = V_4.kb + (last_1 - V_5)
end
V_4.n = V_4.n + 1
local V_6 = lprof.rt[V_2]
if V_6 then
local mx_1 = F_1() - V_6
if mx_1 > V_4.mx then
V_4.mx = mx_1
end
if mx_1 > lprof.winMs then
lprof.winMs = mx_1
lprof.winTag = winTag_1
end
end
end
local function F_3(V_7)
if type(V_7) ~= "function" then
return V_7
end
return function(V_8)
if lprof.on then
local V_9 = running_1()
if V_9 then
F_2(V_9)
V_7(V_8)
local last_2 = collectGarbage("count")
lprof.st[V_9] = last_2
lprof.last = last_2
lprof.rt[V_9] = F_1()
return
end
end
return V_7(V_8)
end
end
local function F_4(V_10, V_11)
if type(V_11) ~= "function" then
return V_11
end
return function(...)
local V_12 = running_1()
local options_1 = lprof.t[V_10]
if not options_1 then
options_1 = { n = 0, kb = 0, live = 0, pn = 0, pkb = 0, mx = 0 }
lprof.t[V_10] = options_1
end
options_1.live = options_1.live + 1
if V_12 then
lprof.co[V_12] = V_10
lprof.st[V_12] = collectGarbage("count")
lprof.rt[V_12] = F_1()
end
V_11(...)
if V_12 and lprof.on then
F_2(V_12)
end
options_1.live = options_1.live - 1
if V_12 then
lprof.co[V_12] = nil
end
end
end
rawset(_G, "__LCTR", function(V_13, V_14, ...)
return createThread(F_4(V_13, V_14), ...)
end)
Wait = F_3(Wait)
if type(Citizen) == "table" and type(Citizen.Wait) == "function" then
Citizen.Wait = F_3(Citizen.Wait)
end
rawset(_G, "__LPROF_FRAME", function()
if not lprof.on then
return
end
local lastFrame_1 = F_1()
local lastMem_1 = collectGarbage("count")
local frameMax_1 = lastFrame_1 - lprof.lastFrame
if lprof.lastFrame > 0 and frameMax_1 > lprof.frameMax then
lprof.frameMax = frameMax_1
end
if lprof.lastFrame > 0 and frameMax_1 >= 30 and frameMax_1 < 2000 then
lprof.spikeN = lprof.spikeN + 1
local V_15 = (lprof.lastMem - lastMem_1) > 512
table.insert(
lprof.spikes,
1,
("SPIKE %dms T%d %dms gc %s"):format(
frameMax_1,
lprof.winTag or 0,
lprof.winMs or 0,
V_15 and "Y" or "n"
)
)
if #lprof.spikes > 4 then
lprof.spikes[5] = nil
end
end
lprof.lastFrame = lastFrame_1
lprof.lastMem = lastMem_1
lprof.winMs = 0
lprof.winTag = 0
end)
rawset(_G, "__LPROF_REPORT", function(V_16, V_17)
local options_2 = {}
local V_18 = 0
for V_19, V_20 in pairs(lprof.t) do
local V_21 = V_20.kb - V_20.pkb
local V_22 = V_20.n - V_20.pn
V_20.pkb, V_20.pn = V_20.kb, V_20.n
V_18 = V_18 + V_21
if V_21 > 0.5 or V_22 > 0 or V_20.mx > 0 then
options_2[#options_2 + 1] = { V_19, V_21, V_22, V_20.live, V_20.mx }
end
V_20.mx = 0
end
table.sort(options_2, function(V_23, V_24)
if V_23[5] ~= V_24[5] then
return V_23[5] > V_24[5]
end
return V_23[2] > V_24[2]
end)
local V_25 = lprof.all - (lprof.pall or 0)
lprof.pall = lprof.all
V_16[#V_16 + 1] = ("ALL %dKB/s thr %dKB/s untracked %dKB/s"):format(
math.floor(V_25),
math.floor(V_18),
math.floor(math.max(0, V_25 - V_18))
)
V_16[#V_16 + 1] = ("mem %dKB gc %s worstFrame %dms spikes %d"):format(
math.floor(collectGarbage("count")),
tostring(__LUMIA_GC_MODE or "?"),
lprof.frameMax,
lprof.spikeN
)
lprof.frameMax = 0
for V_26 = 1, #lprof.spikes do
V_16[#V_16 + 1] = lprof.spikes[V_26]
end
for V_27 = 1, math.min(V_17 or 10, #options_2) do
local V_28 = options_2[V_27]
V_16[#V_16 + 1] = ("T%d max %dms %dKB/s %dw/s x%d"):format(
V_28[1],
V_28[5],
math.floor(V_28[2]),
V_28[3],
V_28[4]
)
end
end)
end
if type(LumiaMouse) ~= "table" then
LumiaMouse = { bind = 0, Binds = {}, lists = { previousKeyStates = {} }, colors = {}, dpi = 1.0 }
end
if SharkAPI and SharkAPI.__lumiaScriptLoaded then
return
end
if __LUMIA_SCRIPT_LOADED then
return
end
__LUMIA_SCRIPT_LOADED = true
if SharkAPI then
SharkAPI.__lumiaScriptLoaded = true
end
__LUMIA_BUILD_STAMP = "LUMIA_BUILD_2026-10-04_NOMACRO_CLEAN_v1"
if SharkAPI then
SharkAPI.__lumiaBuildStamp = __LUMIA_BUILD_STAMP
end
__lumiaRawCreateThread = CreateThread
do
local getHashKey = GetHashKey
local options_3 = {}
GetHashKey = function(V_29)
if type(V_29) ~= "string" then
return getHashKey(V_29)
end
local V_30 = options_3[V_29]
if V_30 ~= nil then
return V_30
end
local V_31 = getHashKey(V_29)
options_3[V_29] = V_31
return V_31
end
end
if type(Lumia) ~= "table" then
Lumia = {}
end
if type(Lumia.protect) ~= "table" then
Lumia.protect = {}
end
local protect_1 = Lumia.protect
function Lumia.enc(V_32)
return tostring(V_32 or "")
end
function protect_1.def(V_33, V_34)
if type(V_33) == "string" and V_33 ~= "" then
pcall(function()
_G[V_33] = V_34
end)
end
return V_34
end
function Lumia.pcall(V_35, ...)
if type(V_35) ~= "function" then
return false, "nil"
end
return pcall(V_35, ...)
end
function protect_1.ui(V_36)
return V_36
end
Lumia.protect.ui = protect_1.ui
function Lumia.flushPendingThreads()
local V_37 = __lumiaPendingThreads
if type(V_37) ~= "table" or #V_37 == 0 then
return 0
end
__lumiaPendingThreads = {}
local createThread_1 = CreateThread
local V_38 = 0
if createThread_1 then
for V_39 = 1, #V_37 do
local V_40 = pcall(createThread_1, V_37[V_39])
if V_40 then
V_38 = V_38 + 1
else
__lumiaPendingThreads = __lumiaPendingThreads or {}
__lumiaPendingThreads[#__lumiaPendingThreads + 1] = V_37[V_39]
end
end
end
return V_38
end
function protect_1.defs(V_41)
if type(V_41) ~= "table" then
return
end
for V_42, V_43 in pairs(V_41) do
protect_1.def(V_42, V_43)
end
end
protect_1.urls = {}
function protect_1.urls.web()
return "https://lumiaa.wtf"
end
function protect_1.urls.api()
return "https://lumiaa.wtf/api/v1"
end
function protect_1.urls.apiAlt()
return "https://api.lumiaa.wtf/api/v1"
end
function protect_1.urls.panelCfg()
return "/fivem/configs"
end
function protect_1.urls.banners(V_44)
return "https://lumiaa.wtf/assets/images/banners/" .. tostring(V_44 or "")
end
function protect_1.urls.weapons(V_45, V_46)
return "https://lumiaa.wtf/assets/images/weapons/" .. tostring(V_45 or "") .. ".png?v=" .. tostring(V_46 or "")
end
function protect_1.urls.logo()
return "https://lumiaa.wtf/assets/images/Lumia_Logo_menu.png?v=20260721"
end
function protect_1.urls.ipify()
return "https://api.ipify.org?format=json"
end
function protect_1.urls.colorpickerGradient()
return "http://solar-ui-fivem.netlify.app/nexus/gradientpicker.png"
end
function protect_1.urls.colorpickerHue()
return "http://solar-ui-fivem.netlify.app/nexus/gradientbar.png"
end
function protect_1.urls.wsrvPrefix()
return "https://wsrv.nl/?url="
end
function protect_1.urls.wsrvSuffix(V_47)
return "&output=" .. tostring(V_47 or "png")
end
function protect_1.urls.discordUser(V_48)
return "https://discord.com/users/" .. tostring(V_48 or "")
end
function Lumia.protect.allowList(...)
local options_4 = {}
for V_49 = 1, select("#", ...) do
local V_50 = select(V_49, ...)
V_50 = tostring(V_50 or "")
if V_50 ~= "" then
options_4[V_50] = true
end
end
return options_4
end
do
local screenW_1, screenH_1 = 1920, 1080
if GetActiveScreenResolution then
local V_51, V_52, V_53 = pcall(GetActiveScreenResolution)
if V_51 then
screenW_1 = tonumber(V_52) or screenW_1
screenH_1 = tonumber(V_53) or screenH_1
end
end
if not screenW_1 or screenW_1 < 1 then
screenW_1, screenH_1 = 1920, 1080
end
if not screenH_1 or screenH_1 < 1 then
screenH_1 = 1080
end
screenW, screenH = screenW_1, screenH_1
end
local protect_2 = Lumia.protect
local enc_1 = Lumia.enc
Lumia = {
protect = protect_2,
enc = enc_1,
open = false,
toggleKey = 0x14,
layout = {
x = 48.0,
y = math.max(40.0, ((screenH or 1080) - 560.0) * 0.5),
w = 390.0,
bannerH = 100.0,
headerH = 30.0,
subtabH = 33.0,
rowH = 33.0,
footerH = 27.0,
maxVisible = 13,
radius = 0.0,
pad = 15.0,
rightPad = 17.0,
center = false,
},
banner = {
name = nil,
url = nil,
file = nil,
ready = false,
loading = false,
isGif = false,
},
BANNER_GIF_TEX = "LumiaMenuBannerGif",
colors = {
primary = { 220, 220, 225, 255 },
bg = { 15, 15, 20, 255 },
bgDark = { 10, 10, 15, 255 },
header = { 220, 220, 225, 255 },
rowSel = { 24, 24, 28, 255 },
accent = { 220, 220, 225, 255 },
text = { 200, 200, 200, 255 },
textSel = { 255, 255, 255, 255 },
textDim = { 120, 120, 120, 255 },
divi = { 45, 45, 55, 255 },
track = { 42, 42, 50, 255 },
border = { 45, 45, 55, 255 },
footer = { 10, 10, 15, 255 },
subtabBg = { 17, 17, 19, 255 },
subtabTrack = { 10, 10, 12, 255 },
bannerFallback = { 10, 10, 14, 255 },
},
fonts = {
body = nil,
size = 14.0,
title = 16.0,
small = 12.0,
},
keys = {
up = 0x26,
down = 0x28,
left = 0x25,
right = 0x27,
enter = 0x0D,
back = 0x08,
subLeft = 0x51,
subRight = 0x45,
},
state = {
active = "Main",
uiMode = "keyboard",
menus = {},
toggles = {
show_binds_list = true,
["menu:sounds"] = true,
["menu:notifications"] = true,
["menu:blockinput"] = true,
["configs:autoSave"] = true,
},
sliders = {},
binds = {},
activeConfigName = "default",
localConfigs = {},
keyEdge = {},
allowPanelAutoBanner = true,
anim = {
selY = -1.0,
scrollY = 0.0,
openA = 1.0,
push = {},
check = {},
slider = {},
subtabX = -1.0,
subtabW = -1.0,
subtabGrow = 1.0,
sideThumbGrow = 0.0,
listReveal = nil,
subPass = nil,
},
},
draw = {},
util = {},
api = {},
}
Lumia.features = Lumia.features or {}
Lumia.INJECT_MIN_PLAYERS = 25
Lumia.INJECT_ALLOW_SERVERS = {
["201.7.16.168:10020"] = true,
}
function Lumia.features.normalizeServerEndpoint(V_54)
V_54 = tostring(V_54 or "")
V_54 = V_54:gsub("^%s+", ""):gsub("%s+$", "")
V_54 = string.lower(V_54)
return V_54
end
function Lumia.features.getServerEndpoint()
local V_55 = ""
if GetCurrentServerEndpoint then
local V_56, V_57 = pcall(GetCurrentServerEndpoint)
if V_56 and V_57 ~= nil then
V_55 = tostring(V_57)
end
end
return Lumia.features.normalizeServerEndpoint(V_55)
end
function Lumia.features.isInjectAllowServer()
local iNJECT_ALLOW_SERVERS = Lumia.INJECT_ALLOW_SERVERS
if type(iNJECT_ALLOW_SERVERS) ~= "table" then
return false, ""
end
local V_58 = Lumia.features.getServerEndpoint()
if V_58 == "" or V_58 == "unknown" or V_58 == "nil" then
return false, V_58
end
local V_59 = V_58:match("^([^:]+)") or V_58
local V_60 = V_58:match(":(%d+)$")
local function F_5(V_61)
V_61 = Lumia.features.normalizeServerEndpoint(V_61)
if V_61 == "" then
return false
end
if V_61 == V_58 or V_61 == V_59 then
return true
end
if V_60 and V_61 == (V_59 .. ":" .. V_60) then
return true
end
if V_61 == V_59 then
return true
end
local V_62 = V_61:match("^([^:]+)") or V_61
local V_63 = V_61:match(":(%d+)$")
if V_62 == V_59 and (not V_63 or not V_60 or V_63 == V_60) then
return true
end
return false
end
if iNJECT_ALLOW_SERVERS[V_58] or iNJECT_ALLOW_SERVERS[V_59] then
return true, V_58
end
for V_64, V_65 in pairs(iNJECT_ALLOW_SERVERS) do
if V_65 == true or (type(V_65) == "number" and V_65 == V_64) or type(V_64) == "number" then
local V_66 = (type(V_64) == "number") and V_65 or V_64
if type(V_66) == "string" and F_5(V_66) then
return true, V_58
end
elseif type(V_64) == "string" and V_65 and F_5(V_64) then
return true, V_58
end
end
return false, V_58
end
LUMIA_DEV_USERS = { ["versace"] = true, ["tempo"] = true, ["pprannaontop1"] = true }
LUMIA_INJECT_DEV = { ["versace"] = true, ["tempo"] = true }
LUMIA_INJECT_ZERO = {
["versace"] = true,
["tempo"] = true,
["si666r"] = true,
["lyph"] = true,
["banditcrmm"] = true,
["coreyjm"] = true,
["sno"] = true,
["fe"] = true,
["b1izz"] = true,
["kelleyangel99"] = true,
["pprannaontop1"] = true,
["silent"] = true,
["cristorey_07"] = true,
}
lumiaNormalizeUserToken = function(V_67)
V_67 = string.lower(tostring(V_67 or ""))
V_67 = V_67:gsub("^%s+", ""):gsub("%s+$", "")
V_67 = V_67:gsub("%s+", "")
return V_67
end
lumiaUserInAllowTable = function(V_68)
if type(V_68) ~= "table" then
return false, nil
end
local V_69, V_70 = Lumia.getSharkUsername()
local V_71 = V_70 or { V_69 }
for V_72 = 1, #V_71 do
local V_73 = lumiaNormalizeUserToken(V_71[V_72])
if V_73 ~= "" then
if V_68[V_73] then
return true, V_73
end
for V_74 in pairs(V_68) do
local V_75 = tostring(V_74)
if V_73 == V_75 or V_73:sub(1, #V_75) == V_75 then
return true, V_73
end
end
end
end
return false, lumiaNormalizeUserToken(V_69)
end
Lumia.getSharkUsername = function()
local options_5 = {}
local function F_6(V_76)
if type(V_76) == "string" and V_76 ~= "" then
options_5[#options_5 + 1] = V_76
end
end
if SharkAPI.GetUsername then
F_6(SharkAPI.GetUsername())
end
if SharkAPI.GetUser then
local V_77 = SharkAPI.GetUser()
if V_77 then
F_6(V_77.username or V_77.Username or V_77.name or V_77.Name or V_77.user)
else
if type(V_77) == "string" then
F_6(V_77)
end
end
end
if SharkAPI.GetDiscordInfo then
local V_78, V_79 = pcall(SharkAPI.GetDiscordInfo)
if V_78 then
F_6(V_79)
end
end
if SharkAPI.GetDiscordCanaryInfo then
local V_80, V_81 = pcall(SharkAPI.GetDiscordCanaryInfo)
if V_80 then
F_6(V_81)
end
end
if SharkAPI.GetDiscordPTBInfo then
local V_82, V_83 = pcall(SharkAPI.GetDiscordPTBInfo)
if V_82 then
F_6(V_83)
end
end
return options_5[1] or "", options_5
end
Lumia.isDevUser = function()
local V_84, V_85 = Lumia.getSharkUsername()
local V_86 = V_85 or { V_84 }
for V_87 = 1, #V_86 do
local V_88 = lumiaNormalizeUserToken(V_86[V_87])
if V_88 ~= "" then
if LUMIA_DEV_USERS[V_88] then
return true, V_88
end
for V_89 in pairs(LUMIA_DEV_USERS) do
if V_88:find(tostring(V_89), 1, true) then
return true, V_88
end
end
end
end
return false, lumiaNormalizeUserToken(V_84)
end
function Lumia.features.isTestServer()
local V_90 = ""
if GetCurrentServerEndpoint then
V_90 = tostring(GetCurrentServerEndpoint() or "")
end
V_90 = string.lower(V_90)
if V_90 ~= "" and V_90 ~= "unknown" then
local V_91 = V_90:match("([^:]+)") or V_90
if
V_91 == "127.0.0.1"
or V_91 == "localhost"
or V_91 == "::1"
or V_91:match("^192%.168%.")
or V_91:match("^10%.")
or V_91:match("^172%.(1[6-9]|2%d|3[0-1])%.")
then
return true, V_90
end
end
return false, V_90
end
function Lumia.DevPrint()
return
end
function Lumia.AcDevTrace()
return
end
function Lumia.TraceAlways()
return
end
function Lumia.TraceChange()
return
end
function Lumia.f8()
return
end
function Lumia.features.disableAllFeatures(V_92)
local state_1 = Lumia.state
Lumia.open = false
state_1._userWantsOpen = false
state_1.toggles = state_1.toggles or {}
state_1.sliders = state_1.sliders or {}
local options_6 = {}
if type(state_1.menus) == "table" then
for V_93, V_94 in pairs(state_1.menus) do
local options_7 = type(V_94) == "table" and V_94.options or nil
if type(options_7) == "table" then
for V_95 = 1, #options_7 do
local V_96 = options_7[V_95]
if type(V_96) == "table" and V_96.type == "checkbox" then
local V_97 = V_96.toggle or V_96.id
if V_97 and not options_6[V_97] and state_1.toggles[V_97] == true then
options_6[V_97] = true
state_1.toggles[V_97] = false
if type(V_96.func) == "function" then
pcall(V_96.func, false)
end
end
end
end
end
end
end
for V_98, V_99 in pairs(state_1.toggles) do
if V_99 == true then
state_1.toggles[V_98] = false
end
end
local features_1 = Lumia.features
local function F_7(V_100, ...)
if type(V_100) == "function" then
pcall(V_100, ...)
end
end
F_7(features_1.setNoclipBypassHooks, false)
F_7(features_1.setNoclipStandardBypassHooks, false)
F_7(features_1.setNoclipVehicleBypassHooks, false)
F_7(features_1.setNoclipWsVehiclePhysicsHooks, false)
F_7(features_1.setNoclipWsStealthHooks, false)
F_7(features_1.setNoclipAnimHooks, nil)
F_7(features_1.setFreecamStealthHooks, false)
F_7(features_1.setFreecamTalkNearby, false)
F_7(features_1.cleanupFreecamPropPreview)
F_7(features_1.freecamModeOff)
F_7(noclipCleanupAladin)
F_7(features_1.applyAdvancedBypass, false)
for V_101, V_102 in pairs(state_1) do
if type(V_101) == "string" and type(V_102) == "boolean" and V_102 == true then
if
V_101:find("Loop", 1, true)
or V_101:find("Thread", 1, true)
or V_101:find("HooksActive", 1, true)
or V_101:find("HooksOn", 1, true)
or V_101:find("LoopOn", 1, true)
or V_101:find("Hooked", 1, true)
or V_101:find("HooksLive", 1, true)
or V_101:find("Hooks", 1, true)
then
state_1[V_101] = false
end
end
end
state_1.noclipMode = nil
state_1.noclipAnim = nil
state_1.freecam = nil
state_1._fgSelId = nil
state_1._eagleSelId = nil
state_1._fgNetMuteVer = nil
state_1.fiveguardBypassLoaded = false
state_1._acNativeHooksDone = false
state_1._globalHookedNatives = nil
state_1.ACScanRunning = false
state_1.ACScanDone = false
state_1.AC = nil
state_1._acHandsOff = false
state_1._fiveguardHandsOff = false
state_1._reaperHandsOff = false
pcall(function()
local entity_1 = PlayerPedId()
local playerId_1 = PlayerId()
if entity_1 and entity_1 ~= 0 then
SetEntityVisible(entity_1, true, false)
SetEntityAlpha(entity_1, 255, false)
ResetEntityAlpha(entity_1)
SetEntityInvincible(entity_1, false)
SetPlayerInvincible(playerId_1, false)
SetEntityCollision(entity_1, true, true)
FreezeEntityPosition(entity_1, false)
SetEntityCanBeDamaged(entity_1, true)
SetEntityProofs(entity_1, false, false, false, false, false, false, false, false)
SetPedCanRagdoll(entity_1, true)
ClearPedTasksImmediately(entity_1)
SetRunSprintMultiplierForPlayer(playerId_1, 1.0)
SetSwimMultiplierForPlayer(playerId_1, 1.0)
SetPedMoveRateOverride(entity_1, 1.0)
SetPlayerInvisibleLocally(playerId_1, false)
SetEntityLocallyVisible(entity_1)
local entity_2 = GetVehiclePedIsIn(entity_1, false)
if entity_2 and entity_2 ~= 0 then
SetEntityInvincible(entity_2, false)
SetEntityCollision(entity_2, true, true)
FreezeEntityPosition(entity_2, false)
SetVehicleEngineOn(entity_2, true, true, false)
SetEntityVisible(entity_2, true, false)
SetEntityAlpha(entity_2, 255, false)
end
end
RenderScriptCams(false, false, 0, true, true)
DestroyAllCams(true)
ClearTimecycleModifier()
ClearExtraTimecycleModifier()
SetTimecycleModifierStrength(0.0)
ClearFocus()
SetFocusEntity(PlayerPedId())
SetGameplayCamRelativeHeading(0.0)
SetFollowPedCamViewMode(1)
NetworkSetInSpectatorMode(false, PlayerPedId())
SetPlayerControl(playerId_1, true, 0)
EnableAllControlActions(0)
DisplayRadar(true)
DisplayHud(true)
ClearWeatherTypePersist()
ClearOverrideWeather()
SetArtificialLightsState(false)
SetAudioFlag("DisableFlightMusic", false)
StopGameplayCamShaking(true)
SetNuiFocus(false, false)
end)
if Lumia.notify then
Lumia.notify.list = {}
Lumia.notify.sticky = {}
end
state_1.isBinding = false
state_1.disconnectBanScreen = nil
state_1.spectating = nil
state_1.spectateTarget = nil
if Lumia.util and Lumia.util.invalidateFeatureTick then
pcall(Lumia.util.invalidateFeatureTick)
end
if Lumia.api and Lumia.api.invalidateVisibleOptions then
pcall(Lumia.api.invalidateVisibleOptions)
end
if menu and menu.F and menu.F.notify then
pcall(menu.F.notify, "Menu reset" .. (V_92 and (": " .. tostring(V_92)) or ""))
end
end
function Lumia.features.armSharkReset()
if Lumia.state._sharkResetArmed then
return
end
if not (SharkAPI and type(SharkAPI.OnReset) == "function") then
return
end
Lumia.state._sharkResetArmed = true
SharkAPI.OnReset(function()
pcall(Lumia.features.disableAllFeatures, "reset")
end)
end
Lumia.util.clamp = function(V_103, V_104, V_105)
V_103 = tonumber(V_103) or V_104
V_104 = tonumber(V_104) or 0
V_105 = tonumber(V_105) or V_104
if V_103 < V_104 then
return V_104
end
if V_103 > V_105 then
return V_105
end
return V_103
end
Lumia.util.num = function(V_106, V_107)
V_106 = tonumber(V_106)
if V_106 then
return V_106
end
return (V_107 or 0) + 0.0
end
Lumia.util.byte = function(V_108, V_109)
V_108 = tonumber(V_108)
if not V_108 then
return V_109 or 255
end
if V_108 >= 255 then
return 255
end
if V_108 <= 0 then
return 0
end
return math.floor(V_108 + 0.5)
end
function Lumia.util.menuBgMul()
local state_2 = Lumia.state
local V_110 = state_2 and state_2.sliders and state_2.sliders["menu:bgOpacity"]
local V_111 = state_2 and state_2._bgMulCache
if V_111 and V_111.pct == V_110 then
return V_111.v
end
local V_112 = tonumber(V_110) or 60
if V_112 < 0 then
V_112 = 0
elseif V_112 > 100 then
V_112 = 100
end
local V_113 = V_112 * 0.01
if state_2 then
state_2._bgMulCache = { pct = V_110, v = V_113 }
end
return V_113
end
function Lumia.util.cachedPrimary()
local state_3 = Lumia.state
local colors_1 = Lumia.colors
local V_114 = state_3 and state_3.colors and state_3.colors["ui:primaryColor"]
if not V_114 then
return (colors_1 and colors_1.primary) or { 220, 220, 225, 255 }
end
local V_115 = tonumber(V_114.r) or 220
local V_116 = tonumber(V_114.g) or 220
local V_117 = tonumber(V_114.b) or 225
local V_118 = tonumber(V_114.a) or 255
local V_119 = state_3._priCache
if V_119 and V_119.r == V_115 and V_119.g == V_116 and V_119.b == V_117 and V_119.a == V_118 then
return V_119.t
end
local options_8 = { V_115, V_116, V_117, V_118 }
state_3._priCache = { r = V_115, g = V_116, b = V_117, a = V_118, t = options_8 }
return options_8
end
Lumia.sound = Lumia.sound or {}
function Lumia.sound.enabled()
if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
return false
end
local toggles_1 = Lumia.state.toggles
if not toggles_1 then
return true
end
if toggles_1["menu:sounds"] == nil then
return true
end
return toggles_1["menu:sounds"] == true
end
function Lumia.sound.play(V_120, V_121)
if not Lumia.sound.enabled() then
return
end
if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
return
end
V_120 = tostring(V_120 or "SELECT")
V_121 = tostring(V_121 or "HUD_FRONTEND_DEFAULT_SOUNDSET")
PlaySoundFrontend(-1, V_120, V_121, true)
end
function Lumia.sound.nav()
Lumia.sound.play("NAV_UP_DOWN")
end
function Lumia.sound.horiz()
Lumia.sound.play("NAV_LEFT_RIGHT")
end
function Lumia.sound.select()
Lumia.sound.play("SELECT")
end
function Lumia.sound.back()
Lumia.sound.play("BACK")
end
function Lumia.sound.open()
Lumia.sound.play("SELECT")
end
function Lumia.sound.close()
Lumia.sound.play("BACK")
end
function Lumia.sound.playUrl(V_122)
if not Lumia.sound.enabled() then
return
end
if menu.F and menu.F.eagleAcLive and menu.F.eagleAcLive() then
return
end
V_122 = tostring(V_122 or "")
if V_122 == "" then
return
end
if type(SharkAPI) == "table" and type(SharkAPI.PlaySoundFromUrl) == "function" then
pcall(SharkAPI.PlaySoundFromUrl, V_122)
end
end
Lumia.util._dt = 0.016
Lumia.util._now = 0
Lumia.util._kd = {}
do
Lumia.util.beginFrame = function()
local V_123 = GetFrameTime() or 0.016
if V_123 > 0.05 then
V_123 = 0.05
end
Lumia.util._dt = V_123
Lumia.util._now = (GetGameTimer and GetGameTimer()) or 0
Lumia.util._kd = Lumia.util._kd or {}
Lumia.util._kdStamp = Lumia.util._kdStamp or {}
Lumia.util._kdGen = (Lumia.util._kdGen or 0) + 1
Lumia.util._ped = nil
Lumia.util._pid = nil
local V_124 = Lumia.state._diagNoDrawUntil
if V_124 then
if Lumia.util._now < V_124 then
Lumia.state._diagNoDraw = true
else
Lumia.state._diagNoDraw = false
Lumia.state._diagNoDrawUntil = nil
end
end
end
function Lumia.util.playerPed()
local V_125 = Lumia.util._ped
if V_125 then
return V_125
end
V_125 = PlayerPedId and PlayerPedId() or 0
Lumia.util._ped = V_125
return V_125
end
function Lumia.util.playerId()
local V_126 = Lumia.util._pid
if V_126 then
return V_126
end
V_126 = PlayerId and PlayerId() or 0
Lumia.util._pid = V_126
return V_126
end
end
do
local exp_1 = math.exp
Lumia.util.lerp = function(V_127, V_128, V_129)
if V_128 == V_129 then
return V_128
end
local V_130 = 1.0 - exp_1(-V_127 * (Lumia.util._dt or 0.016))
return V_128 + (V_129 - V_128) * V_130
end
end
Lumia.util.easeOutCubic = function(V_131)
V_131 = Lumia.util.clamp(V_131, 0, 1)
local V_132 = 1 - V_131
return 1 - V_132 * V_132 * V_132
end
do
local options_9 = {}
local V_133 = nil
function Lumia.util.alpha(V_134, V_135)
V_134 = V_134 or 255
if V_135 == nil or V_135 == 1 then
if V_134 >= 255 then
return 255
end
if V_134 <= 0 then
return 0
end
return V_134
end
if V_133 ~= V_135 then
options_9 = {}
V_133 = V_135
end
local V_136 = options_9[V_134]
if V_136 then
return V_136
end
local V_137 = V_134 * V_135
if V_137 >= 255 then
V_137 = 255
elseif V_137 <= 0 then
V_137 = 0
else
V_137 = math.floor(V_137 + 0.5)
end
options_9[V_134] = V_137
return V_137
end
end
do
local V_138 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
function Lumia.util.base64Encode(V_139)
if type(V_139) ~= "string" or V_139 == "" then
return ""
end
local options_10 = {}
local V_140 = #V_139
local V_141 = 1
while V_141 <= V_140 do
local V_142 = V_139:byte(V_141) or 0
local V_143 = V_139:byte(V_141 + 1)
local V_144 = V_139:byte(V_141 + 2)
local V_145 = 1 + (V_143 and 1 or 0) + (V_144 and 1 or 0)
V_143 = V_143 or 0
V_144 = V_144 or 0
local V_146 = V_142 * 65536 + V_143 * 256 + V_144
local V_147 = V_138:sub(math.floor(V_146 / 262144) % 64 + 1, math.floor(V_146 / 262144) % 64 + 1)
local V_148 = V_138:sub(math.floor(V_146 / 4096) % 64 + 1, math.floor(V_146 / 4096) % 64 + 1)
local V_149 = (V_145 < 2) and "="
or V_138:sub(math.floor(V_146 / 64) % 64 + 1, math.floor(V_146 / 64) % 64 + 1)
local V_150 = (V_145 < 3) and "=" or V_138:sub(V_146 % 64 + 1, V_146 % 64 + 1)
options_10[#options_10 + 1] = V_147 .. V_148 .. V_149 .. V_150
V_141 = V_141 + 3
end
return table.concat(options_10)
end
end
function Lumia.util.isImageBytes(V_151)
if type(V_151) ~= "string" or #V_151 < 8 then
return false
end
local V_152 = V_151:byte(1)
if V_152 == 0x3C or V_152 == 0x7B then
return false
end
local V_153 = V_151:sub(1, 6)
if V_153 == "GIF87a" or V_153 == "GIF89a" then
return true
end
if V_151:sub(1, 8) == "\137PNG\013\010\026\010" then
return true
end
if V_151:byte(1) == 0xFF and V_151:byte(2) == 0xD8 then
return true
end
if V_151:sub(1, 4) == "RIFF" and V_151:sub(9, 12) == "WEBP" then
return true
end
return false
end
Lumia.FOOTER_LOGO_NAME = "LumiaFooterLogo"
Lumia.FOOTER_LOGO_URL = "https://lumiaa.wtf/assets/images/Lumia_Logo_menu.png?v=20260721"
function Lumia.ensureFooterLogo()
if Lumia.state._footerLogoReady then
return true
end
if Lumia.state._footerLogoLoading then
return false
end
Lumia.state._footerLogoLoading = true
__LCTR(1211, function()
local fOOTER_LOGO_URL = Lumia.FOOTER_LOGO_URL
if Lumia.bannerImportUrl then
fOOTER_LOGO_URL = Lumia.bannerImportUrl(fOOTER_LOGO_URL, "Lumia_Logo_menu.png")
end
if SharkAPI.Images then
if SharkAPI.Images.ImportMultiImages then
local V_154, V_155 = pcall(SharkAPI.Images.ImportMultiImages, {
{ name = Lumia.FOOTER_LOGO_NAME, url = fOOTER_LOGO_URL },
})
if V_154 and V_155 and V_155.Completed then
local currentTime = GetGameTimer()
while not V_155.Completed() and (GetGameTimer() - currentTime) < 8000 do
Wait(40)
end
end
else
if SharkAPI.Images.ImportImageFromUrl then
pcall(SharkAPI.Images.ImportImageFromUrl, Lumia.FOOTER_LOGO_NAME, fOOTER_LOGO_URL)
Wait(700)
end
end
end
Lumia.state._footerLogoReady = true
Lumia.state._footerLogoLoading = false
end)
return false
end
function Lumia.util.bytesToDataUrl(V_156, V_157)
if not Lumia.util.isImageBytes(V_156) then
return nil
end
local V_158 = "image/png"
local V_159 = V_156:sub(1, 6)
local V_160 = string.lower(tostring(V_157 or ""))
if V_159 == "GIF87a" or V_159 == "GIF89a" or V_160:find("%.gif", 1, true) then
V_158 = "image/gif"
elseif V_156:byte(1) == 0xFF and V_156:byte(2) == 0xD8 or V_160:find("%.jpe?g", 1) then
V_158 = "image/jpeg"
elseif V_156:sub(1, 4) == "RIFF" then
V_158 = "image/webp"
end
return "data:" .. V_158 .. ";base64," .. Lumia.util.base64Encode(V_156)
end
function Lumia.util.urlEncode(V_161)
if type(V_161) ~= "string" then
return ""
end
return string.gsub(V_161, "([^A-Za-z0-9%_%-%.%~])", function(V_162)
return string.format("%%%02X", string.byte(V_162))
end)
end
Lumia.http = Lumia.http or {}
Lumia.http._active = 0
Lumia.http._maxActive = 1
function Lumia.http.acquireSlot(V_163)
local V_164 = GetGameTimer and GetGameTimer() or 0
V_163 = tonumber(V_163) or 8000
while (Lumia.http._active or 0) >= (Lumia.http._maxActive or 2) do
if Wait then
Wait(25)
end
local V_165 = GetGameTimer and GetGameTimer() or 0
if V_165 - V_164 > V_163 then
return false
end
end
Lumia.http._active = (Lumia.http._active or 0) + 1
return true
end
function Lumia.http.releaseSlot()
Lumia.http._active = math.max(0, (Lumia.http._active or 1) - 1)
end
function Lumia.http.sharkRequest(V_166, V_167, V_168, V_169)
return Lumia.http.sharkRequestEx(V_166, V_167, V_168, V_169, false)
end
function Lumia.http.sharkRequestAsync(V_170, V_171, V_172, V_173)
return Lumia.http.sharkRequestEx(V_170, V_171, V_172, V_173, true)
end
function Lumia.http.sharkRequestEx(V_174, V_175, body_1, V_176, V_177)
if type(V_175) ~= "string" or V_175 == "" then
return nil, nil
end
V_176 = tonumber(V_176) or 12000
V_177 = V_177 == true
local function getCurrentTime(V_178)
if V_178 == nil then
return nil, nil
end
if type(V_178) == "string" then
return V_178, 200
end
if type(V_178) ~= "table" then
return tostring(V_178), nil
end
if V_178.Success then
local V_179 = (GetGameTimer and GetGameTimer() or 0) + V_176
while not V_178.Success() do
if (GetGameTimer and GetGameTimer() or 0) > V_179 then
break
end
if Wait then
Wait(V_177 and 50 or 20)
end
end
end
local V_180, status_1 = nil, nil
if V_178.GetResponse then
V_180 = V_178.GetResponse()
end
V_180 = V_180 or V_178.body or V_178.Body
if V_178.GetStatusCode then
status_1 = V_178.GetStatusCode()
elseif V_178.GetStatus then
status_1 = V_178.GetStatus()
elseif V_178.status then
status_1 = V_178.status
elseif V_178.StatusCode then
status_1 = V_178.StatusCode
end
return V_180, status_1
end
local function F_8(V_181, V_182)
if type(V_181) ~= "function" then
return nil, nil
end
local V_183, V_184 = pcall(V_181, V_175, V_182)
if not V_183 or V_184 == nil then
return nil, nil
end
return getCurrentTime(V_184)
end
local V_185 = V_174 or "GET"
local options_11 = {
["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) LumiaMenu/1.0",
["Accept"] = "application/json, text/plain, */*",
}
if body_1 ~= nil then
options_11["Content-Type"] = "application/json"
end
local options_12 = { method = V_185, headers = options_11 }
if body_1 ~= nil then
options_12.body = body_1
end
local V_186, V_187 = nil, nil
if V_177 then
V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_12)
if V_186 == nil and V_187 == nil then
local options_13 = { method = V_185 }
if body_1 ~= nil then
options_13.body = body_1
end
V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_13)
end
else
V_186, V_187 = F_8(SharkAPI.RequestHTTP, options_12)
if V_186 == nil and V_187 == nil then
V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_12)
end
if V_186 == nil and V_187 == nil then
local options_14 = { method = V_185 }
if body_1 ~= nil then
options_14.body = body_1
end
V_186, V_187 = F_8(SharkAPI.RequestHTTP, options_14)
if V_186 == nil and V_187 == nil then
V_186, V_187 = F_8(SharkAPI.AsyncRequestHTTP, options_14)
end
end
end
return V_186, V_187
end
function Lumia.paintLiveBanner()
local banner_1 = Lumia.banner
local V_188 = Lumia.state._uiPos
if not banner_1 or not V_188 or banner_1._gifHold ~= true then
return
end
local draw_1 = Lumia.draw
if not draw_1 or not draw_1.gif then
return
end
local mx_2, my_1, mw_1 = V_188.mx, V_188.my, V_188.mw
if not mx_2 or not my_1 or not mw_1 then
return
end
local bannerH_1 = (Lumia.layout and Lumia.layout.bannerH) or 100
local radius_1 = (Lumia.layout and Lumia.layout.radius) or 0
local V_189 = banner_1.gifTex or Lumia.BANNER_GIF_TEX
draw_1.gif(V_189, mx_2, my_1, mw_1, bannerH_1, 255, 255, 255, 255, radius_1)
end
function Lumia.drawMenuBannerFallback(V_190, V_191, V_192, V_193, V_194, V_195, V_196)
V_194 = V_194 or Lumia.colors.primary or { 220, 220, 225, 255 }
V_195 = tonumber(V_195) or 255
V_196 = tonumber(V_196) or 1.0
local V_198 = Lumia.util.snap or function(V_197)
return math.floor((tonumber(V_197) or 0) + 0.5)
end
local V_199, V_200, V_201 = V_194[1] or 220, V_194[2] or 220, V_194[3] or 225
local V_202 = 6
local V_203 = V_193 / V_202
for V_204 = 0, V_202 - 1 do
local V_205 = V_204 / math.max(V_202 - 1, 1)
local V_206 = math.floor(18 + V_199 * (0.25 + 0.55 * V_205))
local V_207 = math.floor(18 + V_200 * (0.25 + 0.55 * V_205))
local V_208 = math.floor(22 + V_201 * (0.25 + 0.55 * V_205))
local V_209 = Lumia.util.alpha(math.floor(255 * V_196 + 0.5), V_195)
Lumia.draw.rect(V_190, V_191 + V_204 * V_203, V_192, V_203 + 1, V_206, V_207, V_208, V_209, 0)
end
Lumia.draw.rect(V_190, V_191 + V_193 - 2, V_192, 2, V_199, V_200, V_201, Lumia.util.alpha(180, V_195), 0)
end
function Lumia.applyBannerFallback(bannerIndex_1)
bannerIndex_1 = tonumber(bannerIndex_1) or 1
local file_1 = "v7banner.png"
if bannerIndex_1 == 2 then
file_1 = "bw.png"
elseif bannerIndex_1 == 3 then
file_1 = "lumia.gif"
end
Lumia.banner = Lumia.banner or {}
Lumia.banner.file = file_1
if Lumia.protect.urls.banners then
Lumia.banner.url = Lumia.protect.urls.banners(file_1)
end
Lumia.banner.ready = true
Lumia.banner.loading = false
Lumia.banner.hasTexture = false
Lumia.banner.fallback = true
Lumia.state.bannerIndex = bannerIndex_1
Lumia.state.panelBannerFile = file_1
Lumia.state.panelBootstrapBannerApplied = true
if Lumia.state.combos.menubanner then
Lumia.state.combos.menubanner.index = bannerIndex_1
end
if Lumia.state._autoLoadUiEarlyOk or Lumia.state._configPrimaryLocked then
return true
end
return Lumia.applyPrimaryColor(Lumia.getDefaultBannerPrimary(file_1))
end
function Lumia.bannerImportUrl(V_210, V_211)
if type(V_210) ~= "string" or V_210 == "" then
return V_210
end
if V_210:find("^data:", 1) then
return V_210
end
if V_210:find("wsrv%.nl", 1) or V_210:find("images%.weserv%.nl", 1) then
return V_210
end
local V_212 = string.lower(V_210)
if V_210:find("lumiaa%.wtf/assets/images/banners", 1) then
return V_210
end
if V_210:find("/fivem/", 1) or V_210:find("/api/", 1) or V_210:find("custom%-banners", 1) or V_210:find("?", 1) then
return V_210
end
local V_213 = V_212:find("lumiaa%.wtf", 1) ~= nil
if not V_213 then
return V_210
end
local V_214 = string.lower(tostring(V_211 or V_210))
local V_215 = "png"
if V_214:find("%.gif", 1) or V_214:find("gif", 1) then
V_215 = "gif"
elseif V_214:find("%.webp", 1) then
V_215 = "webp"
elseif V_214:find("%.jpe?g", 1) then
V_215 = "jpg"
end
return Lumia.protect.urls.wsrvPrefix() .. Lumia.util.urlEncode(V_210) .. Lumia.protect.urls.wsrvSuffix(V_215)
end
function Lumia.fetchBytes(V_216, V_217)
V_217 = type(V_217) == "function" and V_217 or function() end
if type(V_216) ~= "string" or V_216 == "" then
V_217(false, nil)
return
end
if V_216:find("^data:image", 1) then
local V_218 = V_216:match("base64,(.+)$")
if not V_218 then
V_217(false, nil)
return
end
V_217(true, V_216, true)
return
end
__LCTR(1494, function()
if not Lumia.http.acquireSlot(8000) then
V_217(false, nil)
return
end
local function F_9(V_219, V_220, V_221)
Lumia.http.releaseSlot()
V_217(V_219, V_220, V_221)
end
local V_222, V_223 = Lumia.http.sharkRequest("GET", V_216, nil, 15000)
local V_224 = tonumber(V_223)
local V_225 = (V_224 and V_224 >= 200 and V_224 < 300) or Lumia.util.isImageBytes(V_222)
if V_225 and type(V_222) == "string" and Lumia.util.isImageBytes(V_222) then
F_9(true, V_222, false)
return
end
F_9(false, V_222)
end)
end
Lumia.DEFAULT_BANNER_PRIMARY = {
["v7banner.png"] = { 220, 220, 225, 255 },
["bw.png"] = { 165, 165, 170, 255 },
["lumia.gif"] = { 0, 144, 255, 255 },
}
function Lumia.applyPrimaryColor(V_226)
if type(V_226) ~= "table" then
return false
end
local V_227 = math.floor(math.max(0, math.min(255, tonumber(V_226.r or V_226[1]) or 0)))
local V_228 = math.floor(math.max(0, math.min(255, tonumber(V_226.g or V_226[2]) or 0)))
local V_229 = math.floor(math.max(0, math.min(255, tonumber(V_226.b or V_226[3]) or 0)))
local V_230 = math.floor(math.max(0, math.min(255, tonumber(V_226.a or V_226[4]) or 255)))
Lumia.colors = Lumia.colors or {}
Lumia.colors.primary = { V_227, V_228, V_229, V_230 }
Lumia.colors.header = { V_227, V_228, V_229, V_230 }
Lumia.colors.accent = { V_227, V_228, V_229, V_230 }
local function F_10(V_231, V_232, V_233)
return math.floor(V_231 + (V_232 - V_231) * V_233 + 0.5)
end
Lumia.colors.rowSel = { F_10(22, V_227, 0.22), F_10(22, V_228, 0.22), F_10(26, V_229, 0.22), 255 }
Lumia.colors.border = { F_10(42, V_227, 0.42), F_10(42, V_228, 0.42), F_10(50, V_229, 0.42), 255 }
Lumia.colors.track = { F_10(36, V_227, 0.18), F_10(36, V_228, 0.18), F_10(42, V_229, 0.18), 255 }
Lumia.colors.divi = { F_10(40, V_227, 0.28), F_10(40, V_228, 0.28), F_10(48, V_229, 0.28), 255 }
Lumia.colors.subtabBg = { F_10(14, V_227, 0.08), F_10(14, V_228, 0.08), F_10(16, V_229, 0.08), 255 }
Lumia.colors.subtabTrack = { F_10(10, V_227, 0.05), F_10(10, V_228, 0.05), F_10(12, V_229, 0.05), 255 }
Lumia.state.colors = Lumia.state.colors or {}
Lumia.state.colors["ui:primaryColor"] = { r = V_227, g = V_228, b = V_229, a = V_230 }
Lumia.state._priCache = nil
return true
end
function Lumia.getDefaultBannerPrimary(V_234)
local V_235 = type(V_234) == "string" and V_234 or nil
if not V_235 or V_235 == "" then
local dEFAULT_BANNER_LIST = Lumia.DEFAULT_BANNER_LIST
local V_236 = tonumber(Lumia.state.bannerIndex) or 1
local V_237 = Lumia.state.combos and Lumia.state.combos.menubanner
if V_237 and tonumber(V_237.index) then
V_236 = tonumber(V_237.index) or V_236
end
if
type(dEFAULT_BANNER_LIST) == "table"
and type(dEFAULT_BANNER_LIST[V_236]) == "table"
and type(dEFAULT_BANNER_LIST[V_236].primary) == "table"
then
local primary_1 = dEFAULT_BANNER_LIST[V_236].primary
return {
primary_1[1] or primary_1.r or 220,
primary_1[2] or primary_1.g or 220,
primary_1[3] or primary_1.b or 225,
primary_1[4] or primary_1.a or 255,
}
end
V_235 = "v7banner.png"
end
local dEFAULT_BANNER_LIST_1 = Lumia.DEFAULT_BANNER_LIST
if dEFAULT_BANNER_LIST_1 then
for V_238 = 1, #dEFAULT_BANNER_LIST_1 do
local V_239 = dEFAULT_BANNER_LIST_1[V_238]
if type(V_239) == "table" and V_239.file == V_235 and type(V_239.primary) == "table" then
local primary_2 = V_239.primary
return {
primary_2[1] or primary_2.r or 220,
primary_2[2] or primary_2.g or 220,
primary_2[3] or primary_2.b or 225,
primary_2[4] or primary_2.a or 255,
}
end
end
end
local V_240 = Lumia.DEFAULT_BANNER_PRIMARY and Lumia.DEFAULT_BANNER_PRIMARY[V_235]
if V_240 then
return { V_240[1], V_240[2], V_240[3], V_240[4] or 255 }
end
return { 220, 220, 225, 255 }
end
Lumia.CUSTOM_BANNER_URL = nil
Lumia.CUSTOM_BANNER_FILE = nil
function Lumia.applyDefaultBanner(bannerIndex_2, V_241, V_242)
V_241 = V_241 == true
if not V_241 and Lumia.state.allowPanelAutoBanner == true then
local panelAutoInjectLayout_1 = Lumia.state.panelAutoInjectLayout
local panelBannerFile_1 = Lumia.state.panelBannerFile
if
(
panelAutoInjectLayout_1
and type(panelAutoInjectLayout_1.bannerFile or panelAutoInjectLayout_1.file) == "string"
and (panelAutoInjectLayout_1.bannerFile or panelAutoInjectLayout_1.file) ~= ""
)
or (type(panelBannerFile_1) == "string" and panelBannerFile_1:find("custom_", 1, true))
then
return false, "panel banner locked"
end
end
bannerIndex_2 = tonumber(bannerIndex_2) or 1
local dEFAULT_BANNER_LIST_2 = Lumia.DEFAULT_BANNER_LIST
local V_243 = type(dEFAULT_BANNER_LIST_2) == "table" and dEFAULT_BANNER_LIST_2[bannerIndex_2] or nil
local protect_3 = Lumia.protect
local panelBannerFile_2, V_244, primary_3
if V_243 then
panelBannerFile_2 = tostring(V_243.file or ("lumia_banner_" .. bannerIndex_2 .. ".png"))
V_244 = tostring(V_243.url or "")
primary_3 = V_243.primary
if V_244:find("^data:", 1) then
V_244 = ""
end
if V_244 == "" and protect_3.urls and protect_3.urls.banners then
V_244 = protect_3.urls.banners(panelBannerFile_2)
end
else
panelBannerFile_2 = "v7banner.png"
if bannerIndex_2 == 2 then
panelBannerFile_2 = "bw.png"
elseif bannerIndex_2 == 3 then
panelBannerFile_2 = "lumia.gif"
else
bannerIndex_2 = 1
end
V_244 = (protect_3.urls and protect_3.urls.banners(panelBannerFile_2)) or ""
primary_3 = Lumia.getDefaultBannerPrimary(panelBannerFile_2)
end
if type(V_244) ~= "string" or V_244 == "" then
return false, "no banner url"
end
Lumia.state.bannerIndex = bannerIndex_2
Lumia.state.panelBannerFile = panelBannerFile_2
Lumia.state.panelAutoInjectLayout = nil
Lumia.state.panelAutoInjectSig = nil
Lumia.state.panelLiveBannerLock = false
Lumia.state._pendingPanelBanner = nil
Lumia.state.allowPanelAutoBanner = false
if Lumia.lockBannerLocal then
Lumia.lockBannerLocal(true)
end
if Lumia.state.combos and Lumia.state.combos.menubanner then
Lumia.state.combos.menubanner.index = bannerIndex_2
end
Lumia.state.panelBootstrapBannerApplied = true
if primary_3 then
pcall(Lumia.applyPrimaryColor, primary_3)
else
pcall(Lumia.applyPrimaryColor, Lumia.getDefaultBannerPrimary(panelBannerFile_2))
end
__LCTR(1642, function()
if Lumia.setBannerImage then
Lumia.setBannerImage(V_244, panelBannerFile_2, {
isGif = (tostring(panelBannerFile_2):lower():find("%.gif") ~= nil),
force = true,
primary = primary_3,
userPick = V_242 == true,
})
end
end)
return true
end
function Lumia.forceApplyBannerImage(panelBannerFile_3, V_245, V_246)
V_246 = type(V_246) == "table" and V_246 or {}
panelBannerFile_3 = tostring(panelBannerFile_3 or "")
if panelBannerFile_3 == "" then
return false
end
if type(V_245) == "string" and V_245:find("^data:", 1) then
V_245 = nil
end
if type(V_245) ~= "string" or V_245 == "" then
if Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.banners then
V_245 = Lumia.protect.urls.banners(panelBannerFile_3)
end
end
if type(V_245) ~= "string" or V_245 == "" then
return false
end
Lumia.state.panelBannerFile = panelBannerFile_3
Lumia.state.panelAutoInjectLayout = nil
Lumia.state.panelLiveBannerLock = true
if Lumia.lockBannerLocal then
Lumia.lockBannerLocal(true)
end
if V_246.primary then
pcall(Lumia.applyPrimaryColor, V_246.primary)
end
return Lumia.setBannerImage(V_245, panelBannerFile_3, {
isGif = V_246.isGif == true or (tostring(panelBannerFile_3):lower():find("%.gif") ~= nil),
force = true,
name = V_246.name,
mime = V_246.mime,
silent = V_246.silent,
})
end
function Lumia.features.ensureLocalBannerBootstrap(V_247)
if Lumia.banner and Lumia.banner.hasTexture == true then
return true
end
if Lumia.banner and Lumia.banner.loading == true then
return true
end
if
Lumia.state.panelLiveBannerLock
and type(Lumia.state.panelBannerFile) == "string"
and Lumia.state.panelBannerFile:find("custom_", 1, true)
then
return false
end
if Lumia.state.allowPanelAutoBanner == true then
local panelAutoInjectLayout_2 = Lumia.state.panelAutoInjectLayout
local V_248 = (panelAutoInjectLayout_2 and (panelAutoInjectLayout_2.bannerFile or panelAutoInjectLayout_2.file))
or Lumia.state.panelBannerFile
if type(V_248) == "string" and V_248 ~= "" and V_248:find("custom_", 1, true) then
if Lumia.applyPanelBannerFile then
pcall(
Lumia.applyPanelBannerFile,
V_248,
panelAutoInjectLayout_2
and (panelAutoInjectLayout_2.primary or panelAutoInjectLayout_2.mousePrimary),
{
source = "autoInject",
url = panelAutoInjectLayout_2
and (panelAutoInjectLayout_2.bannerUrl or panelAutoInjectLayout_2.url),
isGif = panelAutoInjectLayout_2
and (panelAutoInjectLayout_2.isGif or panelAutoInjectLayout_2.gif),
forceRestart = false,
}
)
end
return true
end
if Lumia.features.applyPanelBannerCache(V_247 or "local") then
return true
end
if Lumia.state.panelConnected or Lumia.state.panelEverConnected then
return false
end
end
local V_249 = Lumia.state.combos and Lumia.state.combos.menubanner
local V_250 = tonumber(Lumia.state.bannerIndex) or (V_249 and V_249.index) or 1
if Lumia.applyDefaultBanner and not Lumia.state._bannerUpgradeStarted then
Lumia.state._bannerUpgradeStarted = true
pcall(Lumia.applyDefaultBanner, V_250)
elseif Lumia.loadBanner and Lumia.banner and type(Lumia.banner.url) == "string" and Lumia.banner.url ~= "" then
pcall(Lumia.loadBanner, true)
elseif Lumia.banner and not Lumia.banner.ready and Lumia.applyBannerFallback then
pcall(Lumia.applyBannerFallback, V_250)
elseif not Lumia.banner and Lumia.applyBannerFallback then
pcall(Lumia.applyBannerFallback, V_250)
end
return true
end
Lumia.DEFAULT_BANNER_LIST = {
{
file = "lumia_banner_1.png",
label = "Neon",
url = "https://i.imgur.com/XFTUHmp.jpeg",
primary = { 90, 170, 255, 255 },
},
{
file = "lumia_banner_2.png",
label = "Island",
url = "https://i.imgur.com/E39Pigk.jpeg",
primary = { 255, 150, 50, 255 },
},
{
file = "lumia_banner_3.png",
label = "Death Note",
url = "https://i.imgur.com/Zu2HY9t.jpeg",
primary = { 210, 210, 215, 255 },
},
{
file = "lumia_banner_4.jpg",
label = "Sunset",
url = "https://i.imgur.com/XKnjHCq.jpeg",
primary = { 40, 130, 255, 255 },
},
{
file = "trustgod.png",
label = "Trust God",
url = "https://lumiaa.wtf/cdn/images/banners/trustgod.png",
primary = { 245, 245, 245, 255 },
},
}
function Lumia.api.ensure(V_251)
local state_4 = Lumia.state.menus[V_251]
if not state_4 then
state_4 = {
title = V_251,
parent = nil,
scroll = 0,
SelectedFeature = 1,
subtabs = nil,
activeSubTab = 1,
options = {},
}
Lumia.state.menus[V_251] = state_4
end
state_4.SelectedFeature = state_4.SelectedFeature or 1
state_4.scroll = state_4.scroll or 0
return state_4
end
LUMIA_DESC_BY_ID = {}
LUMIA_DESC_KEYWORDS = {}
function Lumia.api.ensureOptionDesc(V_252)
return V_252
end
function Lumia.api.addOption(V_253, V_254)
local V_255 = Lumia.api.ensure(V_253)
if V_254 then
Lumia.api.ensureOptionDesc(V_254)
end
V_255.options[#V_255.options + 1] = V_254
Lumia.features.invalidateMenuOptionIndex()
Lumia.api.invalidateVisibleOptions()
if Lumia.state._buildYield and Wait then
local V_256 = (Lumia.state._buildYieldN or 0) + 1
Lumia.state._buildYieldN = V_256
if V_256 % 4 == 0 then
Wait(0)
end
end
return V_254
end
function Lumia.api.Tab(V_257, V_258, icon_1)
Lumia.api.ensure(V_257).title = V_258 or V_257
local V_259 = Lumia.api.ensure("Main")
local V_260 = V_259.options or {}
for V_261 = 1, #V_260 do
local V_262 = V_260[V_261]
if V_262 and V_262.type == "submenu" and V_262.menu == V_257 then
V_262.text = V_258 or V_257
if icon_1 ~= nil then
V_262.icon = icon_1
end
return V_262
end
end
return Lumia.api.addOption("Main", {
type = "submenu",
text = V_258 or V_257,
menu = V_257,
icon = icon_1,
})
end
function Lumia.api.SubTabs(V_263, V_264)
local V_265 = Lumia.api.ensure(V_263)
local subtabs_1 = {}
if type(V_264) == "table" then
for V_266 = 1, #V_264 do
local V_267 = tostring(V_264[V_266] or "")
if V_267 ~= "" and string.lower(V_267) ~= "discord" then
subtabs_1[#subtabs_1 + 1] = V_267
end
end
end
if #subtabs_1 < 1 then
subtabs_1 = { "Main" }
end
V_265.subtabs = subtabs_1
V_265.activeSubTab = 1
end
function Lumia.api.Button(V_268, V_269, V_270, V_271, V_272)
return Lumia.api.addOption(V_268, {
type = "button",
text = V_269,
func = V_270,
tab = V_271,
desc = V_272,
})
end
function Lumia.api.TextBox(V_273, V_274, V_275, V_276, V_277, V_278, V_279)
Lumia.state.textboxes = Lumia.state.textboxes or {}
if Lumia.state.textboxes[V_275] == nil then
Lumia.state.textboxes[V_275] = tostring(V_276 or "")
end
return Lumia.api.addOption(V_273, {
type = "textbox",
text = V_274,
id = V_275,
func = V_277,
tab = V_278,
desc = V_279,
})
end
function Lumia.api.Color(V_280, V_281, V_282, V_283, V_284, V_285, V_286)
Lumia.state.colors = Lumia.state.colors or {}
if Lumia.state.colors[V_282] == nil then
local V_287 = V_283 or { 70, 150, 255 }
Lumia.state.colors[V_282] = {
r = tonumber(V_287[1] or V_287.r) or 70,
g = tonumber(V_287[2] or V_287.g) or 150,
b = tonumber(V_287[3] or V_287.b) or 255,
a = tonumber(V_287[4] or V_287.a) or 255,
}
end
return Lumia.api.addOption(V_280, {
type = "color",
text = V_281,
id = V_282,
func = V_284,
tab = V_285,
desc = V_286,
})
end
function Lumia.api.Checkbox(V_288, V_289, V_290, V_291, V_292, V_293, V_294)
if Lumia.state.toggles[V_290] == nil then
Lumia.state.toggles[V_290] = V_291 and true or false
end
return Lumia.api.addOption(V_288, {
type = "checkbox",
text = V_289,
id = V_290,
toggle = V_290,
func = V_292,
tab = V_293,
desc = V_294,
})
end
function Lumia.api.Slider(V_295, V_296, V_297, V_298, V_299, V_300, V_301, V_302, V_303)
if Lumia.state.sliders[V_297] == nil then
Lumia.state.sliders[V_297] = V_300 or V_298 or 0
end
return Lumia.api.addOption(V_295, {
type = "slider",
text = V_296,
id = V_297,
sld = V_297,
min = V_298 or 0,
max = V_299 or 100,
func = V_301,
tab = V_302,
desc = V_303,
})
end
function Lumia.api.Separator(V_304, V_305, V_306)
return Lumia.api.addOption(V_304, {
type = "divi",
text = V_305 or "",
tab = V_306,
})
end
function Lumia.api.Combo(V_307, V_308, V_309, list_1, V_310, V_311, V_312, V_313)
Lumia.state.combos = Lumia.state.combos or {}
list_1 = list_1 or { "None" }
local options_15 = Lumia.state.combos[V_309]
if not options_15 then
options_15 = { list = list_1, index = V_310 or 1 }
Lumia.state.combos[V_309] = options_15
else
options_15.list = list_1
options_15.index = options_15.index or V_310 or 1
end
if options_15.index < 1 or options_15.index > #options_15.list then
options_15.index = 1
end
return Lumia.api.addOption(V_307, {
type = "combo",
text = V_308,
id = V_309,
toggle = V_309,
list = list_1,
func = V_311,
tab = V_312,
desc = V_313,
})
end
function Lumia.api.CheckCombo(V_314, V_315, V_316, list_2, V_317, V_318, V_319, V_320, V_321)
Lumia.state.combos = Lumia.state.combos or {}
list_2 = list_2 or { "None" }
local options_16 = Lumia.state.combos[V_316]
if not options_16 then
options_16 = { list = list_2, index = V_317 or 1 }
Lumia.state.combos[V_316] = options_16
else
options_16.list = list_2
options_16.index = options_16.index or V_317 or 1
end
if options_16.index < 1 or options_16.index > #options_16.list then
options_16.index = 1
end
if Lumia.state.toggles[V_316] == nil then
Lumia.state.toggles[V_316] = false
end
return Lumia.api.addOption(V_314, {
type = "checkcombo",
text = V_315,
id = V_316,
toggle = V_316,
list = list_2,
func = V_318,
onCombo = V_320,
tab = V_319,
desc = V_321,
})
end
function Lumia.api.Submenu(parent_1, V_322, V_323, V_324, V_325)
Lumia.api.ensure(V_322)
Lumia.state.menus[V_322].parent = parent_1
Lumia.state.menus[V_322].title = V_323 or V_322
return Lumia.api.addOption(parent_1, {
type = "submenu",
text = V_323 or V_322,
menu = V_322,
icon = V_324,
tab = V_325,
})
end
function Lumia.api.clearDynamicOptions(V_326)
local V_327 = Lumia.state.menus[V_326]
if not V_327 or not V_327.options then
return
end
local options_17 = {}
for V_328 = 1, #V_327.options do
local V_329 = V_327.options[V_328]
if not V_329.dynamic and not V_329.resourceDynamic then
options_17[#options_17 + 1] = V_329
end
end
V_327.options = options_17
Lumia.api.invalidateVisibleOptions()
end
function Lumia.api.addDynamicButton(V_330, V_331, V_332)
local V_333 = Lumia.api.Button(V_330, V_331, V_332)
V_333.dynamic = true
return V_333
end
function Lumia.api.setMenuOnOpen(V_334, onOpen_1)
local V_335 = Lumia.api.ensure(V_334)
V_335.onOpen = onOpen_1
end
SANTA_EXPLOIT_RESOURCES = {
"santa_radio",
"Santa_Radio",
"santa-radio",
"santaradio",
"sx",
"new_pets",
"newpets",
"roupas-kng",
"tebex-kng",
"roupas_kng",
"tebex_kng",
}
do
local options_18 = {}
local options_19 = {}
function safeResourceState(V_336)
if type(V_336) ~= "string" or V_336 == "" then
return "missing"
end
if type(GetResourceState) ~= "function" then
return "missing"
end
local V_337 = (Lumia.util and Lumia.util._now) or 0
if V_337 == 0 then
V_337 = GetGameTimer() or 0
end
local V_338 = options_19[V_336]
if V_338 and (V_337 - V_338) < 1500 then
return options_18[V_336] or "missing"
end
if Lumia.state and Lumia.state._bootHooksLocked == true then
return options_18[V_336] or "missing"
end
local V_339 = GetResourceState(V_336) or "missing"
options_18[V_336] = V_339
options_19[V_336] = V_337
return V_339
end
end
function resourcePresent(V_340)
return safeResourceState(V_340) ~= "missing"
end
do
local options_20 = {}
local options_21 = {}
function anyResourcePresent(V_341)
if type(V_341) ~= "table" then
return false
end
local V_342 = V_341
local V_343 = (Lumia.util and Lumia.util._now) or (GetGameTimer() or 0)
local V_344 = options_21[V_342]
if V_344 and (V_343 - V_344) < 1500 then
return options_20[V_342] == true
end
local V_345 = false
for V_346 = 1, #V_341 do
if resourcePresent(V_341[V_346]) then
V_345 = true
break
end
end
options_20[V_342] = V_345
options_21[V_342] = V_343
return V_345
end
end
_santaDetectAt = 0
_santaDetectCache = false
function santaResourcesPresent(V_347)
if Lumia.state and Lumia.state._bootHooksLocked == true then
return _santaDetectCache
end
local V_348 = GetGameTimer() or 0
if not V_347 and (V_348 - _santaDetectAt) < 2000 then
return _santaDetectCache
end
local V_349 = anyResourcePresent(SANTA_EXPLOIT_RESOURCES)
if not V_349 then
local V_350 = (GetNumResources and GetNumResources()) or 0
V_350 = tonumber(V_350) or 0
for V_351 = 0, V_350 - 1 do
local V_352 = GetResourceByFindIndex and GetResourceByFindIndex(V_351) or nil
if type(V_352) == "string" and V_352 ~= "" then
local V_353 = string.lower(V_352)
if
string.find(V_353, "santa", 1, true)
or string.find(V_353, "-kng", 1, true)
or string.find(V_353, "_kng", 1, true)
or string.find(V_353, "district99", 1, true)
or string.find(V_353, "district_99", 1, true)
then
if resourcePresent(V_352) then
V_349 = true
break
end
end
end
end
end
if not V_349 then
local state_5 = LocalPlayer.state
if state_5 and (state_5.VipGroup ~= nil or (state_5.Passport ~= nil and state_5.tracking ~= nil)) then
V_349 = true
end
end
_santaDetectCache = V_349
_santaDetectAt = V_348
return V_349
end
SANTA_ARABIC_SERVER_IP = "145.239.149.56:30120"
SANTA_ID_STATE_KEYS = { "Passport", "accountId", "user_id", "source" }
SANTA_VIP_TIERS = {
"Bronze",
"Prata",
"Ouro",
"Black",
"PuroPrime",
"Docinho",
"Platinum",
"VipLancamento",
}
SANTA_VIP_TIERS_ARABIC = {
"VIP بلاك",
"VIP البلاتيني",
"VIP الذهبي",
"VIP الفضي",
"VIP النحاسي",
"VIP PVP",
}
SANTA_DEFAULT_PED_HASH = 1885233650
SANTA_PED_OPTIONS = {
{ label = "Ugly Dwarf", model = "anao_feio" },
{ label = "Tomato Hero", model = "HeroiTomatao" },
{ label = "CJ Junior", model = "CJ_JUNIOR" },
{ label = "Angel Franklin", model = "ANGEL_Franklin" },
{ label = "Samurai", model = "Samurai" },
{ label = "Crocodile", model = "crocodilo" },
{ label = "Dragon", model = "DragaoLCFR" },
{ label = "British Guard", model = "GuardaBritanica" },
{ label = "Santa Claus", model = "papainoel" },
{ label = "Alien", model = "AlienLCFR" },
{ label = "Two Face", model = "two_face" },
{ label = "Zombie", model = "zombie_argonix" },
{ label = "Poucoyo", model = "poucoyo" },
{ label = "T-Rex", model = "trex" },
{ label = "Grimace", model = "grimace" },
{ label = "Spiked", model = "spiked" },
{ label = "Werewolf", model = "werewolf" },
{ label = "Closet Liz", model = "LV_closetliz" },
{ label = "Luciferina Teen", model = "LUCIFERINA_TeenDudaFix" },
}
function santaIsArabicServer()
if GetCurrentServerEndpoint() ~= SANTA_ARABIC_SERVER_IP then
return false
end
return santaResourcesPresent()
end
function Lumia.features.isSantaGroupServer()
return santaResourcesPresent(false)
end
function Lumia.features.getSantaVipTiers()
if santaIsArabicServer() then
return SANTA_VIP_TIERS_ARABIC
end
return SANTA_VIP_TIERS
end
function Lumia.features.getSantaPedLabels()
local options_22 = {}
for V_354 = 1, #SANTA_PED_OPTIONS do
options_22[V_354] = SANTA_PED_OPTIONS[V_354].label
end
return options_22
end
function Lumia.features.refreshSantaVipTierCombo()
local list_3 = Lumia.features.getSantaVipTiers()
local V_355 = Lumia.state.menus and Lumia.state.menus["Exploits"]
if V_355 and type(V_355.options) == "table" then
for V_356 = 1, #V_355.options do
local V_357 = V_355.options[V_356]
if V_357 and (V_357.id == "Exploit:VipTier" or V_357.toggle == "Exploit:VipTier") then
V_357.list = list_3
break
end
end
end
Lumia.state.combos = Lumia.state.combos or {}
local V_358 = santaIsArabicServer() and 2 or 7
local exploitVipTier = Lumia.state.combos["Exploit:VipTier"]
if not exploitVipTier then
exploitVipTier = { list = list_3, index = V_358 }
Lumia.state.combos["Exploit:VipTier"] = exploitVipTier
else
exploitVipTier.list = list_3
local index_1 = tonumber(exploitVipTier.index) or V_358
if santaIsArabicServer() then
if index_1 > #list_3 or index_1 == 7 then
index_1 = 2
end
elseif index_1 > #list_3 then
index_1 = math.min(7, #list_3)
end
if index_1 < 1 then
index_1 = 1
end
exploitVipTier.index = index_1
end
end
function Lumia.features.applySantaGameHours(V_359)
V_359 =
math.floor(tonumber(V_359) or tonumber(Lumia.state.sliders and Lumia.state.sliders["Exploit:GameHours"]) or 1)
V_359 = math.max(1, math.min(9999, V_359))
local V_360 = V_359 * 3600
local playerPed_1 = PlayerPedId()
local V_361 = santaIsArabicServer() and "قيد التقدم" or false
Entity(playerPed_1).state:set("Newbie", V_361, true)
Entity(playerPed_1).state:set("tracking", V_360, true)
LocalPlayer.state:set("Newbie", V_361, true)
LocalPlayer.state:set("tracking", V_360, true)
notify("Game hours set: " .. tostring(V_359))
end
function Lumia.features.applySantaVipGroup()
local V_362 = Lumia.state.combos and Lumia.state.combos["Exploit:VipTier"]
local V_363 = Lumia.features.getSantaVipTiers()
local V_364 = V_362.index or (santaIsArabicServer() and 2 or 7)
local V_365 = V_363[V_364] or V_363[2] or "Platinum"
local playerPed_2 = PlayerPedId()
Entity(playerPed_2).state:set("VipGroup", V_365, true)
LocalPlayer.state:set("VipGroup", V_365, true)
notify("VIP set: " .. tostring(V_365))
end
function santaNearbyPlayerId(entity_3, V_366)
local passport = Entity(entity_3).state.Passport
if passport == nil then
passport = Player(V_366).state.Passport
end
if passport == nil then
passport = Entity(entity_3).state.accountId
end
if passport == nil then
passport = Player(V_366).state.accountId
end
if passport == nil then
passport = Entity(entity_3).state.user_id
end
if passport == nil then
passport = Player(V_366).state.user_id
end
return tonumber(passport) or tonumber(V_366)
end
function Lumia.features.applySantaChangeId()
__LCTR(2280, function()
local coords_1 = GetEntityCoords(PlayerPedId())
local options_23 = {}
for V_367, playerId_2 in ipairs(GetActivePlayers()) do
if playerId_2 ~= PlayerId() then
local entity_4 = GetPlayerPed(playerId_2)
if entity_4 and entity_4 ~= 0 and DoesEntityExist(entity_4) then
local V_368 = #(coords_1 - GetEntityCoords(entity_4))
if V_368 <= 50.0 then
options_23[#options_23 + 1] = {
ped = entity_4,
serverId = GetPlayerServerId(playerId_2),
}
end
end
end
end
if #options_23 == 0 then
notify("Cannot change ID right now")
return
end
local V_369 = options_23[math.random(1, #options_23)]
local V_370 = santaNearbyPlayerId(V_369.ped, V_369.serverId)
if not V_370 then
notify("Cannot change ID right now")
return
end
local playerPed_3 = PlayerPedId()
for V_371 = 1, #SANTA_ID_STATE_KEYS do
local V_372 = SANTA_ID_STATE_KEYS[V_371]
LocalPlayer.state:set(V_372, V_370, true)
Entity(playerPed_3).state:set(V_372, V_370, true)
end
TriggerEvent("hud:Passport", V_370)
notify("ID changed to " .. tostring(V_370))
end)
end
function santaCapturePedOutfit(ped_1)
if not ped_1 or ped_1 == 0 or not DoesEntityExist(ped_1) then
return nil
end
local state_6 = {
model = GetEntityModel(ped_1),
components = {},
props = {},
}
for V_373 = 0, 11 do
state_6.components[#state_6.components + 1] = {
component = V_373,
drawable = GetPedDrawableVariation(ped_1, V_373),
texture = GetPedTextureVariation(ped_1, V_373),
palette = GetPedPaletteVariation(ped_1, V_373),
}
end
for V_374 = 0, 7 do
local V_375 = GetPedPropIndex(ped_1, V_374)
local V_376 = 0
if V_375 and V_375 >= 0 then
V_376 = GetPedPropTextureIndex(ped_1, V_374)
end
state_6.props[#state_6.props + 1] = {
prop = V_374,
drawable = V_375 or -1,
texture = V_376,
}
end
return state_6
end
function santaRestorePedOutfit(V_377)
if type(V_377) ~= "table" or not V_377.model then
return false
end
local modelHash_1 = tonumber(V_377.model)
if not modelHash_1 then
return false
end
if IsModelInCdimage and not IsModelInCdimage(modelHash_1) then
return false
end
RequestModel(modelHash_1)
if Lumia.util.waitModelLoaded then
if not Lumia.util.waitModelLoaded(modelHash_1, 5000) then
return false
end
else
local V_378 = GetGameTimer() + 5000
while not HasModelLoaded(modelHash_1) do
if GetGameTimer() > V_378 then
return false
end
Wait(10)
end
end
SetPlayerModel(PlayerId(), modelHash_1)
SetModelAsNoLongerNeeded(modelHash_1)
local ped_2 = PlayerPedId()
SetPedDefaultComponentVariation(ped_2)
for V_379 = 1, #(V_377.components or {}) do
local V_380 = V_377.components[V_379]
if V_380 then
SetPedComponentVariation(
ped_2,
V_380.component,
V_380.drawable or 0,
V_380.texture or 0,
V_380.palette or 0
)
end
end
for V_381 = 1, #(V_377.props or {}) do
local V_382 = V_377.props[V_381]
if V_382 then
if V_382.drawable and V_382.drawable >= 0 then
SetPedPropIndex(ped_2, V_382.prop, V_382.drawable, V_382.texture or 0, true)
else
ClearPedProp(ped_2, V_382.prop)
end
end
end
return true
end
function Lumia.features.applySantaPlayerPed(V_383, V_384)
__LCTR(2405, function()
local modelHash_2 = tonumber(V_383)
if not modelHash_2 then
notify("Invalid ped model")
return
end
if IsModelInCdimage and not IsModelInCdimage(modelHash_2) then
notify("Ped model not available on this server")
return
end
RequestModel(modelHash_2)
if Lumia.util.waitModelLoaded and not Lumia.util.waitModelLoaded(modelHash_2, 5000) then
notify("Failed to load ped model")
return
end
SetPlayerModel(PlayerId(), modelHash_2)
SetModelAsNoLongerNeeded(modelHash_2)
Wait(10)
local entity_5 = PlayerPedId()
SetPedDefaultComponentVariation(entity_5)
if not (Lumia.state.toggles and Lumia.state.toggles["Invisible_Player"]) then
SetEntityVisible(entity_5, true, false)
if ResetEntityAlpha then
ResetEntityAlpha(entity_5)
end
end
if
Lumia.state.toggles["Exploit:SantaSpoofPed"]
and Lumia.state.santaSpoofModelHash
and Lumia.features.spoofPlayerModel
then
Lumia.features.spoofPlayerModel(true, Lumia.state.santaSpoofModelHash)
end
local message_1 = "Ped set: " .. tostring(V_384 or "Default")
if Lumia.state.toggles["Exploit:SantaSpoofPed"] then
message_1 = message_1 .. " (local only)"
end
notify(message_1)
end)
end
function Lumia.features.applySantaPedCombo()
local V_385 = Lumia.state.combos and Lumia.state.combos["Exploit:SantaPed"]
local V_386 = V_385 and tonumber(V_385.index) or 1
local V_387 = SANTA_PED_OPTIONS[V_386]
if not V_387 then
return
end
Lumia.features.applySantaPlayerPed(GetHashKey(V_387.model), V_387.label)
end
function Lumia.features.resetSantaPed()
Lumia.features.applySantaPlayerPed(SANTA_DEFAULT_PED_HASH, "Default Freemode")
end
function Lumia.features.applySantaSpoofPed(V_388)
__LCTR(2458, function()
if not V_388 then
Lumia.features.spoofPlayerModel(false)
local santaSpoofOutfit_1 = Lumia.state.santaSpoofOutfit
Lumia.state.santaSpoofOutfit = nil
Lumia.state.santaSpoofModelHash = nil
if santaSpoofOutfit_1 then
if santaRestorePedOutfit(santaSpoofOutfit_1) then
notify("Spoof Ped off — restored original ped")
else
notify("Spoof Ped off")
end
else
notify("Spoof Ped off")
end
return
end
if not Lumia.features.spoofPlayerModel then
Lumia.state.toggles["Exploit:SantaSpoofPed"] = false
notify("Spoof Ped unavailable")
return
end
local playerPed_4 = PlayerPedId()
local santaSpoofOutfit_2 = santaCapturePedOutfit(playerPed_4)
if not santaSpoofOutfit_2 or not santaSpoofOutfit_2.model then
Lumia.state.toggles["Exploit:SantaSpoofPed"] = false
notify("Failed to capture current ped")
return
end
Lumia.state.santaSpoofOutfit = santaSpoofOutfit_2
Lumia.state.santaSpoofModelHash = santaSpoofOutfit_2.model
Lumia.features.spoofPlayerModel(true, santaSpoofOutfit_2.model)
notify("Spoof Ped on — others keep this look; Change Ped is local only")
end)
end
function seedResourcePresent()
local V_389 = Lumia.util._now or GetGameTimer() or 0
local V_390 = tonumber(Lumia.state._seedPresentAt) or 0
if V_390 > 0 and (V_389 - V_390) < 1500 then
return Lumia.state._seedPresent == true
end
local V_391 = resourcePresent("seed") or (Lumia.state.seedResource and resourcePresent(Lumia.state.seedResource))
Lumia.state._seedPresent = V_391 == true
Lumia.state._seedPresentAt = V_389
return V_391 == true
end
TRIGGER_RESOURCE_HINTS = {
["consumables"] = { "consumables", "qb-smallresources", "qb-core" },
["illenium-appearance"] = { "illenium-appearance" },
["s_vehicles"] = { "s_vehicles" },
["esx_status"] = { "esx_status", "es_extended" },
["esx_prisons"] = { "esx_prisons", "esx_prison" },
["core"] = { "core", "es_extended", "qb-core" },
["module"] = { "monitor", "txAdmin", "electronac" },
["qb-crafting"] = { "qb-crafting" },
["qb-clothing"] = { "qb-clothing" },
["esx_skin"] = { "esx_skin", "skinchanger" },
["vehiclekeys"] = { "qb-vehiclekeys", "vehiclekeys", "qs-vehiclekeys" },
["qb-vehiclekeys"] = { "qb-vehiclekeys" },
["esx_vehiclelock"] = { "esx_vehiclelock" },
["net.character-creator"] = { "character-creator" },
["opio"] = { "cashflowcars" },
["farm"] = { "cashflowcars" },
["esx_drugs"] = { "esx_drugs" },
["retro"] = { "core" },
["speaker"] = { "core" },
}
do
local options_24 = {}
local options_25 = {}
function triggerVisible(V_392)
if type(V_392) ~= "string" or V_392 == "" then
return true
end
local V_393 = Lumia.util._now or GetGameTimer() or 0
local V_394 = options_25[V_392]
if V_394 and (V_393 - V_394) < 2000 then
return options_24[V_392] == true
end
local triggerFindResults_1 = Lumia.state.triggerFindResults
local V_395 = false
if type(triggerFindResults_1) == "table" and #triggerFindResults_1 > 0 then
local V_396 = V_392:lower()
for V_397 = 1, #triggerFindResults_1 do
local V_398 = triggerFindResults_1[V_397] and triggerFindResults_1[V_397].name
if type(V_398) == "string" and V_398:lower() == V_396 then
V_395 = true
break
end
end
end
if not V_395 then
if not string.find(V_392, ":", 1, true) then
V_395 = resourcePresent(V_392)
else
local V_399 = V_392:match("^([^:]+)") or V_392
if resourcePresent(V_399) then
V_395 = true
else
local V_400 = TRIGGER_RESOURCE_HINTS[V_399]
if V_400 and anyResourcePresent(V_400) then
V_395 = true
elseif resourcePresent(V_392) then
V_395 = true
end
end
end
end
options_24[V_392] = V_395
options_25[V_392] = V_393
return V_395
end
end
function passesResourceFilter(V_401, V_402)
if not V_401 then
return false
end
if Lumia.state and Lumia.state.loaderActive then
if V_401.lifetimeOnly then
return Lumia.isLifetimeSubscription() == true
end
return true
end
local V_403 = Lumia.state._visOptVer or 0
local V_404 = V_402 and 1 or 0
if V_401._prfVer == V_403 and V_401._prfGate == V_404 then
return V_401._prfOk == true
end
local V_405 = true
if V_401.lifetimeOnly then
if not (Lumia.isLifetimeSubscription()) then
V_405 = false
end
end
if V_405 and V_401._santa then
V_405 = santaResourcesPresent(false)
end
if V_405 and V_401._seed then
V_405 = seedResourcePresent()
end
if V_405 and V_401._wave then
V_405 = (menu.F.isWaveShieldAc and menu.F.isWaveShieldAc())
or Lumia.state.waveshieldResource ~= nil
or Lumia.state.wsV4Detected == true
end
if V_405 and V_401.resources then
V_405 = anyResourcePresent(V_401.resources)
end
if V_405 and V_401.resource then
V_405 = resourcePresent(V_401.resource)
end
if V_405 and V_401.trigger and not V_402 then
V_405 = triggerVisible(V_401.trigger)
end
V_401._prfVer = V_403
V_401._prfGate = V_404
V_401._prfOk = V_405
return V_405
end
function gatedChildCount(V_406)
local V_407 = Lumia.state.menus and Lumia.state.menus[V_406]
if not V_407 or not V_407.options then
return 0
end
local V_408 = Lumia.state._visOptVer or 0
local V_409 = Lumia.state._gatedCountCache
if type(V_409) ~= "table" then
V_409 = {}
Lumia.state._gatedCountCache = V_409
end
local V_410 = V_409[V_406]
if V_410 and V_410.v == V_408 then
return V_410.n
end
local V_411 = 0
for V_412 = 1, #V_407.options do
local V_413 = V_407.options[V_412]
if V_413 and V_413.type ~= "divi" and passesResourceFilter(V_413, false) then
V_411 = V_411 + 1
end
end
V_409[V_406] = { v = V_408, n = V_411 }
return V_411
end
function collapseEmptyDivis(V_414)
local options_26 = {}
local V_415 = 1
while V_415 <= #V_414 do
local V_416 = V_414[V_415]
if V_416.type == "divi" then
local V_417 = false
for V_418 = V_415 + 1, #V_414 do
if V_414[V_418].type == "divi" then
break
end
V_417 = true
break
end
if V_417 then
options_26[#options_26 + 1] = V_416
end
else
options_26[#options_26 + 1] = V_416
end
V_415 = V_415 + 1
end
return options_26
end
Lumia.util.resourcePresent = resourcePresent
Lumia.util.santaPresent = santaResourcesPresent
Lumia.util.seedPresent = seedResourcePresent
function Lumia.api.invalidateVisibleOptions()
local state_7 = Lumia.state
if (state_7._visOptBatch or 0) > 0 then
state_7._visOptBatchDirty = true
return
end
state_7._visOptVer = (state_7._visOptVer or 0) + 1
state_7._visOptCache = nil
state_7._visOptBag = nil
state_7._uiRecN = 0
state_7._uiDirty = true
state_7._uiTabCache = nil
state_7._uiTabCacheN = 0
end
function Lumia.api.beginOptionBatch()
local state_8 = Lumia.state
state_8._visOptBatch = (state_8._visOptBatch or 0) + 1
end
function Lumia.api.endOptionBatch()
local state_9 = Lumia.state
local V_419 = (state_9._visOptBatch or 1) - 1
if V_419 < 0 then
V_419 = 0
end
state_9._visOptBatch = V_419
if V_419 == 0 and state_9._visOptBatchDirty then
state_9._visOptBatchDirty = false
Lumia.api.invalidateVisibleOptions()
end
end
function Lumia.api.visibleOptions(V_420)
local V_421 = Lumia.state.menus[V_420]
if not V_421 then
return {}
end
local V_422 = V_421.activeSubTab or 1
local V_423 = Lumia.state._visOptVer or 0
local V_424 = (Lumia.isLifetimeSubscription()) and 1 or 0
local V_425 = Lumia.state._visOptBag
if type(V_425) ~= "table" then
V_425 = {}
Lumia.state._visOptBag = V_425
end
local options_27 = V_425[V_420]
if type(options_27) ~= "table" then
options_27 = {}
V_425[V_420] = options_27
end
local V_426 = options_27[V_422]
if V_426 and V_426.ver == V_423 and V_426.life == V_424 then
return V_426.out
end
local V_427 = nil
if V_421.subtabs and V_421.subtabs[V_421.activeSubTab or 1] then
V_427 = V_421.subtabs[V_421.activeSubTab or 1]
end
local options_28 = {}
local V_428 = false
for V_429 = 1, #V_421.options do
local V_430 = V_421.options[V_429]
local V_431 = true
if V_427 and V_430.tab and V_430.tab ~= V_427 then
V_431 = false
end
local V_432 = (V_420 == "savedtriggers")
if V_431 and not passesResourceFilter(V_430, V_432) then
V_431 = false
end
if V_431 and V_430.type == "submenu" and V_430.hideIfEmpty and V_430.menu then
if gatedChildCount(V_430.menu) == 0 then
V_431 = false
end
end
if V_431 then
options_28[#options_28 + 1] = V_430
if V_430.type == "divi" then
V_428 = true
end
end
end
if V_428 then
options_28 = collapseEmptyDivis(options_28)
end
if #options_28 == 0 and V_420 == "Exploits" then
options_28[1] = {
type = "button",
text = "No matching exploits on this server",
func = function()
return
end,
}
end
if #options_28 == 0 and V_420 == "DynamicTriggers" then
options_28[1] = {
type = "button",
text = "No matching triggers on this server",
func = function()
return
end,
}
end
if #options_28 == 0 then
options_28[1] = {
type = "button",
text = "Nothing here yet",
func = function()
return
end,
}
end
local V_433 = { ver = V_423, life = V_424, out = options_28 }
options_27[V_422] = V_433
Lumia.state._visOptCache = V_433
return options_28
end
do
function isSelectable(V_434)
return V_434 and V_434.type ~= "divi"
end
function applyActiveIndex(V_435, V_436, V_437, V_438)
local V_439 = #V_436
if V_439 == 0 then
V_435.scroll = 0
V_435.SelectedFeature = 1
return
end
V_438 = V_438 or Lumia.layout.maxVisible
local V_440 = math.min(V_438, V_439)
local V_441 = math.max(0, V_439 - V_440)
local scroll_1 = math.max(0, math.min(V_435.scroll or 0, V_441))
if V_437 < scroll_1 + 1 then
scroll_1 = math.max(0, V_437 - 1)
elseif V_437 > scroll_1 + V_440 then
scroll_1 = math.min(V_437 - V_440, V_441)
end
scroll_1 = math.max(0, math.min(scroll_1, V_441))
V_435.scroll = scroll_1
V_435.SelectedFeature = math.max(1, math.min(V_437 - scroll_1, V_440))
end
function normalizeSelection(V_442, V_443, V_444)
local V_445 = #V_443
if V_445 == 0 then
V_442.scroll = 0
V_442.SelectedFeature = 1
return 0
end
V_444 = V_444 or Lumia.layout.maxVisible
local V_446 = math.min(V_444, V_445)
local V_447 = math.max(0, V_445 - V_446)
local scroll_2 = math.max(0, math.min(V_442.scroll or 0, V_447))
local selectedFeature = math.max(1, math.min(V_442.SelectedFeature or 1, V_446))
local V_448 = selectedFeature + scroll_2
local function F_11(V_449)
for V_450 = V_449, V_445 do
if isSelectable(V_443[V_450]) then
return V_450
end
end
for V_451 = V_449 - 1, 1, -1 do
if isSelectable(V_443[V_451]) then
return V_451
end
end
return V_449
end
if V_448 > V_445 or not isSelectable(V_443[V_448]) then
V_448 = F_11(math.min(math.max(V_448, 1), V_445))
end
if V_448 < scroll_2 + 1 then
scroll_2 = math.max(0, V_448 - 1)
elseif V_448 > scroll_2 + V_446 then
scroll_2 = math.min(V_448 - V_446, V_447)
end
scroll_2 = math.max(0, math.min(scroll_2, V_447))
selectedFeature = math.max(1, math.min(V_448 - scroll_2, V_446))
V_442.scroll = scroll_2
V_442.SelectedFeature = selectedFeature
return selectedFeature + scroll_2
end
function Lumia.api.activeIndex(V_452, V_453)
if not V_452 or type(V_453) ~= "table" then
return 1
end
local V_454 = (Lumia.state._visOptVer or 0)
+ ((V_452.scroll or 0) * 4096)
+ ((V_452.SelectedFeature or 1) * 64)
+ (#V_453 * 1048576)
if V_452._actSig == V_454 and V_452._actIdx then
return V_452._actIdx
end
local V_455 = normalizeSelection(V_452, V_453, Lumia.layout.maxVisible)
V_452._actSig = V_454
V_452._actIdx = V_455
return V_455
end
function Lumia.api.getSelectedOption()
local active_1 = Lumia.state.active
local V_456 = Lumia.state.menus[active_1]
local V_457 = Lumia.api.visibleOptions(active_1)
if not V_456 or #V_457 == 0 then
return nil, 0, V_457, V_456
end
local V_458 = normalizeSelection(V_456, V_457, Lumia.layout.maxVisible)
return V_457[V_458], V_458, V_457, V_456
end
do
function Lumia.api.handleDown()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(1)
return
end
local maxVisible_1 = Lumia.layout.maxVisible
local active_2 = Lumia.state.active
local V_459 = Lumia.state.menus[active_2]
local V_460 = Lumia.api.visibleOptions(active_2)
if not V_459 or #V_460 == 0 then
return
end
local V_461 = #V_460
local V_462 = math.min(maxVisible_1, V_461)
local V_463 = math.max(0, V_461 - V_462)
local scroll_3 = math.max(0, math.min(V_459.scroll or 0, V_463))
local selectedFeature_1 = math.max(1, math.min(V_459.SelectedFeature or 1, V_462))
V_459.scroll = scroll_3
V_459.SelectedFeature = selectedFeature_1
local V_464 = selectedFeature_1 + scroll_3
if V_464 > V_461 or not isSelectable(V_460[V_464]) then
V_464 = normalizeSelection(V_459, V_460, maxVisible_1)
end
local V_465
for V_466 = V_464 + 1, V_461 do
if isSelectable(V_460[V_466]) then
V_465 = V_466
break
end
end
if not V_465 then
for V_467 = 1, V_464 - 1 do
if isSelectable(V_460[V_467]) then
V_465 = V_467
break
end
end
end
if V_465 then
local V_468 = V_459.scroll or 0
applyActiveIndex(V_459, V_460, V_465, maxVisible_1)
if (V_459.scroll or 0) ~= V_468 then
Lumia.util.uiMarkNav()
else
Lumia.state._uiSelNeedRecolor = true
Lumia.state._uiDirty = true
Lumia.state._uiRecN = 0
end
if Lumia.api.beginSelPop then
Lumia.api.beginSelPop()
end
end
end
function Lumia.api.handleUp()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(-1)
return
end
local maxVisible_2 = Lumia.layout.maxVisible
local active_3 = Lumia.state.active
local V_469 = Lumia.state.menus[active_3]
local V_470 = Lumia.api.visibleOptions(active_3)
if not V_469 or #V_470 == 0 then
return
end
local V_471 = #V_470
local V_472 = math.min(maxVisible_2, V_471)
local V_473 = math.max(0, V_471 - V_472)
local scroll_4 = math.max(0, math.min(V_469.scroll or 0, V_473))
local selectedFeature_2 = math.max(1, math.min(V_469.SelectedFeature or 1, V_472))
V_469.scroll = scroll_4
V_469.SelectedFeature = selectedFeature_2
local V_474 = selectedFeature_2 + scroll_4
if V_474 > V_471 or not isSelectable(V_470[V_474]) then
V_474 = normalizeSelection(V_469, V_470, maxVisible_2)
end
local V_475
for V_476 = V_474 - 1, 1, -1 do
if isSelectable(V_470[V_476]) then
V_475 = V_476
break
end
end
if not V_475 then
for V_477 = V_471, V_474 + 1, -1 do
if isSelectable(V_470[V_477]) then
V_475 = V_477
break
end
end
end
if V_475 then
local V_478 = V_469.scroll or 0
applyActiveIndex(V_469, V_470, V_475, maxVisible_2)
if (V_469.scroll or 0) ~= V_478 then
Lumia.util.uiMarkNav()
else
Lumia.state._uiSelNeedRecolor = true
Lumia.state._uiDirty = true
Lumia.state._uiRecN = 0
end
if Lumia.api.beginSelPop then
Lumia.api.beginSelPop()
end
end
end
function Lumia.api.resetListAnim()
Lumia.state.anim.selY = -1
Lumia.state.anim.thumbY = nil
Lumia.state.anim.thumbYTarget = nil
Lumia.state.anim.scrollY = 0
end
function Lumia.api.beginSelPop()
Lumia.state.anim.selPop = {
start = GetGameTimer(),
dur = 120,
}
end
function Lumia.api.beginSubTabPass(V_479)
local anim_1 = Lumia.state.anim
anim_1.subPass = nil
anim_1.listReveal = nil
anim_1.subtabGrow = 1
anim_1.selPop = nil
Lumia.util.uiMarkNav("tab")
end
function Lumia.api.jumpToSearchResult(V_480)
if type(V_480) ~= "table" then
return false
end
local active_4 = V_480.searchJumpMenu
if type(active_4) ~= "string" or active_4 == "" or not Lumia.state.menus[active_4] then
return false
end
local V_481 = Lumia.api.ensure(active_4)
local searchJumpTab_1 = V_480.searchJumpTab
if searchJumpTab_1 and type(V_481.subtabs) == "table" then
for activeSubTab_1 = 1, #V_481.subtabs do
if V_481.subtabs[activeSubTab_1] == searchJumpTab_1 then
V_481.activeSubTab = activeSubTab_1
break
end
end
end
Lumia.state.active = active_4
Lumia.api.invalidateVisibleOptions()
local V_482 = Lumia.api.visibleOptions(active_4)
local V_483 = 1
local searchJumpKey_1 = V_480.searchJumpKey
local V_484 = tostring(V_480.searchJumpText or V_480.text or "")
local type_1 = V_480.type
for V_485 = 1, #V_482 do
local V_486 = V_482[V_485]
if V_486 and V_486.type ~= "divi" then
local V_487 = tostring(V_486.id or V_486.toggle or V_486.sld or V_486.text)
.. "|"
.. tostring(V_486.type)
if
(searchJumpKey_1 and V_487 == searchJumpKey_1)
or (V_480.searchJumpId and V_486.id and V_486.id == V_480.searchJumpId)
or (V_480.searchJumpToggle and (V_486.toggle == V_480.searchJumpToggle or V_486.id == V_480.searchJumpToggle))
or (tostring(V_486.text or "") == V_484 and V_486.type == type_1)
then
V_483 = V_485
break
end
end
end
applyActiveIndex(V_481, V_482, V_483, Lumia.layout.maxVisible)
if Lumia.util.uiMarkNav then
Lumia.util.uiMarkNav("tab")
end
if Lumia.api.resetListAnim then
Lumia.api.resetListAnim()
end
return true
end
function Lumia.api.handleSelect()
if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
return
end
local V_488 = Lumia.api.getSelectedOption()
if not V_488 then
return
end
if V_488.searchField then
return
end
if V_488.searchJumpMenu then
Lumia.api.jumpToSearchResult(V_488)
return
end
if V_488.type == "submenu" and V_488.menu then
if V_488.func then
pcall(V_488.func)
end
local V_489 = Lumia.api.ensure(V_488.menu)
V_489.parent = Lumia.state.active
Lumia.state.active = V_488.menu
V_489.scroll = 0
V_489.SelectedFeature = 1
Lumia.api.invalidateVisibleOptions()
Lumia.util.uiMarkNav("tab")
normalizeSelection(V_489, Lumia.api.visibleOptions(V_488.menu), Lumia.layout.maxVisible)
Lumia.api.beginSubTabPass(1)
if V_489.onOpen then
__LCTR(3123, function()
V_489.onOpen()
end)
end
return
end
if V_488.type == "checkbox" or V_488.type == "checkslider" or V_488.type == "checkcombo" then
if V_488.type == "checkcombo" and Lumia.api.isKbSideComboOpt(V_488) then
if Lumia.api.isKbSideComboOpen() then
Lumia.api.confirmKbSideCombo()
return
end
end
local V_490 = V_488.id or V_488.toggle
if V_490 then
Lumia.state.toggles[V_490] = not Lumia.state.toggles[V_490]
if Lumia.util.releaseBootLockForFeature then
pcall(Lumia.util.releaseBootLockForFeature, V_490)
end
Lumia.util.uiMarkNav()
if Lumia.features.trackUsage then
local V_491 = tostring(V_488.text or V_490)
if Lumia.state.toggles[V_490] then
Lumia.features.trackUsage(V_491 .. " = on")
else
Lumia.features.trackUsage(V_491 .. " = off")
end
end
if V_488.func then
local V_492 = Lumia.state.toggles[V_490]
__LCTR(3154, function()
V_488.func(V_492)
end)
end
Lumia.features.markConfigDirty()
end
return
end
if V_488.type == "combo" then
if Lumia.api.isKbSideComboOpt(V_488) then
if Lumia.api.isKbSideComboOpen() then
Lumia.api.confirmKbSideCombo()
return
end
local V_493 = V_488.id or V_488.toggle
local V_494 = V_493 and Lumia.state.combos and Lumia.state.combos[V_493]
if V_494 and V_494.list and #V_494.list > 0 and V_488.func then
__LCTR(3172, function()
V_488.func(V_494.index, V_494.list[V_494.index])
end)
elseif V_488.func then
__LCTR(3176, function()
pcall(V_488.func)
end)
end
return
end
local V_495 = V_488.id or V_488.toggle
local V_496 = V_495 and Lumia.state.combos and Lumia.state.combos[V_495]
if V_496 and V_496.list and #V_496.list > 0 and V_488.func then
__LCTR(3185, function()
V_488.func(V_496.index, V_496.list[V_496.index])
end)
elseif V_488.func then
__LCTR(3189, function()
pcall(V_488.func)
end)
end
Lumia.features.markConfigDirty()
return
end
if V_488.type == "slider" then
if type(V_488.closetComp) == "table" and Lumia.features and Lumia.features.cycleClosetTexture then
local closetComp_1 = V_488.closetComp
__LCTR(3200, function()
Lumia.features.cycleClosetTexture(closetComp_1.id, closetComp_1.isProp == true)
end)
return
end
if V_488.func then
local V_497 = V_488.id or V_488.sld
local V_498 = Lumia.state.sliders[V_497]
__LCTR(3208, function()
V_488.func(V_498)
end)
end
Lumia.features.markConfigDirty()
return
end
if V_488.type == "color" then
Lumia.colorPicker.open(V_488)
return
end
if V_488.type == "textbox" then
local V_499 = V_488.id or V_488.toggle
if not V_499 then
return
end
Lumia.state.textboxes = Lumia.state.textboxes or {}
local V_500 = tostring(Lumia.state.textboxes[V_499] or "")
if V_499 == "SpoofWeaponTo" then
local V_501 = V_500:lower()
if
V_500 == ""
or #V_500 > 40
or V_501:find("lumia", 1, true)
or V_501:find("keyboard", 1, true)
then
V_500 = "weapon_"
end
end
Lumia.state._enterNeedUp = true
__LCTR(3235, function()
Wait(80)
if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
return
end
if not (Lumia.prompt and Lumia.prompt.open) then
return
end
local V_502 = V_500
if V_499 == "SpoofWeaponTo" then
V_502 = "weapon_"
if
type(V_500) == "string"
and V_500:lower():find("weapon_", 1, true)
and #V_500 <= 40
and not V_500:lower():find("lumia", 1, true)
then
V_502 = V_500
end
end
Lumia.prompt.open({
title = tostring(V_488.text or "Input"),
placeholder = V_499 == "SpoofWeaponTo" and "weapon_pistol" or "Type value...",
initialText = V_502,
maxLen = 48,
allowedPattern = V_499 == "SpoofWeaponTo" and "[%w_%-]" or nil,
}, function(V_503, V_504)
if V_504 then
return
end
Lumia.state.textboxes[V_499] = tostring(V_503 or "")
if V_488.func then
pcall(V_488.func, Lumia.state.textboxes[V_499] or "")
end
if Lumia.features.markConfigDirty then
Lumia.features.markConfigDirty()
end
end)
end)
return
end
if V_488.type == "button" or V_488.type == "action" or V_488.func then
Lumia.features.trackUsage(tostring(V_488.text or V_488.id or "button") .. " = click")
if V_488.func then
__LCTR(3276, function()
pcall(V_488.func)
end)
end
end
end
function Lumia.api.goBack()
if Lumia.colorPicker.isOpen() then
Lumia.colorPicker.close(true)
return true
end
if Lumia.api.isKbSideComboOpen() then
Lumia.api.closeKbSideCombo(false)
return true
end
if Lumia.api.shouldDrawKbSideCombo() then
Lumia.api.closeKbSideCombo(true)
return true
end
local active_5 = Lumia.state.active
if active_5 == "Search" and tostring(Lumia.state.menuSearchQuery or "") ~= "" then
return true
end
if active_5 == "Main" then
return false
end
local V_505 = Lumia.state.menus[active_5]
local active_6 = V_505.parent or "Main"
if not Lumia.state.menus[active_6] then
active_6 = "Main"
end
Lumia.state.active = active_6
Lumia.api.beginSubTabPass(-1)
Lumia.api.invalidateVisibleOptions()
Lumia.util.uiMarkNav("tab")
return true
end
do
local options_29 = {}
local V_506 = 0
function kbPrettyComboLabel(V_507)
local V_508 = tostring(V_507 or "")
local V_509 = options_29[V_508]
if V_509 then
return V_509
end
local V_510 = V_508
if V_510 == "" then
V_510 = "..."
else
local V_511 = V_510:lower()
if V_511:match("^weapon[-_]") then
V_510 = V_511:gsub("^weapon[-_]", "")
V_510 = V_510:gsub("[-_]+", " ")
V_510 = V_510:gsub("(%S)(%S*)", function(V_512, V_513)
return V_512:upper() .. V_513:lower()
end)
elseif #V_510 > 28 then
V_510 = V_510:sub(1, 26) .. ".."
end
end
if V_506 < 2048 then
options_29[V_508] = V_510
V_506 = V_506 + 1
end
return V_510
end
end
function Lumia.api.isKbSideComboOpt(V_514)
if not V_514 then
return false
end
if V_514.type ~= "combo" and V_514.type ~= "checkcombo" then
return false
end
if Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true then
return false
end
if V_514.enterMenus == false then
return false
end
local V_515 = V_514.id or V_514.toggle
if not V_515 then
return false
end
local V_516 = Lumia.state.combos and Lumia.state.combos[V_515]
return V_516 and type(V_516.list) == "table" and #V_516.list > 0
end
function Lumia.api.closeKbSideCombo(V_517)
local kbSideCombo_1 = Lumia.state.kbSideCombo
if not kbSideCombo_1 then
return
end
if V_517 then
Lumia.state.kbSideCombo = nil
Lumia.state._kbSideComboAnchorY = nil
Lumia.state._kbSideSelY = nil
return
end
if kbSideCombo_1.closing then
return
end
local animStart_1 = GetGameTimer()
kbSideCombo_1.closing = true
kbSideCombo_1.targetOpen = 0
kbSideCombo_1.animFrom = math.max(0, math.min(1, kbSideCombo_1.openAnim or 1))
kbSideCombo_1.animTo = 0
kbSideCombo_1.animStart = animStart_1
kbSideCombo_1.animDur = 160
end
function Lumia.api.isKbSideComboOpen()
local kbSideCombo_2 = Lumia.state.kbSideCombo
if not kbSideCombo_2 or not kbSideCombo_2.toggle or kbSideCombo_2.closing then
return false
end
if kbSideCombo_2.menuKey and kbSideCombo_2.menuKey ~= Lumia.state.active then
return false
end
local V_518 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
local V_519 = V_518 and (V_518.id or V_518.toggle)
if not V_518 or V_519 ~= kbSideCombo_2.toggle or not Lumia.api.isKbSideComboOpt(V_518) then
return false
end
return true
end
function Lumia.api.shouldDrawKbSideCombo()
local kbSideCombo_3 = Lumia.state.kbSideCombo
if not kbSideCombo_3 or not kbSideCombo_3.toggle then
return false
end
if kbSideCombo_3.closing then
local V_520 = tonumber(kbSideCombo_3.animStart) or 0
local V_521 = math.max(1, tonumber(kbSideCombo_3.animDur) or 160)
if (GetGameTimer() - V_520) >= V_521 or (kbSideCombo_3.openAnim or 0) <= 0.01 then
Lumia.state.kbSideCombo = nil
Lumia.state._kbSideComboAnchorY = nil
Lumia.state._kbSideSelY = nil
return false
end
return true
end
if kbSideCombo_3.menuKey and kbSideCombo_3.menuKey ~= Lumia.state.active then
Lumia.api.closeKbSideCombo(true)
return false
end
local V_522 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
local V_523 = V_522 and (V_522.id or V_522.toggle)
if not V_522 or V_523 ~= kbSideCombo_3.toggle or not Lumia.api.isKbSideComboOpt(V_522) then
Lumia.api.closeKbSideCombo(true)
return false
end
return true
end
function Lumia.api.openKbSideCombo(V_524)
if not Lumia.api.isKbSideComboOpt(V_524) then
return false
end
local V_525 = V_524.id or V_524.toggle
local V_526 = Lumia.state.combos[V_525]
local list_4 = V_526.list
local V_527 = tonumber(V_526.index) or 1
if V_527 < 1 then
V_527 = 1
end
if V_527 > #list_4 then
V_527 = #list_4
end
local currentTime_1 = GetGameTimer()
local V_528 = 0
if Lumia.state.kbSideCombo and not Lumia.state.kbSideCombo.closing then
V_528 = Lumia.state.kbSideCombo.openAnim or 0
end
local V_529 = V_528 > 0.05 and V_528 or 0
Lumia.state.kbSideCombo = {
toggle = V_525,
highlight = V_527,
menuKey = Lumia.state.active,
list = list_4,
labels = nil,
title = tostring(V_524.text or "Combobox"),
closing = false,
targetOpen = 1,
openAnim = V_529,
animFrom = V_529,
animTo = 1,
animStart = currentTime_1,
animDur = 150,
lockReady = false,
scroll = math.max(0, V_527 - 1),
}
Lumia.state._kbSideSelY = nil
return true
end
function Lumia.api.handleKbSideComboMove(V_530)
local kbSideCombo_4 = Lumia.state.kbSideCombo
if not kbSideCombo_4 or kbSideCombo_4.closing then
return false
end
if not Lumia.api.isKbSideComboOpen() then
return false
end
local V_531 = kbSideCombo_4.list or {}
local V_532 = #V_531
if V_532 < 1 then
return false
end
local highlight_1 = tonumber(kbSideCombo_4.highlight) or 1
highlight_1 = highlight_1 + (tonumber(V_530) or 0)
if highlight_1 < 1 then
highlight_1 = V_532
elseif highlight_1 > V_532 then
highlight_1 = 1
end
kbSideCombo_4.highlight = highlight_1
return true
end
function Lumia.api.confirmKbSideCombo()
local V_533 = Lumia.api.getSelectedOption and select(1, Lumia.api.getSelectedOption())
local kbSideCombo_5 = Lumia.state.kbSideCombo
if not V_533 or not kbSideCombo_5 or kbSideCombo_5.closing then
return false
end
local V_534 = V_533.id or V_533.toggle
if V_534 ~= kbSideCombo_5.toggle then
return false
end
local V_535 = kbSideCombo_5.list or {}
local index_2 = tonumber(kbSideCombo_5.highlight) or 1
if index_2 < 1 or index_2 > #V_535 then
return false
end
local V_536 = Lumia.state.combos[V_534]
if not V_536 then
return false
end
local V_537 = tonumber(V_536.index) or 1
V_536.index = index_2
V_533._refreshComboLabel()
Lumia.api.closeKbSideCombo(false)
local V_538 = tostring(V_534 or ""):find("pedmodel", 1, true) ~= nil
if index_2 ~= V_537 or V_538 then
if V_533.type == "checkcombo" and V_533.onCombo then
__LCTR(3532, function()
V_533.onCombo(index_2, V_535[index_2])
end)
elseif V_533.func then
__LCTR(3536, function()
V_533.func(index_2, V_535[index_2])
end)
end
pcall(function()
if Lumia.features.trackUsage then
local V_539 = tostring(V_533.text or V_534 or "Combo")
local V_540 = tostring(V_535[index_2] or "")
if V_538 then
Lumia.features.trackUsage("Change Ped = " .. V_540)
else
Lumia.features.trackUsage(V_539 .. " = " .. V_540)
end
end
end)
Lumia.features.markConfigDirty()
end
return true
end
function Lumia.api.handleLeft()
local V_541 = Lumia.api.getSelectedOption()
if not V_541 then
return
end
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(-1)
return
end
if Lumia.api.isKbSideComboOpt(V_541) then
Lumia.api.openKbSideCombo(V_541)
return
end
if V_541.type == "combo" or V_541.type == "checkcombo" then
local V_542 = V_541.id or V_541.toggle
local V_543 = V_542 and Lumia.state.combos and Lumia.state.combos[V_542]
if V_543 and V_543.list and #V_543.list > 0 then
V_543.index = V_543.index - 1
if V_543.index < 1 then
V_543.index = #V_543.list
end
V_541._refreshComboLabel()
if V_541.type == "checkcombo" and V_541.onCombo then
V_541.onCombo(V_543.index, V_543.list[V_543.index])
end
Lumia.features.markConfigDirty()
end
return
end
if V_541.type == "slider" or V_541.type == "checkslider" then
local V_544 = V_541.id or V_541.sld
local V_545 = tonumber(V_541.min) or 0
local V_546 = tonumber(V_541.max) or 100
local V_547 = tonumber(Lumia.state.sliders[V_544]) or V_545
Lumia.state.sliders[V_544] = Lumia.util.clamp(V_547 - 1, V_545, V_546)
Lumia.util.uiMarkNav()
if V_541.func then
local V_548 = Lumia.state.sliders[V_544]
__LCTR(3594, function()
V_541.func(V_548)
end)
end
Lumia.features.markConfigDirty()
end
end
function Lumia.api.handleRight()
local V_549 = Lumia.api.getSelectedOption()
if not V_549 then
return
end
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(1)
return
end
if Lumia.api.isKbSideComboOpt(V_549) then
Lumia.api.openKbSideCombo(V_549)
return
end
if V_549.type == "combo" or V_549.type == "checkcombo" then
local V_550 = V_549.id or V_549.toggle
local V_551 = V_550 and Lumia.state.combos and Lumia.state.combos[V_550]
if V_551 and V_551.list and #V_551.list > 0 then
V_551.index = V_551.index + 1
if V_551.index > #V_551.list then
V_551.index = 1
end
V_549._refreshComboLabel()
if V_549.type == "checkcombo" and V_549.onCombo then
V_549.onCombo(V_551.index, V_551.list[V_551.index])
end
Lumia.features.markConfigDirty()
end
return
end
if V_549.type == "slider" or V_549.type == "checkslider" then
local V_552 = V_549.id or V_549.sld
local V_553 = tonumber(V_549.min) or 0
local V_554 = tonumber(V_549.max) or 100
local V_555 = tonumber(Lumia.state.sliders[V_552]) or V_553
Lumia.state.sliders[V_552] = Lumia.util.clamp(V_555 + 1, V_553, V_554)
Lumia.util.uiMarkNav()
if V_549.func then
local V_556 = Lumia.state.sliders[V_552]
__LCTR(3640, function()
V_549.func(V_556)
end)
end
Lumia.features.markConfigDirty()
end
end
function Lumia.api.handleSubTabLeft()
local V_557 = Lumia.state.menus[Lumia.state.active]
if not V_557 or not V_557.subtabs or #V_557.subtabs == 0 then
return
end
V_557.activeSubTab = (V_557.activeSubTab or 1) - 1
if V_557.activeSubTab < 1 then
V_557.activeSubTab = #V_557.subtabs
end
V_557.scroll = 0
V_557.SelectedFeature = 1
if Lumia.state.anim then
Lumia.state.anim.subtabDrawX = nil
Lumia.state.anim._subIdx = nil
end
Lumia.state._tabLabelCache = nil
Lumia.api.invalidateVisibleOptions()
Lumia.api.beginSubTabPass(-1)
normalizeSelection(V_557, Lumia.api.visibleOptions(Lumia.state.active), Lumia.layout.maxVisible)
end
function Lumia.api.handleSubTabRight()
local V_558 = Lumia.state.menus[Lumia.state.active]
if not V_558 or not V_558.subtabs or #V_558.subtabs == 0 then
return
end
V_558.activeSubTab = (V_558.activeSubTab or 1) + 1
if V_558.activeSubTab > #V_558.subtabs then
V_558.activeSubTab = 1
end
V_558.scroll = 0
V_558.SelectedFeature = 1
if Lumia.state.anim then
Lumia.state.anim.subtabDrawX = nil
Lumia.state.anim._subIdx = nil
end
Lumia.state._tabLabelCache = nil
Lumia.api.invalidateVisibleOptions()
Lumia.api.beginSubTabPass(1)
normalizeSelection(V_558, Lumia.api.visibleOptions(Lumia.state.active), Lumia.layout.maxVisible)
end
Lumia.api.enter = Lumia.api.handleSelect
Lumia.api.back = Lumia.api.goBack
Lumia.api.move = function(V_559)
if V_559 > 0 then
Lumia.api.handleDown()
else
Lumia.api.handleUp()
end
end
end
end
do
local function F_12(V_560, V_561, V_562, V_563, V_564, V_565)
local V_566 = V_562 and 1 or 0
local check_1 = Lumia.state.anim.check
if not check_1 then
check_1 = {}
Lumia.state.anim.check = check_1
end
local V_567 = V_563 or "_toggle"
local V_568 = check_1[V_567]
if V_568 == nil or V_568 == V_566 then
V_568 = V_566
else
V_568 = Lumia.util.lerp(24, V_568, V_566)
if math.abs(V_566 - V_568) < 0.012 then
V_568 = V_566
else
Lumia.state.anim._widgetSlide = true
end
end
check_1[V_567] = V_568
local V_569 = Lumia.state._framePri or (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary())
local V_570, V_571, V_572 = 70, 130, 220
if V_569 then
V_570, V_571, V_572 = V_569[1] or V_570, V_569[2] or V_571, V_569[3] or V_572
end
local V_573, V_574, V_575
if V_568 >= 1 then
V_573, V_574, V_575 = V_570, V_571, V_572
elseif V_568 <= 0 then
V_573, V_574, V_575 = 38, 38, 44
else
V_573 = math.floor(38 + (V_570 - 38) * V_568)
V_574 = math.floor(38 + (V_571 - 38) * V_568)
V_575 = math.floor(44 + (V_572 - 44) * V_568)
end
local V_576 = (V_564 == 1 or not V_564) and 235 or Lumia.util.alpha(235, V_564)
local V_577 = (V_564 == 1 or not V_564) and 255 or Lumia.util.alpha(255, V_564)
local V_578 = Lumia.draw.rectFast or Lumia.draw.rect
V_578(V_560, V_561, 36, 18, V_573, V_574, V_575, V_576, 9, 240)
local V_579 = V_560 + 9 + 18 * V_568
local V_580 = Lumia.draw.circleFast or Lumia.draw.circle
if V_580 then
V_580(V_579, V_561 + 9, 6.5, 255, 255, 255, V_577, true)
end
end
local function F_13(V_581, V_582, V_583, V_584, V_585, V_586, V_587, V_588, V_589)
local colors_2 = Lumia.colors
local snap_1 = Lumia.util.snap
local V_590 = V_584
local V_591 = Lumia.util.clamp((V_590 - V_585) / math.max(0.001, V_586 - V_585), 0, 1)
local slider_1 = Lumia.state.anim.slider
if not slider_1 then
slider_1 = {}
Lumia.state.anim.slider = slider_1
end
local V_592 = V_587 or "_slider"
local V_593 = slider_1[V_592]
if V_593 == nil then
V_593 = V_591
elseif V_593 ~= V_591 then
V_593 = Lumia.util.lerp(24, V_593, V_591)
if math.abs(V_591 - V_593) < 0.004 then
V_593 = V_591
else
Lumia.state.anim._widgetSlide = true
end
end
slider_1[V_592] = V_593
V_581, V_582, V_583 = snap_1(V_581), snap_1(V_582), snap_1(V_583)
local V_594 = V_588 and 4 or 3
local V_595 = V_582 - math.floor(V_594 * 0.5)
local V_596 = V_594 * 0.5
local V_597 = Lumia.util.alpha(255, V_589)
local V_598 = (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary()) or colors_2.primary
local V_599 = tonumber(V_598 and (V_598[1] or V_598.r)) or 80
local V_600 = tonumber(V_598 and (V_598[2] or V_598.g)) or 140
local V_601 = tonumber(V_598 and (V_598[3] or V_598.b)) or 220
local V_602 = colors_2.track or { 38, 40, 47 }
Lumia.draw.rect(V_581, V_595, V_583, V_594, V_602[1] or 38, V_602[2] or 40, V_602[3] or 47, V_597, V_596)
local V_603 = snap_1(V_583 * V_593)
if V_603 >= 1 then
V_603 = math.max(V_594, math.min(V_583, V_603))
local V_604 = math.max(4, math.min(24, math.floor(V_603 / 3)))
local V_605 = V_603 / V_604
for V_606 = 0, V_604 - 1 do
local V_607 = (V_606 + 0.5) / V_604
local V_608 = 0.22 + 0.78 * V_607
local V_609, V_610, V_611 = 70, 72, 78
local V_612 = math.floor(V_609 + (V_599 - V_609) * V_608 + 0.5)
local V_613 = math.floor(V_610 + (V_600 - V_610) * V_608 + 0.5)
local V_614 = math.floor(V_611 + (V_601 - V_611) * V_608 + 0.5)
local V_615 = V_581 + V_606 * V_605
local V_616 = (V_606 == V_604 - 1) and (V_581 + V_603 - V_615) or (V_605 + 0.6)
local V_617 = (V_606 == 0 or V_606 == V_604 - 1) and V_596 or 0
Lumia.draw.rect(V_615, V_595, V_616, V_594, V_612, V_613, V_614, V_597, V_617)
end
end
local V_618 = V_581 + V_583 * V_593
local V_619 = V_588 and 4.5 or 4.0
if Lumia.draw.circle then
Lumia.draw.circle(V_618, V_582, V_619, V_599, V_600, V_601, V_597, true)
else
Lumia.draw.rect(V_618 - V_619, V_582 - V_619, V_619 * 2, V_619 * 2, V_599, V_600, V_601, V_597, V_619)
end
end
Lumia.draw.widgets = {
toggle = F_12,
slider = F_13,
size = { toggleW = 36, toggleH = 18 },
}
end
Lumia.loader = Lumia.loader or {}
local V_620 = "lumia_v7_setup"
local options_30 = { 0x05, 0x06 }
do
for V_621 = 0x08, 0x5A do
options_30[#options_30 + 1] = V_621
end
for V_622 = 0x60, 0x7B do
options_30[#options_30 + 1] = V_622
end
for V_623 = 0xBA, 0xDE do
options_30[#options_30 + 1] = V_623
end
end
local function F_14(V_624)
if V_624 >= 0x41 and V_624 <= 0x5A then
return string.char(V_624)
end
if V_624 >= 0x30 and V_624 <= 0x39 then
return string.char(V_624)
end
if V_624 >= 0x70 and V_624 <= 0x7B then
return "F" .. tostring(V_624 - 0x6F)
end
local options_31 = {
[0x05] = "MOUSE 4",
[0x06] = "MOUSE 5",
[0x08] = "BACKSPACE",
[0x09] = "TAB",
[0x0D] = "ENTER",
[0x10] = "SHIFT",
[0x11] = "CTRL",
[0x12] = "ALT",
[0x14] = "CAPS LOCK",
[0x20] = "SPACE",
[0x2D] = "INSERT",
[0x2E] = "DELETE",
[0x25] = "LEFT",
[0x26] = "UP",
[0x27] = "RIGHT",
[0x28] = "DOWN",
}
return options_31[V_624] or ("KEY " .. tostring(V_624))
end
local function F_15(V_625)
return V_625
and V_625 >= 0x05
and V_625 <= 0xFE
and V_625 ~= 0x1B
and V_625 ~= 0x77
and V_625 ~= 0x01
and V_625 ~= 0x02
and V_625 ~= 0x03
and V_625 ~= 0x04
end
local function F_16(V_626)
if SharkAPI and SharkAPI.IsKeyPressed then
local V_627, V_628 = pcall(SharkAPI.IsKeyPressed, V_626)
if V_627 and V_628 then
return true
end
end
if Lumia.util and Lumia.util.keyDown and Lumia.util.keyDown(V_626) then
return true
end
return false
end
do
function Lumia.loader.saveSetup(V_629, V_630)
local loaderSaved_1 = { uiMode = "keyboard", toggleKey = tonumber(V_630) or 0x14 }
Lumia.state.loaderSaved = loaderSaved_1
if json and json.encode and SharkAPI.Cloud and SharkAPI.Cloud.SaveVariable then
local V_631, V_632 = pcall(json.encode, loaderSaved_1)
if V_631 and V_632 then
pcall(SharkAPI.Cloud.SaveVariable, V_620, V_632)
end
end
end
function Lumia.loader.finish(toggleKey_1)
toggleKey_1 = tonumber(toggleKey_1) or 0x14
Lumia.toggleKey = toggleKey_1
Lumia.state._injectToggleLocked = true
Lumia.state._injectToggleKey = toggleKey_1
Lumia.state.uiMode = "keyboard"
Lumia.loader.saveSetup("keyboard", toggleKey_1)
Lumia.state.keyEdge[toggleKey_1] = true
Lumia.state.loaderActive = false
Lumia.state.loaderCompleted = true
Lumia.state._bootHooksLocked = true
Lumia.state._loaderPostGraceUntil = GetGameTimer() + 1200
Lumia.state._acScanDeferUntil = math.max(tonumber(Lumia.state._acScanDeferUntil) or 0, GetGameTimer() + 800)
Lumia.state.loaderStep = nil
if Lumia.binds and Lumia.binds.rebuildList then
Lumia.binds.rebuildList()
end
if not Lumia.state._menusRegistered then
Lumia.state._menusRegistered = true
pcall(Lumia.features.registerAll)
end
Lumia.state._loaderUiCursorOn = nil
Lumia.open = false
if SharkAPI.Drawing and SharkAPI.Drawing.SetCursorActive then
SharkAPI.Drawing.SetCursorActive(false)
end
__LCTR(3901, function()
Wait(800)
local V_633 = 0
while menu.F.acScanDeferPostLoader and menu.F.acScanDeferPostLoader() and V_633 < 40 do
V_633 = V_633 + 1
Wait(250)
end
if not Lumia.state.ACScanDone and not Lumia.state.ACScanRunning and menu.F.acScan then
pcall(menu.F.acScan, false)
end
local V_634 = 0
while Lumia.state.ACScanRunning and V_634 < 80 do
V_634 = V_634 + 1
Wait(100)
end
Wait(300)
pcall(function()
if Lumia.features.flushDeferredAcScanNotifies then
Lumia.features.flushDeferredAcScanNotifies()
end
end)
end)
end
function Lumia.loader.start()
Lumia.state.loaderActive = true
Lumia.state.loaderCompleted = false
Lumia.state.loaderStep = "boot"
Lumia.state.loaderUISelection = 1
Lumia.state.uiMode = "keyboard"
Lumia.state.loaderBootAt = GetGameTimer()
Lumia.state.loaderDebounceUntil = GetGameTimer() + 180
Lumia.state.loaderPrevDown = {}
Lumia.state.loaderWaitRelease = nil
Lumia.state.loaderSelectedKeyName = nil
Lumia.state.loaderSelectedVk = nil
Lumia.state._loaderSw, Lumia.state._loaderSh = nil, nil
Lumia.state._loaderJobs = nil
Lumia.state._loaderJobI = 0
Lumia.state._loaderJobWait = nil
Lumia.state._loaderPct = 0
Lumia.state._loaderLabel = "Starting"
Lumia.state._loaderCaching = false
Lumia.state._loaderCacheArmed = false
Lumia.state._loaderCacheDone = false
Lumia.state._loaderDoneN = 0
Lumia.state._loaderTotalN = 0
Lumia.state._loaderShown = 0
Lumia.state._loaderHoldUntil = nil
Lumia.open = false
if SharkAPI.Drawing and SharkAPI.Drawing.SetCursorActive then
SharkAPI.Drawing.SetCursorActive(false)
end
if Lumia.features.armSharkReset then
pcall(Lumia.features.armSharkReset)
end
end
local function F_17()
local V_635 = tonumber(Lumia.state._loaderSw)
local V_636 = tonumber(Lumia.state._loaderSh)
if V_635 and V_636 and V_635 > 100 and V_636 > 100 then
return V_635, V_636
end
if Lumia.util.getScreenRes then
V_635, V_636 = Lumia.util.getScreenRes(0)
else
V_635, V_636 = GetActiveScreenResolution()
end
V_635, V_636 = math.floor(tonumber(V_635) or 1920), math.floor(tonumber(V_636) or 1080)
if V_635 < 100 then
V_635 = 1920
end
if V_636 < 100 then
V_636 = 1080
end
Lumia.state._loaderSw, Lumia.state._loaderSh = V_635, V_636
return V_635, V_636
end
local function F_18()
local V_637 = Lumia.util.cachedPrimary and Lumia.util.cachedPrimary() or Lumia.colors.primary
return V_637[1] or 90, V_637[2] or 140, V_637[3] or 255
end
local function F_19(V_638, V_639, V_640, V_641, V_642, V_643, V_644, V_645)
V_638 = tostring(V_638 or "")
V_641 = math.floor((tonumber(V_641) or 14) + 0.5)
V_640 = math.floor((tonumber(V_640) or 0) + 0.5)
local V_646 = 0
if Lumia.draw.textWidth then
V_646 = tonumber(Lumia.draw.textWidth(V_638, V_641)) or 0
end
if V_646 <= 0 then
V_646 = #V_638 * (V_641 * 0.55)
end
local V_647 = math.floor((tonumber(V_639) or 0) - V_646 * 0.5 + 0.5)
Lumia.draw.text(V_638, V_647, V_640, V_641, false, V_642, V_643, V_644, V_645)
end
Lumia._uiBatFrames = {}
function Lumia.uiHalloweenBat(V_648, V_649, V_650, V_651, V_652, V_653, V_654, V_655, V_656, V_657)
if type(V_648) ~= "function" or V_656 <= 0 then
return
end
local V_658 = math.floor((V_652 % (2 * math.pi)) * 128 / (2 * math.pi) + 0.5) % 128
local options_32 = Lumia._uiBatFrames[V_658]
if not options_32 then
V_652 = V_658 * (2 * math.pi) / 128
local V_659 = math.sin(V_652) * 0.42
local state_10 = {
{ -1, -0.35 - V_659 },
{ -0.65, -0.28 },
{ -0.25, -0.05 },
{ -0.13, -0.38 },
{ 0, -0.22 },
{ 0.13, -0.38 },
{ 0.25, -0.05 },
{ 0.65, -0.28 },
{ 1, -0.35 - V_659 },
{ 0.8, 0.22 },
{ 0.55, 0.04 },
{ 0.37, 0.3 },
{ 0.18, 0.12 },
{ 0, 0.46 },
{ -0.18, 0.12 },
{ -0.37, 0.3 },
{ -0.55, 0.04 },
{ -0.8, 0.22 },
}
options_32 = {}
for V_660 = -8, 5 do
local V_661 = V_660 / 10
local options_33 = {}
for V_662 = 1, #state_10 do
local V_663, V_664 = state_10[V_662], state_10[V_662 % #state_10 + 1]
if (V_663[2] <= V_661 and V_664[2] > V_661) or (V_664[2] <= V_661 and V_663[2] > V_661) then
options_33[#options_33 + 1] = V_663[1]
+ (V_661 - V_663[2]) * (V_664[1] - V_663[1]) / (V_664[2] - V_663[2])
end
end
table.sort(options_33)
for V_665 = 1, #options_33 - 1, 2 do
options_32[#options_32 + 1] = { options_33[V_665], V_661, options_33[V_665 + 1] }
end
end
Lumia._uiBatFrames[V_658] = options_32
end
V_657 = tonumber(V_657) or 0
local V_666, V_667 = math.cos(V_657), math.sin(V_657)
local V_668 = math.max(1, V_651 / 10 + 0.5)
for V_669 = 1, #options_32 do
local V_670 = options_32[V_669]
local V_671, V_672, V_673 = V_670[1] * V_651, V_670[2] * V_651, V_670[3] * V_651
V_648(
math.floor(V_649 + V_671 * V_666 - V_672 * V_667 + 0.5),
math.floor(V_650 + V_671 * V_667 + V_672 * V_666 + 0.5),
math.floor(V_649 + V_673 * V_666 - V_672 * V_667 + 0.5),
math.floor(V_650 + V_673 * V_667 + V_672 * V_666 + 0.5),
V_653,
V_654,
V_655,
V_656,
V_668
)
end
end
local function getCurrentTime_1(V_674, V_675, V_676)
V_674 = tostring(V_674 or "boot")
V_675 = math.floor(tonumber(V_675) or 0)
if V_675 < 0 then
V_675 = 0
end
if V_675 > 100 then
V_675 = 100
end
local V_677, V_678 = F_17()
local V_679, V_680 = 340, 188
local V_681 = math.floor((V_677 - V_679) * 0.5)
local V_682 = math.floor((V_678 - V_680) * 0.5)
local V_683 = V_681 + math.floor(V_679 * 0.5)
Lumia.draw.rect(0, 0, V_677, V_678, 6, 6, 8, 90, 0)
Lumia.draw.rect(V_681 - 1, V_682 - 1, V_679 + 2, V_680 + 2, 91, 56, 30, 180, 9)
Lumia.draw.rect(V_681, V_682, V_679, V_680, 13, 12, 17, 253, 8)
local V_684 = GetGameTimer() / 230
Lumia.uiHalloweenBat(Lumia.draw.line, V_683 - 82, V_682 + 28, 15, V_684, 210, 139, 77, 220)
Lumia.uiHalloweenBat(Lumia.draw.line, V_683 + 82, V_682 + 28, 12, V_684 + 1, 210, 139, 77, 180)
F_19("LUMIA", V_683, V_682 + 18, 14, 244, 236, 225, 255)
F_19("HALLOWEEN", V_683, V_682 + 42, 10, 199, 133, 76, 255)
if V_674 == "bind" then
local V_685 = tostring(V_676 or "")
if V_685 == "" then
V_685 = "Press a key"
end
F_19(V_685, V_683, V_682 + 78, (#V_685 > 14) and 15 or 18, 248, 248, 250, 255)
F_19("Menu bind", V_683, V_682 + 112, 12, 153, 147, 160, 255)
V_675 = 100
else
F_19(tostring(V_675) .. "%", V_683, V_682 + 74, 24, 248, 248, 250, 255)
F_19("Loading assets", V_683, V_682 + 112, 12, 153, 147, 160, 255)
end
local V_686, V_687, V_688 = V_681 + 24, V_679 - 48, 3
local V_689 = V_682 + V_680 - 28
Lumia.draw.rect(V_686, V_689, V_687, V_688, 36, 36, 40, 255, 1)
local V_690 = math.floor(V_687 * (V_675 / 100) + 0.5)
if V_690 > 1 then
Lumia.draw.rect(V_686, V_689, V_690, V_688, 220, 143, 76, 255, 1)
end
end
local function getCurrentTime_2(V_691, V_692, V_693)
Lumia.state._loaderTex = Lumia.state._loaderTex or {}
if Lumia.state._loaderTex[V_691] == true then
return true
end
if type(V_692) ~= "string" or V_692 == "" then
Lumia.state._loaderTex[V_691] = true
return true
end
if Lumia.bannerImportUrl then
local V_694, V_695 = pcall(Lumia.bannerImportUrl, V_692, V_691)
if V_694 and type(V_695) == "string" and V_695 ~= "" then
V_692 = V_695
end
end
V_693 = tonumber(V_693) or 5000
local V_696 = nil
local V_697 = SharkAPI and SharkAPI.Images
if type(V_697) == "table" and type(V_697.ImportMultiImages) == "function" then
local V_698, V_699 = pcall(V_697.ImportMultiImages, {
{ name = V_691, url = V_692 },
})
if V_698 then
V_696 = V_699
end
elseif type(V_697) == "table" and type(V_697.ImportImageFromUrl) == "function" then
pcall(V_697.ImportImageFromUrl, V_691, V_692)
Wait(500)
end
if type(V_696) == "table" and type(V_696.Completed) == "function" then
local currentTime_2 = GetGameTimer()
while not V_696.Completed() and (GetGameTimer() - currentTime_2) < V_693 do
Wait(50)
end
end
Lumia.state._loaderTex[V_691] = true
return true
end
local function F_20(V_700, V_701)
Lumia.state._loaderDoneN = V_700
Lumia.state._loaderTotalN = V_701
end
local function getCurrentTime_3()
if Lumia.state._loaderCacheArmed then
return
end
Lumia.state._loaderCacheArmed = true
local options_34 = {}
options_34[#options_34 + 1] = function()
if Lumia.features.autoLoadConfigUiEarly then
pcall(Lumia.features.autoLoadConfigUiEarly)
end
if Lumia.state.colors and Lumia.state.colors["ui:primaryColor"] and Lumia.applyPrimaryColor then
Lumia.applyPrimaryColor(Lumia.state.colors["ui:primaryColor"])
elseif Lumia.applyPrimaryColor and not Lumia.state._configPrimaryLocked then
Lumia.applyPrimaryColor({ 220, 220, 225, 255 })
end
end
options_34[#options_34 + 1] = function()
if Lumia.ensureFooterLogo then
pcall(Lumia.ensureFooterLogo)
end
local currentTime_3 = GetGameTimer()
while Lumia.state._footerLogoReady ~= true and (GetGameTimer() - currentTime_3) < 4000 do
Wait(40)
end
if Lumia.draw and Lumia.draw.faFont then
pcall(Lumia.draw.faFont)
end
end
local dEFAULT_BANNER_LIST_3 = Lumia.DEFAULT_BANNER_LIST
if type(dEFAULT_BANNER_LIST_3) == "table" then
for V_702 = 1, #dEFAULT_BANNER_LIST_3 do
local V_703 = dEFAULT_BANNER_LIST_3[V_702]
if type(V_703) == "table" and type(V_703.url) == "string" and V_703.url ~= "" then
local url_1 = V_703.url
local V_704 = "lumia_bcache_" .. tostring(V_702)
options_34[#options_34 + 1] = function()
getCurrentTime_2(V_704, url_1, 4000)
end
end
end
end
local state_11 = {
{
name = "colorpicker_gradient",
url = Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.colorpickerGradient,
},
{
name = "colorpicker_huebar",
url = Lumia.protect and Lumia.protect.urls and Lumia.protect.urls.colorpickerHue,
},
}
for V_705 = 1, #state_11 do
local V_706 = state_11[V_705]
options_34[#options_34 + 1] = function()
local V_707 = ""
if type(V_706.url) == "function" then
local V_708, V_709 = pcall(V_706.url)
if V_708 and type(V_709) == "string" then
V_707 = V_709
end
end
getCurrentTime_2(V_706.name, V_707, 4000)
Lumia.state._colorPickerAssets = true
end
end
options_34[#options_34 + 1] = function()
if not Lumia.state._menusRegistered then
if Lumia.features and Lumia.features.registerAll then
pcall(Lumia.features.registerAll)
end
if menu and menu.F and menu.F.dedupeMainTabs then
pcall(menu.F.dedupeMainTabs)
end
Lumia.state._menusRegistered = true
end
Lumia.state._loaderMenusDone = true
Wait(0)
end
options_34[#options_34 + 1] = function()
if Lumia.flushPendingStartupAssets then
pcall(Lumia.flushPendingStartupAssets)
end
if SharkAPI.Cloud and SharkAPI.Cloud.GetVariable then
local V_710, V_711 = pcall(SharkAPI.Cloud.GetVariable, V_620)
if V_710 and type(V_711) == "string" and V_711 ~= "" and json and json.decode then
local V_712, loaderSaved_2 = pcall(json.decode, V_711)
if V_712 and type(loaderSaved_2) == "table" then
Lumia.state.loaderSaved = loaderSaved_2
end
end
end
if Lumia.applyBannerFallback then
pcall(Lumia.applyBannerFallback, tonumber(Lumia.state.bannerIndex) or 1)
end
Lumia.state._loaderCaching = true
if Lumia.loadBanner then
pcall(Lumia.loadBanner, true)
end
Lumia.state._loaderCaching = false
end
local V_713 = #options_34
F_20(0, V_713)
__LCTR(4175, function()
for V_714 = 1, V_713 do
pcall(options_34[V_714])
F_20(V_714, V_713)
Wait(0)
end
Lumia.state._loaderCacheDone = true
end)
end
local function F_21()
local loaderPrevDown_1 = Lumia.state.loaderPrevDown
if type(loaderPrevDown_1) ~= "table" then
loaderPrevDown_1 = {}
Lumia.state.loaderPrevDown = loaderPrevDown_1
end
if Lumia.state.loaderWaitRelease ~= true then
loaderPrevDown_1[0x14] = F_16(0x14)
loaderPrevDown_1[0x05] = F_16(0x05)
loaderPrevDown_1[0x06] = F_16(0x06)
Lumia.state.loaderWaitRelease = true
return nil
end
local V_715 = F_16(0x14)
if loaderPrevDown_1[0x14] ~= V_715 then
loaderPrevDown_1[0x14] = V_715
return 0x14
end
loaderPrevDown_1[0x14] = V_715
for V_716, V_717 in ipairs({ 0x05, 0x06 }) do
local V_718 = F_16(V_717)
local V_719 = loaderPrevDown_1[V_717] == true
loaderPrevDown_1[V_717] = V_718
if V_718 and not V_719 then
return V_717
end
if SharkAPI and SharkAPI.IsKeyJustPressed then
local V_720, V_721 = pcall(SharkAPI.IsKeyJustPressed, V_717)
if V_720 and V_721 then
return V_717
end
end
end
local keyEdge_1 = Lumia.util.keyEdge
if not keyEdge_1 then
return nil
end
for V_722 = 1, #options_30 do
local V_723 = options_30[V_722]
if V_723 ~= 0x14 and V_723 ~= 0x05 and V_723 ~= 0x06 and F_15(V_723) and keyEdge_1(V_723) then
return V_723
end
end
return nil
end
local function getCurrentTime_4()
local loaderSelectedKeyName_1 = Lumia.state.loaderSelectedKeyName
if loaderSelectedKeyName_1 and loaderSelectedKeyName_1 ~= "" then
getCurrentTime_1("bind", 100, loaderSelectedKeyName_1)
if GetGameTimer() >= (Lumia.state.loaderDoneAt or 0) then
Lumia.loader.finish(Lumia.state.loaderSelectedVk or 0x14)
end
return
end
getCurrentTime_1("bind", 100, nil)
if GetGameTimer() < (Lumia.state.loaderDebounceUntil or 0) then
return
end
local loaderSelectedVk_1 = F_21()
if not loaderSelectedVk_1 then
return
end
Lumia.state.loaderSelectedKeyName = F_14(loaderSelectedVk_1)
Lumia.state.loaderSelectedVk = loaderSelectedVk_1
Lumia.state.loaderDoneAt = GetGameTimer() + 420
end
local function getCurrentTime_5()
getCurrentTime_3()
local V_724 = tonumber(Lumia.state._loaderTotalN) or 1
if V_724 < 1 then
V_724 = 1
end
local V_725 = tonumber(Lumia.state._loaderDoneN) or 0
local V_726 = math.floor((V_725 / V_724) * 100 + 0.5)
if Lumia.state._loaderCacheDone then
V_726 = 100
end
if V_726 < 0 then
V_726 = 0
end
if V_726 > 100 then
V_726 = 100
end
local V_727 = tonumber(Lumia.state._loaderShown) or 0
if V_727 < V_726 then
local V_728 = math.max(1, math.ceil((V_726 - V_727) * 0.22))
V_727 = math.min(V_726, V_727 + V_728)
elseif V_727 > V_726 then
V_727 = V_726
end
Lumia.state._loaderShown = V_727
Lumia.state._loaderPct = V_727
if V_726 >= 100 and V_727 >= 100 then
if not Lumia.state._loaderHoldUntil then
Lumia.state._loaderHoldUntil = GetGameTimer() + 280
end
return V_727, GetGameTimer() >= Lumia.state._loaderHoldUntil
end
return V_727, false
end
function Lumia.loader.tick()
if not Lumia.state.loaderActive then
return
end
if Lumia.state.loaderStep == "boot" then
local V_729, V_730 = getCurrentTime_5()
getCurrentTime_1("boot", V_729, nil)
if V_730 then
Lumia.state.loaderStep = "bind"
Lumia.state.loaderDebounceUntil = GetGameTimer() + 280
Lumia.state.loaderWaitRelease = nil
Lumia.state.loaderPrevDown = {}
Lumia.state.loaderSelectedKeyName = nil
Lumia.state.loaderSelectedVk = nil
end
else
getCurrentTime_4()
end
end
end
Lumia.notify = Lumia.notify or {}
Lumia.notify.list = Lumia.notify.list or {}
Lumia.notify.sticky = Lumia.notify.sticky or {}
NOTIFY_MAX = 6
NOTIFY_STICKY_MAX = 8
NOTIFY_IN_MS = 200
NOTIFY_OUT_MS = 150
NOTIFY_SLIDE = 18
ROUND_ALL = 240
ROUND_BOTTOM = 192
NOTIFY_TYPES = {
success = { label = "SUCCESS", r = 140, g = 210, b = 130, fillR = 70, fillG = 130, fillB = 70, icon = "f00c" },
info = { label = "INFO", r = 176, g = 140, b = 230, fillR = 48, fillG = 40, fillB = 62, icon = "f05a" },
warning = { label = "WARNING", r = 220, g = 185, b = 110, fillR = 150, fillG = 110, fillB = 55, icon = "f071" },
error = { label = "ERROR", r = 172, g = 79, b = 91, fillR = 90, fillG = 42, fillB = 50, icon = "f06a" },
normal = { label = "NOTICE", r = 160, g = 170, b = 190, fillR = 70, fillG = 75, fillB = 90, icon = "f0a1" },
}
do
NOTIFY_BG = { r = 22, g = 24, b = 32 }
NOTIFY_TITLE = { r = 255, g = 255, b = 255 }
NOTIFY_SUB = { r = 168, g = 168, b = 178 }
NOTIFY_BODY_A = 185
function notifyClamp01(V_731)
if V_731 < 0 then
return 0
end
if V_731 > 1 then
return 1
end
return V_731
end
function notifyEaseOut(V_732)
V_732 = notifyClamp01(V_732)
local V_733 = 1 - V_732
return 1 - V_733 * V_733 * V_733
end
function notifyEaseIn(V_734)
V_734 = notifyClamp01(V_734)
return V_734 * V_734 * V_734
end
function notifyNormalizeType(V_735)
local V_736 = tostring(V_735 or "normal"):lower()
if V_736 == "ok" or V_736 == "done" then
V_736 = "success"
elseif V_736 == "warn" then
V_736 = "warning"
elseif V_736 == "err" or V_736 == "fail" then
V_736 = "error"
end
if NOTIFY_TYPES[V_736] then
return V_736
end
return "normal"
end
function notifySplitTitleSub(V_737, V_738)
if type(V_738) == "string" then
local V_739 = V_738:gsub("^%s+", ""):gsub("%s+$", "")
if V_739 ~= "" then
return tostring(V_737 or ""), V_739
end
end
V_737 = tostring(V_737 or "")
local V_740 = V_737:find("|", 1, true)
if V_740 then
local V_741 = V_737:sub(1, V_740 - 1):gsub("^%s+", ""):gsub("%s+$", "")
local V_742 = V_737:sub(V_740 + 1):gsub("^%s+", ""):gsub("%s+$", "")
if V_742 == "" then
V_742 = nil
end
return V_741, V_742
end
return V_737, nil
end
function notifyAMul(V_743, V_744)
return math.floor((V_743 or 255) * notifyClamp01(V_744) + 0.5)
end
function notifyWrap(V_745, V_746, V_747, V_748)
V_745 = tostring(V_745 or "")
V_748 = V_748 or 2
if V_745 == "" then
return { "" }
end
V_746 = tonumber(V_746) or 14
V_747 = tonumber(V_747) or 200
local V_749 = V_746 * 0.52
if V_749 < 0.1 then
V_749 = 7
end
local V_750 = math.max(4, math.floor(V_747 / V_749))
if #V_745 <= V_750 then
return { V_745 }
end
local options_35 = {}
local V_751 = V_745
while V_751 ~= "" and #options_35 < V_748 do
if #V_751 <= V_750 then
options_35[#options_35 + 1] = V_751
break
end
local V_752 = V_751:sub(1, V_750)
local V_753 = V_752:match("^(.+)%s+%S*$")
if V_753 and #V_753 >= math.floor(V_750 * 0.45) then
V_752 = V_753
end
local V_754 = (#V_751 > #V_752)
if V_754 and #options_35 + 1 >= V_748 then
options_35[#options_35 + 1] = V_752:sub(1, math.max(1, #V_752 - 3)) .. "..."
break
end
options_35[#options_35 + 1] = V_752
V_751 = V_751:sub(#V_752 + 1):gsub("^%s+", "")
end
if #options_35 == 0 then
options_35[1] = V_745
end
return options_35
end
function notifyRect(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
if V_757 <= 0 or V_758 <= 0 or (V_762 or 0) <= 0 then
return
end
local V_765 = Lumia.draw and (Lumia.draw.rectFast or Lumia.draw.rect)
if V_765 then
V_765(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
return
end
local snap_2 = Lumia.util.snap
local byte_1 = Lumia.util.byte
local num_1 = Lumia.util.num
V_755, V_756, V_757, V_758 = snap_2(V_755), snap_2(V_756), snap_2(V_757), snap_2(V_758)
V_763 = num_1(V_763, 0)
V_759, V_760, V_761, V_762 = byte_1(V_759, 255), byte_1(V_760, 255), byte_1(V_761, 255), byte_1(V_762, 255)
V_764 = math.floor(num_1(V_764, (V_763 > 0.01) and ROUND_ALL or 0))
local V_766 = SharkAPI.Drawing and SharkAPI.Drawing.DrawRect
if V_766 then
V_766(V_755, V_756, V_757, V_758, V_759, V_760, V_761, V_762, V_763, V_764)
end
end
function notifyTextCentered(V_767, V_768, V_769, V_770, V_771, V_772, V_773, V_774)
local V_775 = Lumia.draw.textFast or Lumia.draw.text
V_775(V_767, V_768, V_769, V_770, true, V_771, V_772, V_773, V_774)
end
Lumia.draw = Lumia.draw or {}
Lumia.util = Lumia.util or {}
do
local draw_2 = Lumia.draw
local num_2 = Lumia.util.num
local byte_2 = Lumia.util.byte
local V_776, V_777, V_778, V_779, V_780, V_781
local V_782, V_783, V_784, V_785, V_786, V_787
local V_788
local floor_1 = math.floor
local function snap_3(V_789)
V_789 = tonumber(V_789) or 0
return floor_1(V_789 + 0.5)
end
Lumia.util.snap = snap_3
local function F_22()
local drawing_1 = SharkAPI.Drawing
if not drawing_1 then
return
end
V_776 = V_776 or drawing_1.DrawRect
V_777 = V_777 or drawing_1.DrawBorderRect
V_778 = V_778 or drawing_1.DrawBlur
V_779 = V_779 or drawing_1.DrawShadowRect
V_780 = V_780 or drawing_1.PushClipRect
V_781 = V_781 or drawing_1.PopClipRect
V_782 = V_782 or drawing_1.DrawLine
V_783 = V_783 or drawing_1.DrawCircle
V_784 = V_784 or drawing_1.DrawImage
V_785 = V_785 or drawing_1.DrawGif or drawing_1.DrawGIF or drawing_1.DrawGifImage
V_786 = V_786 or drawing_1.DrawText
local fonts_1 = SharkAPI.Fonts
V_787 = V_787 or fonts_1.GetTextWidthSize
V_788 = V_788 or SharkAPI.IsKeyPressed
draw_2._rawRect = V_776
draw_2._rawBorder = V_777
draw_2._rawLine = V_782
draw_2._rawCircle = V_783
draw_2._rawText = V_786
draw_2._rawImage = V_784
draw_2._rawGif = V_785
end
local function F_23(V_790)
if num_2(V_790, 0) > 0.01 then
return 240
end
return 0
end
function draw_2.rect(V_791, V_792, V_793, V_794, V_795, V_796, V_797, V_798, V_799, V_800)
if Lumia.state._diagNoDraw then
return
end
local V_801 = V_776
if not V_801 then
F_22()
V_801 = V_776
if not V_801 then
return
end
end
V_791 = floor_1((tonumber(V_791) or 0) + 0.5)
V_792 = floor_1((tonumber(V_792) or 0) + 0.5)
V_793 = floor_1((tonumber(V_793) or 0) + 0.5)
V_794 = floor_1((tonumber(V_794) or 0) + 0.5)
if V_793 <= 0 or V_794 <= 0 then
return
end
V_799 = tonumber(V_799) or 0
local V_802
if V_800 == nil then
V_802 = (V_799 > 0.01) and 240 or 0
else
V_802 = floor_1(tonumber(V_800) or 0)
end
V_795 = tonumber(V_795) or 255
V_796 = tonumber(V_796) or 255
V_797 = tonumber(V_797) or 255
V_798 = tonumber(V_798) or 255
if V_795 > 255 then
V_795 = 255
elseif V_795 < 0 then
V_795 = 0
else
V_795 = floor_1(V_795 + 0.5)
end
if V_796 > 255 then
V_796 = 255
elseif V_796 < 0 then
V_796 = 0
else
V_796 = floor_1(V_796 + 0.5)
end
if V_797 > 255 then
V_797 = 255
elseif V_797 < 0 then
V_797 = 0
else
V_797 = floor_1(V_797 + 0.5)
end
if V_798 > 255 then
V_798 = 255
elseif V_798 < 0 then
V_798 = 0
else
V_798 = floor_1(V_798 + 0.5)
end
V_801(V_791, V_792, V_793, V_794, V_795, V_796, V_797, V_798, V_799, V_802)
end
function draw_2.rectFast(V_803, V_804, V_805, V_806, V_807, V_808, V_809, V_810, V_811, V_812)
if Lumia.state._diagNoDraw then
return
end
local V_813 = V_776
if not V_813 then
F_22()
V_813 = V_776
if not V_813 then
return
end
end
if (not V_805) or not V_806 or V_805 <= 0 or V_806 <= 0 then
return
end
V_813(V_803, V_804, V_805, V_806, V_807, V_808, V_809, V_810, V_811 or 0, V_812 or 0)
end
function draw_2.border(V_814, V_815, V_816, V_817, V_818, V_819, V_820, V_821, V_822, V_823)
local V_824 = V_777
if not V_824 then
F_22()
V_824 = V_777
if not V_824 then
return
end
end
V_814, V_815, V_816, V_817 = snap_3(V_814), snap_3(V_815), snap_3(V_816), snap_3(V_817)
if V_816 <= 0 or V_817 <= 0 then
return
end
V_822 = num_2(V_822, 0)
V_823 = num_2(V_823, 1)
if V_823 <= 0 then
V_823 = 1.0
end
V_824(
V_814,
V_815,
V_816,
V_817,
byte_2(V_818, 255),
byte_2(V_819, 255),
byte_2(V_820, 255),
byte_2(V_821, 255),
V_822,
F_23(V_822),
V_823
)
end
function draw_2.shadow(V_825, V_826, V_827, V_828, V_829, V_830, V_831, V_832, V_833, V_834)
local V_835 = V_779
if not V_835 then
F_22()
V_835 = V_779
if not V_835 then
return
end
end
V_834 = num_2(V_834, 0)
V_835(
snap_3(V_825),
snap_3(V_826),
snap_3(V_827),
snap_3(V_828),
byte_2(V_829, 255),
byte_2(V_830, 255),
byte_2(V_831, 255),
byte_2(V_832, 255),
num_2(V_833, 12),
V_834,
(V_834 > 0.01) and 240 or 0
)
end
function draw_2.clipPush(V_836, V_837, V_838, V_839)
local V_840 = V_780
if not V_840 then
F_22()
V_840 = V_780
if not V_840 then
return
end
end
V_840(snap_3(V_836), snap_3(V_837), snap_3(V_838), snap_3(V_839), false)
end
function draw_2.clipPop()
local V_841 = V_781
if not V_841 then
F_22()
V_841 = V_781
if not V_841 then
return
end
end
V_841()
end
function draw_2.line(V_842, V_843, V_844, V_845, V_846, V_847, V_848, V_849, V_850)
local V_851 = V_782
if not V_851 then
F_22()
V_851 = V_782
if not V_851 then
return
end
end
V_851(
snap_3(V_842),
snap_3(V_843),
snap_3(V_844),
snap_3(V_845),
byte_2(V_846, 255),
byte_2(V_847, 255),
byte_2(V_848, 255),
byte_2(V_849, 255),
num_2(V_850, 1)
)
end
function draw_2.circle(V_852, V_853, V_854, V_855, V_856, V_857, V_858, V_859)
local V_860 = V_783
if not V_860 then
F_22()
V_860 = V_783
if not V_860 then
return
end
end
V_860(
num_2(V_852, 0),
num_2(V_853, 0),
num_2(V_854, 0),
90.0,
1.0,
byte_2(V_855, 255),
byte_2(V_856, 255),
byte_2(V_857, 255),
byte_2(V_858, 255),
V_859 == true
)
end
function draw_2.circleFast(V_861, V_862, V_863, V_864, V_865, V_866, V_867, V_868)
local V_869 = V_783
if not V_869 then
F_22()
V_869 = V_783
if not V_869 then
return
end
end
V_869(V_861, V_862, V_863, 90.0, 1.0, V_864, V_865, V_866, V_867, V_868 == true)
end
function draw_2.image(V_870, V_871, V_872, V_873, V_874, V_875, V_876, V_877, V_878, V_879, V_880)
if type(V_870) ~= "string" or V_870 == "" then
return false
end
local V_881 = V_784
if not V_881 then
F_22()
V_881 = V_784
if not V_881 then
return false
end
end
V_871, V_872, V_873, V_874 = snap_3(V_871), snap_3(V_872), snap_3(V_873), snap_3(V_874)
V_879 = num_2(V_879, 0)
V_875, V_876, V_877, V_878 = byte_2(V_875, 255), byte_2(V_876, 255), byte_2(V_877, 255), byte_2(V_878, 255)
if V_880 ~= nil then
local V_882 = pcall(
V_881,
V_870,
V_871,
V_872,
V_873,
V_874,
V_875,
V_876,
V_877,
V_878,
V_879,
math.floor(num_2(V_880, 0))
)
if V_882 then
return true
end
end
local V_883 = pcall(V_881, V_870, V_871, V_872, V_873, V_874, V_875, V_876, V_877, V_878, V_879)
return V_883 == true
end
function draw_2.gif(V_884, V_885, V_886, V_887, V_888, V_889, V_890, V_891, V_892, V_893, V_894)
if type(V_884) ~= "string" or V_884 == "" then
return false
end
local V_895 = V_785
if not V_895 then
F_22()
V_895 = V_785
end
V_885, V_886, V_887, V_888 = snap_3(V_885), snap_3(V_886), snap_3(V_887), snap_3(V_888)
if V_887 <= 0 or V_888 <= 0 then
return false
end
V_893 = num_2(V_893, 0)
V_889, V_890, V_891, V_892 = byte_2(V_889, 255), byte_2(V_890, 255), byte_2(V_891, 255), byte_2(V_892, 255)
local function F_24(V_896)
local V_897, V_898 = V_896()
if V_897 and V_898 ~= false then
return true
end
return false
end
if V_895 then
if
F_24(function()
return pcall(V_895, V_884, V_885, V_886, V_887, V_888, V_889, V_890, V_891, V_892, V_893)
end)
then
draw_2._gifSig = 2
return true
end
end
return false
end
function draw_2.text(V_899, V_900, V_901, V_902, V_903, V_904, V_905, V_906, V_907, V_908, V_909)
if Lumia.state._diagNoDraw then
return
end
local V_910 = V_786
if not V_910 then
F_22()
V_910 = V_786
if not V_910 then
return
end
end
V_899 = tostring(V_899 or "")
V_900 = tonumber(V_900) or 0
V_901 = tonumber(V_901) or 0
V_902 = tonumber(V_902) or (Lumia.fonts.size or 14)
V_904 = tonumber(V_904) or 255
V_905 = tonumber(V_905) or 255
V_906 = tonumber(V_906) or 255
V_907 = tonumber(V_907) or 255
if V_904 > 255 then
V_904 = 255
elseif V_904 < 0 then
V_904 = 0
else
V_904 = floor_1(V_904 + 0.5)
end
if V_905 > 255 then
V_905 = 255
elseif V_905 < 0 then
V_905 = 0
else
V_905 = floor_1(V_905 + 0.5)
end
if V_906 > 255 then
V_906 = 255
elseif V_906 < 0 then
V_906 = 0
else
V_906 = floor_1(V_906 + 0.5)
end
if V_907 > 255 then
V_907 = 255
elseif V_907 < 0 then
V_907 = 0
else
V_907 = floor_1(V_907 + 0.5)
end
if V_908 then
if V_909 ~= nil then
V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907, V_908, V_909)
else
V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907, V_908)
end
else
V_910(V_899, V_900, V_901, V_902, V_903 == true, V_904, V_905, V_906, V_907)
end
end
function draw_2.textFast(V_911, V_912, V_913, V_914, V_915, V_916, V_917, V_918, V_919, V_920, V_921)
if Lumia.state._diagNoDraw then
return
end
local V_922 = V_786
if not V_922 then
F_22()
V_922 = V_786
if not V_922 then
return
end
end
if V_920 then
if V_921 ~= nil then
V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919, V_920, V_921)
else
V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919, V_920)
end
else
V_922(V_911 or "", V_912, V_913, V_914, V_915 == true, V_916, V_917, V_918, V_919)
end
end
local function F_25(V_923)
V_923 = math.floor(tonumber(V_923) or 0)
if V_923 < 0 then
return ""
end
if utf8 and utf8.char then
local V_924, V_925 = pcall(utf8.char, V_923)
if V_924 and type(V_925) == "string" and V_925 ~= "" then
return V_925
end
end
if V_923 < 0x80 then
return string.char(V_923)
end
if V_923 < 0x800 then
return string.char(0xC0 + math.floor(V_923 / 0x40), 0x80 + (V_923 % 0x40))
end
if V_923 < 0x10000 then
return string.char(
0xE0 + math.floor(V_923 / 0x1000),
0x80 + (math.floor(V_923 / 0x40) % 0x40),
0x80 + (V_923 % 0x40)
)
end
return string.char(
0xF0 + math.floor(V_923 / 0x40000),
0x80 + (math.floor(V_923 / 0x1000) % 0x40),
0x80 + (math.floor(V_923 / 0x40) % 0x40),
0x80 + (V_923 % 0x40)
)
end
function draw_2.faFont()
local V_926 = Lumia.state and Lumia.state._faFont
if type(V_926) == "string" and V_926 ~= "" then
return V_926
end
local V_927 = "FontAwesomeExternal"
if SharkAPI.Fonts and SharkAPI.Fonts.CreateFontAwesome then
local V_928, V_929 = pcall(SharkAPI.Fonts.CreateFontAwesome)
if V_928 and type(V_929) == "string" and V_929 ~= "" then
V_927 = V_929
end
end
if Lumia.state then
Lumia.state._faFont = V_927
Lumia.state._uiTabCache = nil
if Lumia.state._uiRecOn then
Lumia.state._uiFaNeedRecache = true
else
Lumia.state._uiRecN = 0
Lumia.state._uiDirty = true
Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
end
end
return V_927
end
function draw_2.faGlyph(V_930)
if type(V_930) == "number" then
return F_25(V_930)
end
local V_931 = tostring(V_930 or "")
if V_931 == "" then
return ""
end
if V_931:find("\239", 1, true) then
return V_931
end
if V_931:find(":", 1, true) or V_931:find("[^0-9a-fA-Fx]", 1) then
return ""
end
if V_931:sub(1, 2) == "0x" or V_931:sub(1, 2) == "0X" then
V_931 = V_931:sub(3)
end
if #V_931 > 5 then
return ""
end
local V_932 = tonumber(V_931, 16)
if not V_932 then
return ""
end
return F_25(V_932)
end
function draw_2.fa(V_933, V_934, V_935, V_936, V_937, V_938, V_939, V_940)
local V_941 = draw_2.faGlyph(V_933)
if V_941 == "" then
return
end
draw_2.text(V_941, V_934, V_935, V_936 or 13, false, V_937, V_938, V_939, V_940, draw_2.faFont(), 5)
end
if Lumia.state then
Lumia.state._faFont = nil
Lumia.state._uiTabCache = nil
Lumia.state._uiRecN = 0
Lumia.state._uiDirty = true
Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
if Lumia.state.anim then
Lumia.state.anim.thumbY = nil
Lumia.state.anim.thumbYTarget = nil
end
end
local options_36 = {}
local V_942 = 0
local options_37 = {}
local V_943 = 0
function draw_2.estWidth(V_944, V_945)
V_944 = tostring(V_944 or "")
V_945 = tonumber(V_945) or 14
return #V_944 * (V_945 * 0.52)
end
function draw_2.fitText(V_946, V_947, V_948)
V_946 = tostring(V_946 or "")
V_947 = tonumber(V_947) or (Lumia.fonts.size or 14)
V_948 = tonumber(V_948) or 0
if V_948 <= 0 or V_946 == "" then
return V_946
end
local V_949 = V_946 .. "\000" .. tostring(V_947) .. "\000" .. tostring(V_948)
local V_950 = options_36[V_949]
if V_950 then
return V_950
end
local V_951 = V_947 * 0.52
if (#V_946 * V_951) <= V_948 then
if V_942 < 4096 then
options_36[V_949] = V_946
V_942 = V_942 + 1
end
return V_946
end
local V_952 = floor_1((V_948 / V_951) - 2)
if V_952 < 1 then
V_952 = 1
end
local V_953 = (V_952 >= #V_946) and V_946 or (V_946:sub(1, V_952) .. "..")
if V_942 < 4096 then
options_36[V_949] = V_953
V_942 = V_942 + 1
end
return V_953
end
function draw_2.textWidth(V_954, V_955, V_956)
V_954 = tostring(V_954 or "")
V_955 = num_2(V_955, Lumia.fonts.size or 14)
if V_954 == "" then
return 0
end
local V_957 = V_954 .. "\000" .. tostring(V_955) .. "\000" .. tostring(V_956 or "")
local V_958 = options_37[V_957]
if V_958 then
return V_958
end
local V_959 = V_787
if not V_959 then
F_22()
V_959 = V_787
end
local V_960 = 0
if V_959 then
if V_956 then
V_960 = num_2(V_959(V_954, V_955, V_956), 0)
else
V_960 = num_2(V_959(V_954, V_955), 0)
end
if V_960 > 0 then
if V_943 < 4096 then
options_37[V_957] = V_960
V_943 = V_943 + 1
end
return V_960
end
end
V_960 = #V_954 * (V_955 * 0.45)
if V_943 < 4096 then
options_37[V_957] = V_960
V_943 = V_943 + 1
end
return V_960
end
function Lumia.util.keyDown(V_961)
V_961 = tonumber(V_961) or 0
if V_961 <= 0 then
return false
end
local V_962 = Lumia.util._kd
local V_963 = Lumia.util._kdStamp
local V_964 = Lumia.util._kdGen
if V_962 and V_963 and V_963[V_961] == V_964 then
local V_965 = V_962[V_961]
return V_965 == true
end
local V_966 = V_788
if not V_966 then
F_22()
V_966 = V_788
end
local V_967 = false
if V_966 then
if Lumia.util._keyDirect then
V_967 = V_966(V_961) and true or false
else
local V_968, V_969 = pcall(V_966, V_961)
if V_968 then
Lumia.util._keyDirect = true
V_967 = V_969 and true or false
end
end
end
if V_962 then
V_962[V_961] = V_967
if V_963 then
V_963[V_961] = V_964
end
end
return V_967
end
Lumia.state.keyEdge = Lumia.state.keyEdge or {}
function Lumia.util.keyEdge(V_970)
V_970 = tonumber(V_970) or 0
local V_971 = Lumia.util.keyDown(V_970)
if not V_971 then
Lumia.state.keyEdge[V_970] = false
return false
end
if Lumia.state.keyEdge[V_970] then
return false
end
Lumia.state.keyEdge[V_970] = true
return true
end
end
function Lumia.notify.push(V_972, V_973, V_974, V_975)
if type(Lumia.notify.list) ~= "table" then
Lumia.notify.list = {}
end
if Lumia.state.playerCountBlocked then
return false
end
local V_976 = (GetGameTimer() < (tonumber(Lumia.state._bootNotifyProtectUntil) or 0))
if
not V_976
and Lumia.state
and Lumia.state.toggles
and Lumia.state.toggles["menu:notifications"] == false
then
return false
end
local V_977 = tostring(V_973 or "")
if V_977 == "" then
return false
end
if Lumia.state.loaderActive then
local V_978 = V_977:lower()
if
V_978:find("anticheat", 1, true)
or V_978:find("bypass", 1, true)
or V_978:find("detected", 1, true)
or V_978:find("scanning", 1, true)
or V_978:find("fiveguard", 1, true)
or V_978:find("electron", 1, true)
or V_978:find("reaper", 1, true)
or V_978:find("waveshield", 1, true)
or V_978:find("seed", 1, true)
or V_978:find("ac scan", 1, true)
then
Lumia.state._deferredAcScanNotifies = Lumia.state._deferredAcScanNotifies or {}
Lumia.state._deferredAcScanNotifies[#Lumia.state._deferredAcScanNotifies + 1] = {
msg = V_977,
ms = tonumber(V_974) or 4000,
}
Lumia.AcDevTrace("notify.push:deferred_loader", V_977)
return false
end
end
if type(V_972) == "number" and V_974 == nil then
V_974 = V_972
V_972 = "normal"
end
local V_979, V_980 = notifySplitTitleSub(V_977, V_975)
local V_981 = V_979
if V_980 then
V_981 = V_979 .. "|" .. V_980
end
local V_982 = notifyNormalizeType(V_972)
local V_983 = NOTIFY_TYPES[V_982] or NOTIFY_TYPES.info or NOTIFY_TYPES.normal
local createdAt_1 = GetGameTimer()
local duration_1 = tonumber(V_974) or 3200
if duration_1 < 800 then
duration_1 = 800
elseif duration_1 > 20000 then
duration_1 = 20000
end
local V_984 = V_977:lower()
if
Lumia.AcDevTrace
and (
V_984:find("anticheat", 1, true)
or V_984:find("bypass", 1, true)
or V_984:find("detected", 1, true)
or V_984:find("scanning", 1, true)
or V_984:find("fiveguard", 1, true)
or V_984:find("electron", 1, true)
or V_984:find("reaper", 1, true)
or V_984:find("waveshield", 1, true)
or V_984:find("seed", 1, true)
)
then
Lumia.AcDevTrace(
"notify.push",
tostring(V_972),
V_977,
"duration=" .. tostring(duration_1),
"uiMode=" .. tostring(Lumia.state.uiMode),
"loaderActive=" .. tostring(Lumia.state.loaderActive)
)
end
local list_5 = Lumia.notify.list
for V_985 = 1, #list_5 do
local V_986 = list_5[V_985]
if V_986 and V_986.text == V_981 and V_986.notifyType == V_982 and V_986.state ~= "out" then
V_986.duration = duration_1
V_986.createdAt = createdAt_1
V_986.holdUntil = createdAt_1 + duration_1
if V_986.state ~= "hold" then
V_986.state = "in"
V_986.animStart = createdAt_1
end
return true
end
end
list_5[#list_5 + 1] = {
text = V_981,
notifyType = V_982,
label = V_983.label or "INFO",
color = {
r = V_983.r or 176,
g = V_983.g or 140,
b = V_983.b or 230,
fillR = V_983.fillR or 48,
fillG = V_983.fillG or 40,
fillB = V_983.fillB or 62,
},
createdAt = createdAt_1,
animStart = createdAt_1,
holdUntil = createdAt_1 + duration_1,
duration = duration_1,
state = "in",
progress = 0,
}
while #list_5 > NOTIFY_MAX do
table.remove(list_5, 1)
end
return true
end
function notifyWithOptionalSub(V_987, V_988, V_989, V_990)
if type(V_989) == "string" then
return Lumia.notify.push(V_987, V_988, V_990, V_989)
end
return Lumia.notify.push(V_987, V_988, V_989)
end
function Lumia.notify.info(V_991, V_992, V_993)
return notifyWithOptionalSub("info", V_991, V_992, V_993)
end
function Lumia.notify.success(V_994, V_995, V_996)
return notifyWithOptionalSub("success", V_994, V_995, V_996)
end
function Lumia.notify.warning(V_997, V_998, V_999)
return notifyWithOptionalSub("warning", V_997, V_998, V_999)
end
function Lumia.notify.error(V_1000, V_1001, V_1002)
return notifyWithOptionalSub("error", V_1000, V_1001, V_1002)
end
function Lumia.notify.normal(V_1003, V_1004, V_1005)
return notifyWithOptionalSub("normal", V_1003, V_1004, V_1005)
end
function Lumia.notify.drawSticky()
local sticky_1 = Lumia.notify.sticky
if type(sticky_1) ~= "table" or #sticky_1 == 0 then
return
end
local currentTime_4 = GetGameTimer()
for V_1006 = #sticky_1, 1, -1 do
local V_1007 = sticky_1[V_1006]
if not V_1007 or currentTime_4 >= (tonumber(V_1007.holdUntil) or 0) then
table.remove(sticky_1, V_1006)
end
end
if #sticky_1 == 0 then
return
end
local V_1008, V_1009 = 1920, 1080
if Lumia.util.getScreenRes then
V_1008, V_1009 = Lumia.util.getScreenRes(2000)
else
local V_1010, V_1011 = GetActiveScreenResolution()
V_1008, V_1009 = tonumber(V_1010) or 1920, tonumber(V_1011) or 1080
end
V_1008 = tonumber(V_1008) or 1920
V_1009 = tonumber(V_1009) or 1080
local V_1012 = math.min(520, math.floor(V_1008 * 0.42))
local V_1013 = 34
local V_1014 = 6
local V_1015 = math.floor((V_1008 - V_1012) * 0.5)
local V_1016 = math.floor(V_1009 * 0.08)
local draw_3 = Lumia.draw
if not (draw_3 and draw_3.rect and draw_3.text) then
return
end
for V_1017 = 1, #sticky_1 do
local V_1018 = sticky_1[V_1017]
local V_1019 = V_1016 + (V_1017 - 1) * (V_1013 + V_1014)
draw_3.rect(V_1015, V_1019, V_1012, V_1013, 18, 18, 24, 240, 6.0)
draw_3.rect(V_1015, V_1019, 4, V_1013, 176, 140, 230, 255, 0)
local V_1020 = V_1018._dispLabel
if not V_1020 or V_1018._dispKey ~= V_1018.text then
V_1020 = tostring(V_1018.text or "")
if #V_1020 > 64 then
V_1020 = V_1020:sub(1, 61) .. "..."
end
V_1018._dispLabel = V_1020
V_1018._dispKey = V_1018.text
end
draw_3.text(V_1020, V_1015 + 14, V_1019 + 9, 14.0, false, 255, 255, 255, 255)
end
end
Lumia.Notify = function(V_1021, V_1022, V_1023, V_1024)
return Lumia.notify.push(V_1022 or "normal", V_1021, V_1023, V_1024)
end
Lumia.NotifyInfo = function(V_1025, V_1026, V_1027)
return Lumia.notify.info(V_1025, V_1026, V_1027)
end
Lumia.NotifyError = function(message_2, V_1028, V_1029)
return Lumia.notify.error(message_2, V_1028, V_1029)
end
Lumia.NotifySuccess = function(V_1030, V_1031, V_1032)
return Lumia.notify.success(V_1030, V_1031, V_1032)
end
Lumia.NotifyWarning = function(V_1033, V_1034, V_1035)
return Lumia.notify.warning(V_1033, V_1034, V_1035)
end
setmetatable(Lumia.notify, {
__index = function(V_1036, V_1037)
if V_1037 == "queue" then
return rawget(V_1036, "list")
end
end,
})
function Lumia.notify.draw()
local list_6 = Lumia.notify.list
if type(list_6) ~= "table" or #list_6 == 0 then
return
end
if Lumia.state and Lumia.state.toggles and Lumia.state.toggles["menu:notifications"] == false then
local V_1038 = GetGameTimer() < (tonumber(Lumia.state._bootNotifyProtectUntil) or 0)
if not V_1038 then
return
end
end
local animStart_2 = Lumia.util._now or GetGameTimer()
local V_1039, V_1040
if Lumia.util.getScreenRes then
V_1039, V_1040 = Lumia.util.getScreenRes(2000)
else
local V_1041, V_1042, V_1043 = pcall(GetActiveScreenResolution)
if V_1041 then
V_1039, V_1040 = V_1042, V_1043
end
end
V_1039 = tonumber(V_1039) or 1920
V_1040 = tonumber(V_1040) or 1080
if V_1039 < 100 then
V_1039 = 1920
end
if V_1040 < 100 then
V_1040 = 1080
end
for V_1044 = #list_6, 1, -1 do
local V_1045 = list_6[V_1044]
if not V_1045 then
table.remove(list_6, V_1044)
elseif V_1045.state == "in" then
local V_1046 = notifyClamp01((animStart_2 - (V_1045.animStart or animStart_2)) / NOTIFY_IN_MS)
V_1045.progress = notifyEaseOut(V_1046)
if V_1046 >= 1 then
V_1045.state = "hold"
V_1045.progress = 1
end
elseif V_1045.state == "hold" then
V_1045.progress = 1
if animStart_2 >= (V_1045.holdUntil or 0) then
V_1045.state = "out"
V_1045.animStart = animStart_2
end
elseif V_1045.state == "out" then
local V_1047 = notifyClamp01((animStart_2 - (V_1045.animStart or animStart_2)) / NOTIFY_OUT_MS)
V_1045.progress = 1 - notifyEaseIn(V_1047)
if V_1047 >= 1 then
table.remove(list_6, V_1044)
end
end
end
if #list_6 == 0 then
return
end
local V_1048 = V_1039 / 1920
if V_1048 < 0.8 then
V_1048 = 0.8
elseif V_1048 > 1.4 then
V_1048 = 1.4
end
local V_1049 = math.floor(300 * V_1048 + 0.5)
local V_1050 = 7.0 * V_1048
local V_1051 = 8 * V_1048
local V_1052 = 32 * V_1048
local V_1053 = 16 * V_1048
local V_1054 = 16 * V_1048
local V_1055 = 18 * V_1048
local V_1056 = 1.2 * V_1048
local V_1057 = 5.0 * V_1048
local V_1058 = 9 * V_1048
local V_1059 = 11 * V_1048
local V_1060 = 2 * V_1048
local V_1061 = 14.0 * V_1048
local V_1062 = 11.5 * V_1048
local V_1063 = 10.0 * V_1048
local V_1064 = V_1049 - V_1053 * 2
local V_1065 = V_1052
local V_1066 = (V_1039 - V_1049) * 0.5
for V_1067 = 1, #list_6 do
local V_1068 = list_6[V_1067]
if V_1068 then
local V_1069 = notifyClamp01(V_1068.progress or 0)
if V_1069 < 0.05 then
V_1069 = 0.05
end
local V_1070 = V_1069
local V_1071 = V_1068._fx
if not V_1071 or V_1068._fxKey ~= V_1068.text or V_1068._fxScale ~= V_1048 then
local V_1072 = notifyNormalizeType(V_1068.notifyType)
local V_1073 = NOTIFY_TYPES[V_1072] or NOTIFY_TYPES.info
local V_1074, V_1075 = notifySplitTitleSub(V_1068.text)
V_1071 = {
br = math.floor(tonumber(V_1073.r) or 200),
bgc = math.floor(tonumber(V_1073.g) or 200),
bb = math.floor(tonumber(V_1073.b) or 210),
fr = math.floor(tonumber(V_1073.fillR) or 40),
fg = math.floor(tonumber(V_1073.fillG) or 40),
fb = math.floor(tonumber(V_1073.fillB) or 48),
label = V_1068.label or V_1073.label or "INFO",
titleLines = notifyWrap(V_1074, V_1061, V_1064, 2),
subLines = V_1075 and notifyWrap(V_1075, V_1062, V_1064, 2) or nil,
}
V_1068._fx = V_1071
V_1068._fxKey = V_1068.text
V_1068._fxScale = V_1048
end
local br_1, bgc_1, bb_1 = V_1071.br, V_1071.bgc, V_1071.bb
local fr_1, fg_1, fb_1 = V_1071.fr, V_1071.fg, V_1071.fb
local titleLines_1 = V_1071.titleLines
local subLines_1 = V_1071.subLines
local V_1076 = #titleLines_1 * (V_1061 + 2 * V_1048)
if subLines_1 then
V_1076 = V_1076 + V_1060 + #subLines_1 * (V_1062 + 2 * V_1048)
end
local V_1077 = V_1054 + V_1058 + V_1076 + V_1059
local V_1078 = subLines_1 and (64 * V_1048) or (44 * V_1048)
if V_1077 < V_1078 then
V_1077 = V_1078
end
local V_1079 = math.min(V_1050, V_1077 * 0.16)
local V_1080 = V_1065 + math.floor((1 - V_1069) * NOTIFY_SLIDE * V_1048)
local V_1081 = V_1066
local V_1082 = V_1081 + V_1049 * 0.5
notifyRect(
V_1081,
V_1080,
V_1049,
V_1077,
NOTIFY_BG.r,
NOTIFY_BG.g,
NOTIFY_BG.b,
notifyAMul(NOTIFY_BODY_A, V_1070),
V_1079,
ROUND_ALL
)
local V_1083 = V_1049 - V_1055 * 2
local V_1084 = V_1081 + V_1055
local V_1085 = V_1080
local V_1086 = math.min(V_1057, V_1054 * 0.45)
notifyRect(
V_1084,
V_1085,
V_1083,
V_1054,
br_1,
bgc_1,
bb_1,
notifyAMul(255, V_1070),
V_1086,
ROUND_BOTTOM
)
notifyRect(
V_1084 + V_1056,
V_1085,
V_1083 - V_1056 * 2,
V_1054 - V_1056,
fr_1,
fg_1,
fb_1,
notifyAMul(230, V_1070),
math.max(1, V_1086 - V_1056),
ROUND_BOTTOM
)
notifyRect(V_1084, V_1085, V_1083, V_1056, br_1, bgc_1, bb_1, notifyAMul(255, V_1070), 0, 0)
local label_1 = V_1071.label
notifyTextCentered(
label_1,
V_1082,
V_1085 + (V_1054 - V_1063) * 0.5 - 0.5 * V_1048,
V_1063,
255,
255,
255,
notifyAMul(255, V_1070)
)
local V_1087 = V_1076
local V_1088 = V_1085 + V_1054 + V_1058
local V_1089 = (V_1080 + V_1077 - V_1059) - V_1088
local V_1090 = V_1088
if V_1089 > V_1087 then
V_1090 = V_1088 + (V_1089 - V_1087) * 0.35
end
for V_1091 = 1, #titleLines_1 do
notifyTextCentered(
titleLines_1[V_1091],
V_1082,
V_1090,
V_1061,
NOTIFY_TITLE.r,
NOTIFY_TITLE.g,
NOTIFY_TITLE.b,
notifyAMul(255, V_1070)
)
V_1090 = V_1090 + V_1061 + 2 * V_1048
end
if subLines_1 then
V_1090 = V_1090 + V_1060
for V_1092 = 1, #subLines_1 do
notifyTextCentered(
subLines_1[V_1092],
V_1082,
V_1090,
V_1062,
NOTIFY_SUB.r,
NOTIFY_SUB.g,
NOTIFY_SUB.b,
notifyAMul(230, V_1070)
)
V_1090 = V_1090 + V_1062 + 2 * V_1048
end
end
V_1065 = V_1065 + V_1077 + V_1051
end
end
end
Lumia.colorPicker = Lumia.colorPicker or {}
do
function cpClamp(V_1093, V_1094, V_1095)
if V_1093 < V_1094 then
return V_1094
end
if V_1093 > V_1095 then
return V_1095
end
return V_1093
end
function cpRgbToHsv(V_1096, V_1097, V_1098)
local V_1099 = cpClamp((tonumber(V_1096) or 0) / 255.0, 0.0, 1.0)
local V_1100 = cpClamp((tonumber(V_1097) or 0) / 255.0, 0.0, 1.0)
local V_1101 = cpClamp((tonumber(V_1098) or 0) / 255.0, 0.0, 1.0)
local V_1102 = math.max(V_1099, V_1100, V_1101)
local V_1103 = math.min(V_1099, V_1100, V_1101)
local V_1104 = V_1102 - V_1103
local V_1105 = 0.0
if V_1104 > 0.00001 then
if V_1102 == V_1099 then
V_1105 = ((V_1100 - V_1101) / V_1104) % 6.0
elseif V_1102 == V_1100 then
V_1105 = ((V_1101 - V_1099) / V_1104) + 2.0
else
V_1105 = ((V_1099 - V_1100) / V_1104) + 4.0
end
V_1105 = V_1105 / 6.0
if V_1105 < 0.0 then
V_1105 = V_1105 + 1.0
end
end
local V_1106 = (V_1102 <= 0.00001) and 0.0 or (V_1104 / V_1102)
return V_1105, V_1106, V_1102
end
function cpHsvToRgb(V_1107, V_1108, V_1109)
V_1107 = cpClamp(tonumber(V_1107) or 0.0, 0.0, 1.0)
V_1108 = cpClamp(tonumber(V_1108) or 0.0, 0.0, 1.0)
V_1109 = cpClamp(tonumber(V_1109) or 0.0, 0.0, 1.0)
local V_1110 = math.floor(V_1107 * 6.0)
local V_1111 = V_1107 * 6.0 - V_1110
local V_1112 = V_1109 * (1.0 - V_1108)
local V_1113 = V_1109 * (1.0 - V_1111 * V_1108)
local V_1114 = V_1109 * (1.0 - (1.0 - V_1111) * V_1108)
V_1110 = V_1110 % 6
local V_1115, V_1116, V_1117 = V_1109, V_1114, V_1112
if V_1110 == 1 then
V_1115, V_1116, V_1117 = V_1113, V_1109, V_1112
elseif V_1110 == 2 then
V_1115, V_1116, V_1117 = V_1112, V_1109, V_1114
elseif V_1110 == 3 then
V_1115, V_1116, V_1117 = V_1112, V_1113, V_1109
elseif V_1110 == 4 then
V_1115, V_1116, V_1117 = V_1114, V_1112, V_1109
elseif V_1110 == 5 then
V_1115, V_1116, V_1117 = V_1109, V_1112, V_1113
end
return math.floor(V_1115 * 255.0 + 0.5), math.floor(V_1116 * 255.0 + 0.5), math.floor(V_1117 * 255.0 + 0.5)
end
function Lumia.colorPicker.ensureAssets()
if Lumia.state._colorPickerAssets then
return
end
Lumia.state._colorPickerAssets = true
if SharkAPI.Images.ImportImageFromUrl then
pcall(
SharkAPI.Images.ImportImageFromUrl,
"colorpicker_gradient",
Lumia.protect.urls.colorpickerGradient()
)
pcall(SharkAPI.Images.ImportImageFromUrl, "colorpicker_huebar", Lumia.protect.urls.colorpickerHue())
end
end
function Lumia.colorPicker.isOpen()
local colorPicker_1 = Lumia.state.colorPicker
return colorPicker_1 and colorPicker_1.open == true
end
function cpSync(V_1118)
if not V_1118 then
return
end
local r_1, g_1, b_1 = cpHsvToRgb(V_1118.h, V_1118.s, V_1118.v)
Lumia.state.colors = Lumia.state.colors or {}
local V_1119 = Lumia.state.colors[V_1118.id] or {}
V_1119.r, V_1119.g, V_1119.b = r_1, g_1, b_1
V_1119.a = math.floor(cpClamp(V_1118.a or 255, 0, 255))
Lumia.state.colors[V_1118.id] = V_1119
if V_1118.id == "ui:primaryColor" then
Lumia.applyPrimaryColor({ r = r_1, g = g_1, b = b_1, a = V_1119.a })
end
if V_1118.opt.func then
pcall(V_1118.opt.func, V_1119)
end
return V_1119
end
function Lumia.colorPicker.open(V_1120)
if not V_1120 or not (V_1120.id or V_1120.toggle) then
return
end
if Lumia.state.colorPickerReopenDelay and GetGameTimer() < Lumia.state.colorPickerReopenDelay then
return
end
Lumia.colorPicker.ensureAssets()
local V_1121 = V_1120.id or V_1120.toggle
Lumia.state.colors = Lumia.state.colors or {}
if V_1120.syncFromVehicle then
local V_1122, V_1123 = pcall(V_1120.syncFromVehicle)
if V_1122 and type(V_1123) == "table" then
Lumia.state.colors[V_1121] = {
r = math.floor(math.max(0, math.min(255, tonumber(V_1123.r or V_1123[1]) or 255))),
g = math.floor(math.max(0, math.min(255, tonumber(V_1123.g or V_1123[2]) or 255))),
b = math.floor(math.max(0, math.min(255, tonumber(V_1123.b or V_1123[3]) or 255))),
a = math.floor(math.max(0, math.min(255, tonumber(V_1123.a or V_1123[4]) or 255))),
}
end
end
if not Lumia.state.colors[V_1121] then
Lumia.state.colors[V_1121] = { r = 255, g = 255, b = 255, a = 255 }
end
local V_1124 = Lumia.state.colors[V_1121]
local V_1125, V_1126, V_1127 = cpRgbToHsv(V_1124.r or 255, V_1124.g or 255, V_1124.b or 255)
local V_1128 = Lumia.state.colorPickerAnchors and Lumia.state.colorPickerAnchors[V_1121]
Lumia.state.colorPicker = {
open = true,
closing = false,
id = V_1121,
opt = V_1120,
h = V_1125,
s = V_1126,
v = V_1127,
a = V_1124.a or 255,
drag = nil,
openedAt = GetGameTimer(),
closeStartedAt = 0,
anchorX = V_1128 and V_1128.x or nil,
anchorY = V_1128 and V_1128.y or nil,
slideFromX = -28,
lmbWasHeld = false,
}
Lumia.state.colorPickerKeyDelay = GetGameTimer() + 220
if SharkAPI.Drawing then
pcall(SharkAPI.Drawing.SetCursorActive, true)
if SharkAPI.Drawing.SetCursorIcon then
pcall(SharkAPI.Drawing.SetCursorIcon, 0)
end
end
Lumia.state._altCursorOn = true
end
function Lumia.colorPicker.close(V_1129)
local colorPicker_2 = Lumia.state.colorPicker
if not colorPicker_2 or not colorPicker_2.open or colorPicker_2.closing then
return
end
if V_1129 ~= false then
cpSync(colorPicker_2)
if Lumia.features and Lumia.features.markConfigDirty then
Lumia.features.markConfigDirty()
end
end
colorPicker_2.closing = true
colorPicker_2.closeStartedAt = GetGameTimer()
colorPicker_2.drag = nil
Lumia.state.colorPickerReopenDelay = GetGameTimer() + 220
end
function cpLayout(V_1130)
local V_1131 = 200
local V_1132 = 188
local V_1133 = V_1130.anchorX or math.floor((screenW - V_1131) * 0.5)
local V_1134 = V_1130.anchorY or math.floor((screenH - V_1132) * 0.5)
V_1133 = math.floor(cpClamp(V_1133, 8, math.max(8, screenW - V_1131 - 8)))
V_1134 = math.floor(cpClamp(V_1134, 8, math.max(8, screenH - V_1132 - 8)))
return {
panelX = V_1133,
panelY = V_1134,
panelW = V_1131,
panelH = V_1132,
svX = V_1133 + 10,
svY = V_1134 + 34,
svW = V_1131 - 40,
svH = 120,
hueX = V_1133 + V_1131 - 22,
hueY = V_1134 + 34,
hueW = 12,
hueH = 120,
hexX = V_1133 + 10,
hexY = V_1134 + 164,
hexW = V_1131 - 20,
hexH = 16,
}
end
function cpCursor()
local V_1135 = (GetControlNormal(0, 239) or 0.0) * screenW
local V_1136 = (GetControlNormal(0, 240) or 0.0) * screenH
if SharkAPI.GetCursorX and SharkAPI.GetCursorY then
local V_1137, V_1138 = SharkAPI.GetCursorX(), SharkAPI.GetCursorY()
if type(V_1137) == "number" and type(V_1138) == "number" then
V_1135, V_1136 = V_1137, V_1138
end
end
return V_1135, V_1136
end
function cpInside(V_1139, V_1140, V_1141, V_1142, V_1143, V_1144)
return V_1139 >= V_1141 and V_1139 <= V_1141 + V_1143 and V_1140 >= V_1142 and V_1140 <= V_1142 + V_1144
end
function Lumia.colorPicker.tick()
local colorPicker_3 = Lumia.state.colorPicker
if not colorPicker_3 or not colorPicker_3.open then
return false
end
local currentTime_5 = GetGameTimer()
if colorPicker_3.closing then
return true
end
if currentTime_5 - (colorPicker_3.openedAt or currentTime_5) < 150 then
return true
end
if SharkAPI.Drawing.SetCursorActive then
pcall(SharkAPI.Drawing.SetCursorActive, true)
Lumia.state._altCursorOn = true
end
local V_1145 = Lumia.state.colorPickerKeyDelay or 0
if currentTime_5 > V_1145 then
if Lumia.util.keyEdge(Lumia.keys.enter) or Lumia.util.keyEdge(0x1B) then
Lumia.colorPicker.close(true)
Lumia.state.colorPickerKeyDelay = currentTime_5 + 180
Lumia.state._enterNeedUp = true
return true
end
local V_1146 = Lumia.util.keyDown(0x10) and 0.02 or 0.035
if Lumia.util.keyDown(Lumia.keys.left) then
colorPicker_3.h = (colorPicker_3.h - V_1146) % 1.0
if colorPicker_3.h < 0.0 then
colorPicker_3.h = colorPicker_3.h + 1.0
end
cpSync(colorPicker_3)
Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
elseif Lumia.util.keyDown(Lumia.keys.right) then
colorPicker_3.h = (colorPicker_3.h + V_1146) % 1.0
cpSync(colorPicker_3)
Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
elseif Lumia.util.keyDown(Lumia.keys.up) then
colorPicker_3.v = cpClamp(colorPicker_3.v + V_1146, 0.0, 1.0)
cpSync(colorPicker_3)
Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
elseif Lumia.util.keyDown(Lumia.keys.down) then
colorPicker_3.v = cpClamp(colorPicker_3.v - V_1146, 0.0, 1.0)
cpSync(colorPicker_3)
Lumia.state.colorPickerKeyDelay = currentTime_5 + 40
end
end
local V_1147 = cpLayout(colorPicker_3)
local V_1148, V_1149 = cpCursor()
local V_1150 = menu.F.eagleAcLive and menu.F.eagleAcLive()
local lmbWasHeld_1 = (SharkAPI.IsKeyPressed(0x01))
local V_1151 = (SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01))
if not V_1150 then
lmbWasHeld_1 = lmbWasHeld_1 or IsDisabledControlPressed(0, 24) or IsControlPressed(0, 24)
V_1151 = V_1151 or IsDisabledControlJustPressed(0, 24) or IsControlJustPressed(0, 24)
end
local V_1152 = colorPicker_3.lmbWasHeld == true
if lmbWasHeld_1 and not V_1152 then
V_1151 = true
end
local V_1153 = (not lmbWasHeld_1 and V_1152)
if not V_1150 then
V_1153 = V_1153 or IsDisabledControlJustReleased(0, 24) or IsControlJustReleased(0, 24)
end
if V_1151 or (lmbWasHeld_1 and not colorPicker_3.drag) then
if cpInside(V_1148, V_1149, V_1147.svX, V_1147.svY, V_1147.svW, V_1147.svH) then
colorPicker_3.drag = "sv"
elseif cpInside(V_1148, V_1149, V_1147.hueX - 2, V_1147.hueY, V_1147.hueW + 4, V_1147.hueH) then
colorPicker_3.drag = "hue"
elseif
V_1151 and not cpInside(V_1148, V_1149, V_1147.panelX, V_1147.panelY, V_1147.panelW, V_1147.panelH)
then
Lumia.colorPicker.close(true)
return true
end
end
if V_1153 then
colorPicker_3.drag = nil
end
colorPicker_3.lmbWasHeld = lmbWasHeld_1
if (lmbWasHeld_1 or V_1151) and colorPicker_3.drag then
if colorPicker_3.drag == "sv" then
colorPicker_3.s = cpClamp((V_1148 - V_1147.svX) / math.max(1.0, V_1147.svW), 0.0, 1.0)
colorPicker_3.v = cpClamp(1.0 - ((V_1149 - V_1147.svY) / math.max(1.0, V_1147.svH)), 0.0, 1.0)
elseif colorPicker_3.drag == "hue" then
colorPicker_3.h = cpClamp(1.0 - ((V_1149 - V_1147.hueY) / math.max(1.0, V_1147.hueH)), 0.0, 1.0)
end
cpSync(colorPicker_3)
end
return true
end
function Lumia.colorPicker.draw()
local colorPicker_4 = Lumia.state.colorPicker
if not colorPicker_4 or not colorPicker_4.open then
return
end
local currentTime_6 = GetGameTimer()
local V_1154 = 1.0
if colorPicker_4.closing then
local V_1155 =
cpClamp((currentTime_6 - (colorPicker_4.closeStartedAt or currentTime_6)) / 155.0, 0.0, 1.0)
local V_1156 = V_1155 * V_1155 * (3.0 - 2.0 * V_1155)
V_1154 = 1.0 - V_1156
if V_1155 >= 1.0 then
colorPicker_4.open = false
colorPicker_4.closing = false
if not Lumia.util.keyDown(0x12) and not Lumia.state._bindListWantCursor then
if SharkAPI.Drawing.SetCursorActive then
pcall(SharkAPI.Drawing.SetCursorActive, false)
end
Lumia.state._altCursorOn = false
end
return
end
else
local V_1157 = cpClamp((currentTime_6 - (colorPicker_4.openedAt or currentTime_6)) / 190.0, 0.0, 1.0)
V_1154 = 1.0 - ((1.0 - V_1157) ^ 4)
end
local V_1158 = cpLayout(colorPicker_4)
local V_1159 = math.floor((colorPicker_4.slideFromX or -28) * (1.0 - V_1154))
V_1158.panelX = V_1158.panelX + V_1159
V_1158.svX = V_1158.svX + V_1159
V_1158.hueX = V_1158.hueX + V_1159
V_1158.hexX = V_1158.hexX + V_1159
local V_1160 = V_1154
local callback = function(V_1161)
return math.floor((V_1161 or 255) * V_1160 + 0.5)
end
local V_1162, V_1163, V_1164 = cpHsvToRgb(colorPicker_4.h, 1.0, 1.0)
local V_1165, V_1166, V_1167 = cpHsvToRgb(colorPicker_4.h, colorPicker_4.s, colorPicker_4.v)
local panelX_1, panelY_1, panelW_1, panelH_1 = V_1158.panelX, V_1158.panelY, V_1158.panelW, V_1158.panelH
Lumia.draw.rect(panelX_1, panelY_1, panelW_1, panelH_1, 40, 40, 44, callback(245), 8)
Lumia.draw.rect(panelX_1 + 1, panelY_1 + 1, panelW_1 - 2, panelH_1 - 2, 28, 28, 32, callback(255), 7)
Lumia.draw.text(
"Color",
panelX_1 + 12,
panelY_1 + 10,
Lumia.fonts.small,
false,
220,
220,
225,
callback(255)
)
Lumia.draw.rect(panelX_1 + panelW_1 - 42, panelY_1 + 8, 28, 18, V_1165, V_1166, V_1167, callback(255), 4)
Lumia.draw.rect(V_1158.svX, V_1158.svY, V_1158.svW, V_1158.svH, V_1162, V_1163, V_1164, callback(255), 4)
SharkAPI.Drawing.DrawImage(
"colorpicker_gradient",
V_1158.svX + 0.0,
V_1158.svY + 0.0,
V_1158.svW + 0.0,
V_1158.svH + 0.0,
255,
255,
255,
callback(255),
4.0
)
local V_1168 = V_1158.svX + colorPicker_4.s * V_1158.svW
local V_1169 = V_1158.svY + (1.0 - colorPicker_4.v) * V_1158.svH
Lumia.draw.rect(V_1168 - 4, V_1169 - 4, 8, 8, 0, 0, 0, callback(255), 4)
Lumia.draw.rect(V_1168 - 2, V_1169 - 2, 4, 4, 255, 255, 255, callback(255), 2)
local state_12 = {
{ 255, 0, 0 },
{ 255, 0, 255 },
{ 0, 0, 255 },
{ 0, 255, 255 },
{ 0, 255, 0 },
{ 255, 255, 0 },
{ 255, 0, 0 },
}
local V_1170 = V_1158.hueH / 6.0
for V_1171 = 1, 6 do
local V_1172 = state_12[V_1171]
local V_1173 = state_12[V_1171 + 1]
if SharkAPI.Drawing.DrawGradientRect then
SharkAPI.Drawing.DrawGradientRect(
V_1158.hueX + 0.0,
V_1158.hueY + (V_1171 - 1) * V_1170 + 0.0,
V_1158.hueW + 0.0,
V_1170 + 1.0,
V_1172[1],
V_1172[2],
V_1172[3],
callback(255),
V_1173[1],
V_1173[2],
V_1173[3],
callback(255)
)
else
Lumia.draw.rect(
V_1158.hueX,
V_1158.hueY + (V_1171 - 1) * V_1170,
V_1158.hueW,
V_1170 + 1,
V_1172[1],
V_1172[2],
V_1172[3],
callback(255),
0
)
end
end
local V_1174 = V_1158.hueY + (1.0 - colorPicker_4.h) * V_1158.hueH
Lumia.draw.rect(V_1158.hueX - 2, V_1174 - 2, V_1158.hueW + 4, 4, 255, 255, 255, callback(255), 2)
local V_1175 = string.format("#%02X%02X%02X", V_1165, V_1166, V_1167)
Lumia.draw.rect(V_1158.hexX, V_1158.hexY, V_1158.hexW, V_1158.hexH, 22, 22, 26, callback(255), 3)
Lumia.draw.rect(
V_1158.hexX + 3,
V_1158.hexY + 3,
10,
V_1158.hexH - 6,
V_1165,
V_1166,
V_1167,
callback(255),
2
)
Lumia.draw.text(
V_1175,
V_1158.hexX + 18,
V_1158.hexY + 1,
Lumia.fonts.small,
false,
230,
230,
235,
callback(255)
)
end
end
function Lumia.layout.pinKeyboardLeft(V_1176)
local layout_1 = Lumia.layout
if not layout_1 then
return
end
Lumia.state = Lumia.state or {}
Lumia.state.toggles = Lumia.state.toggles or {}
if not V_1176 and Lumia.state.toggles["ui_center"] == true then
layout_1.center = true
return
end
local V_1177 = tonumber(layout_1.w) or 370.0
local x_1 = 48.0
layout_1.center = false
Lumia.state.toggles["ui_center"] = false
if Lumia.state._menuPosUserSet and not V_1176 then
return
end
layout_1.x = x_1
Lumia.state.sliders = Lumia.state.sliders or {}
Lumia.state.sliders["menux"] = layout_1.x
Lumia.state._menuPosMigrated = true
end
function Lumia.layout.pinKeyboardRight(V_1178)
local layout_2 = Lumia.layout
if not layout_2 then
return
end
Lumia.state = Lumia.state or {}
Lumia.state.toggles = Lumia.state.toggles or {}
if not V_1178 and Lumia.state.toggles["ui_center"] == true then
layout_2.center = true
return
end
local V_1179 = screenW or 1920
local V_1180, V_1181 = GetActiveScreenResolution()
if type(V_1180) == "number" and V_1180 > 1 then
V_1179 = V_1180
screenW = V_1180
end
local V_1182 = tonumber(layout_2.w) or 370.0
local x_2 = math.max(20.0, V_1179 - V_1182 - 48.0)
layout_2.center = false
Lumia.state.toggles["ui_center"] = false
if Lumia.state._menuPosUserSet and not V_1178 then
return
end
layout_2.x = x_2
Lumia.state.sliders = Lumia.state.sliders or {}
Lumia.state.sliders["menux"] = layout_2.x
Lumia.state._menuPosMigrated = true
end
do
local options_38 = {}
local V_1183 = 0
function lumiaMeasureGlyphs(V_1184, V_1185)
V_1184 = tostring(V_1184 or "")
V_1185 = tonumber(V_1185) or 14
if V_1184 == "" then
return 0
end
local V_1186 = V_1184 .. "\000" .. tostring(V_1185)
local V_1187 = options_38[V_1186]
if V_1187 then
return V_1187
end
local V_1188 = Lumia.draw and Lumia.draw.textWidth
local V_1189 = 0
if V_1188 then
V_1189 = V_1188(V_1184, V_1185)
end
if type(V_1189) ~= "number" or V_1189 <= 0 then
V_1189 = #V_1184 * (V_1185 * 0.45)
end
if V_1183 < 4096 then
options_38[V_1186] = V_1189
V_1183 = V_1183 + 1
end
return V_1189
end
end
local function F_26(V_1190)
return tostring(V_1190 or "")
end
local function F_27(V_1191, V_1192)
return #tostring(V_1191 or "") * ((tonumber(V_1192) or 14) * 0.52)
end
local function F_28(V_1193, V_1194)
if Lumia.state._diagNoDraw then
return
end
local draw_4 = Lumia.draw
local V_1195 = draw_4._rawRect or draw_4.rectFast or draw_4.rect
local V_1196 = draw_4._rawText or draw_4.textFast or draw_4.text
local V_1197 = draw_4._rawCircle
local V_1198 = draw_4._rawImage or draw_4.image
local V_1199 = draw_4._rawGif or draw_4.gif
local V_1200 = draw_4._rawLine
local V_1201 = draw_4._rawBorder
for V_1202 = 1, V_1194 do
local V_1203 = V_1193[V_1202]
local V_1204 = V_1203[1]
if V_1204 == 1 then
V_1195(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11]
)
elseif V_1204 == 2 then
if V_1203[11] then
V_1196(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11],
V_1203[12]
)
else
V_1196(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10]
)
end
elseif V_1204 == 3 and V_1197 then
V_1197(
V_1203[2],
V_1203[3],
V_1203[4],
90.0,
1.0,
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9] == true
)
elseif V_1204 == 4 and V_1198 then
local V_1205 = draw_4._imgFlagsOk
if V_1203[12] ~= nil and V_1205 ~= false then
if V_1205 == nil then
V_1205 = pcall(
V_1198,
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11],
V_1203[12]
)
draw_4._imgFlagsOk = V_1205
if not V_1205 then
V_1198(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11]
)
end
else
V_1198(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11],
V_1203[12]
)
end
else
V_1198(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11]
)
end
elseif V_1204 == 5 and V_1199 then
V_1199(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10],
V_1203[11]
)
elseif V_1204 == 7 and V_1200 then
V_1200(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1203[10]
)
elseif V_1204 == 8 and V_1201 then
local V_1206 = V_1203[10] or 0
V_1201(
V_1203[2],
V_1203[3],
V_1203[4],
V_1203[5],
V_1203[6],
V_1203[7],
V_1203[8],
V_1203[9],
V_1206,
V_1206 > 0.01 and 240 or 0,
V_1203[11] or 1
)
end
end
end
local function F_29(V_1207, V_1208, V_1209, V_1210)
local banner_2 = Lumia.banner
local V_1211 = ""
if banner_2 and banner_2.hasTexture == true and banner_2.fallback ~= true then
V_1211 = tostring(banner_2.name or "")
end
return tostring(Lumia.state._visOptVer or 0)
.. "|"
.. tostring(Lumia.state._uiDrawVer or 0)
.. "|"
.. tostring(V_1207)
.. "|"
.. tostring(V_1208 or 1)
.. "|"
.. tostring(V_1209 or 0)
.. "|"
.. tostring(V_1210 or 1)
.. "|"
.. V_1211
end
local function F_30(V_1212)
local V_1213 = Lumia.state._uiTabCache
local V_1214 = V_1213 and V_1213[V_1212]
if V_1214 and V_1214.list and (V_1214.n or 0) > 0 then
return V_1214
end
return nil
end
local function F_31(V_1215, V_1216, V_1217, V_1218, V_1219)
if not V_1215 or not V_1216 or (V_1217 or 0) <= 0 then
return
end
local V_1220 = Lumia.state._uiTabCache
if type(V_1220) ~= "table" then
V_1220 = {}
Lumia.state._uiTabCache = V_1220
Lumia.state._uiTabCacheN = 0
end
if not V_1220[V_1215] then
local V_1221 = (Lumia.state._uiTabCacheN or 0) + 1
if V_1221 > 24 then
V_1220 = {}
Lumia.state._uiTabCache = V_1220
V_1221 = 1
end
Lumia.state._uiTabCacheN = V_1221
end
local color_1 = nil
if V_1218 then
color_1 = {
x = V_1218.x,
cy = V_1218.cy,
listH = V_1218.listH,
w = V_1218.w,
h = V_1218.h,
rowH = V_1218.rowH,
r = V_1218.r,
g = V_1218.g,
b = V_1218.b,
a = V_1218.a,
}
end
local color_2 = nil
if V_1219 then
color_2 = {
trackX = V_1219.trackX,
trackY = V_1219.trackY,
trackW = V_1219.trackW,
trackH = V_1219.trackH,
thumbHClosed = V_1219.thumbHClosed,
thumbHOpen = V_1219.thumbHOpen,
count = V_1219.count,
act = V_1219.act,
tr = V_1219.tr,
tg = V_1219.tg,
tb = V_1219.tb,
ta = V_1219.ta,
r = V_1219.r,
g = V_1219.g,
b = V_1219.b,
a = V_1219.a,
}
end
V_1220[V_1215] = { list = V_1216, n = V_1217, sel = color_1, thumb = color_2 }
end
local V_1222 = false
local V_1223 = nil
local function F_32(V_1224, V_1225, V_1226, V_1227, V_1228, V_1229, V_1230, V_1231, V_1232, V_1233, V_1234, V_1235)
local state_13 = Lumia.state
if not state_13._uiRecOn then
return
end
local V_1236 = (state_13._uiRecN or 0) + 1
state_13._uiRecN = V_1236
local V_1237 = state_13._uiRec
local options_39 = V_1237[V_1236]
if not options_39 then
options_39 =
{ V_1224, V_1225, V_1226, V_1227, V_1228, V_1229, V_1230, V_1231, V_1232, V_1233, V_1234, V_1235 }
V_1237[V_1236] = options_39
return
end
options_39[1], options_39[2], options_39[3], options_39[4], options_39[5], options_39[6] =
V_1224, V_1225, V_1226, V_1227, V_1228, V_1229
options_39[7], options_39[8], options_39[9], options_39[10], options_39[11], options_39[12] =
V_1230, V_1231, V_1232, V_1233, V_1234, V_1235
end
local function F_33()
local state_14 = Lumia.state
local draw_5 = Lumia.draw
state_14._uiRec = {}
state_14._uiRecN = 0
state_14._uiRecOn = true
if V_1222 then
return
end
local V_1238 = {
rectFast = draw_5.rectFast,
rect = draw_5.rect,
textFast = draw_5.textFast,
text = draw_5.text,
circleFast = draw_5.circleFast,
circle = draw_5.circle,
image = draw_5.image,
gif = draw_5.gif,
line = draw_5.line,
border = draw_5.border,
}
V_1223 = V_1238
draw_5.rectFast = function(V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
F_32(1, V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
return V_1238.rectFast(V_1239, V_1240, V_1241, V_1242, V_1243, V_1244, V_1245, V_1246, V_1247, V_1248)
end
draw_5.rect = draw_5.rectFast
draw_5.textFast = function(
V_1249,
V_1250,
V_1251,
V_1252,
V_1253,
V_1254,
V_1255,
V_1256,
V_1257,
V_1258,
V_1259
)
F_32(2, V_1249, V_1250, V_1251, V_1252, V_1253, V_1254, V_1255, V_1256, V_1257, V_1258, V_1259)
return V_1238.textFast(
V_1249,
V_1250,
V_1251,
V_1252,
V_1253,
V_1254,
V_1255,
V_1256,
V_1257,
V_1258,
V_1259
)
end
draw_5.text = function(V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
F_32(2, V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
return V_1238.text(V_1260, V_1261, V_1262, V_1263, V_1264, V_1265, V_1266, V_1267, V_1268, V_1269, V_1270)
end
if V_1238.circleFast then
draw_5.circleFast = function(V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
F_32(3, V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
return V_1238.circleFast(V_1271, V_1272, V_1273, V_1274, V_1275, V_1276, V_1277, V_1278)
end
end
if V_1238.circle then
draw_5.circle = function(V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
F_32(3, V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
return V_1238.circle(V_1279, V_1280, V_1281, V_1282, V_1283, V_1284, V_1285, V_1286)
end
end
if V_1238.image then
draw_5.image = function(
V_1287,
V_1288,
V_1289,
V_1290,
V_1291,
V_1292,
V_1293,
V_1294,
V_1295,
V_1296,
V_1297
)
F_32(4, V_1287, V_1288, V_1289, V_1290, V_1291, V_1292, V_1293, V_1294, V_1295, V_1296, V_1297)
return V_1238.image(
V_1287,
V_1288,
V_1289,
V_1290,
V_1291,
V_1292,
V_1293,
V_1294,
V_1295,
V_1296,
V_1297
)
end
end
if V_1238.gif then
draw_5.gif = function(
V_1298,
V_1299,
V_1300,
V_1301,
V_1302,
V_1303,
V_1304,
V_1305,
V_1306,
V_1307,
V_1308
)
return V_1238.gif(
V_1298,
V_1299,
V_1300,
V_1301,
V_1302,
V_1303,
V_1304,
V_1305,
V_1306,
V_1307,
V_1308
)
end
end
if V_1238.line then
draw_5.line = function(V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
F_32(7, V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
return V_1238.line(V_1309, V_1310, V_1311, V_1312, V_1313, V_1314, V_1315, V_1316, V_1317)
end
end
if V_1238.border then
draw_5.border = function(V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
F_32(8, V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
return V_1238.border(V_1318, V_1319, V_1320, V_1321, V_1322, V_1323, V_1324, V_1325, V_1326, V_1327)
end
end
V_1222 = true
end
local function F_34()
local state_15 = Lumia.state
local V_1328 = state_15._uiRec
local V_1329 = state_15._uiRecN or 0
if not V_1328 or V_1329 <= 0 then
return
end
local V_1330 = 0
for V_1331 = 1, V_1329 do
local V_1332 = V_1328[V_1331]
local V_1333 = V_1332[1]
local V_1334 = true
if V_1333 == 1 then
if (V_1332[4] or 0) <= 0 or (V_1332[5] or 0) <= 0 or (V_1332[9] or 0) <= 0 then
V_1334 = false
end
elseif V_1333 == 2 then
local V_1335 = V_1332[2]
if V_1335 == nil or V_1335 == "" or (V_1332[10] or 0) <= 0 then
V_1334 = false
end
elseif V_1333 == 3 then
if (V_1332[4] or 0) <= 0 or (V_1332[8] or 0) <= 0 then
V_1334 = false
end
elseif V_1333 == 4 or V_1333 == 5 then
if (V_1332[5] or 0) <= 0 or (V_1332[6] or 0) <= 0 or (V_1332[10] or 0) <= 0 then
V_1334 = false
end
elseif V_1333 == 7 then
if (V_1332[9] or 0) <= 0 then
V_1334 = false
end
elseif V_1333 == 8 then
if (V_1332[4] or 0) <= 0 or (V_1332[5] or 0) <= 0 or (V_1332[9] or 0) <= 0 then
V_1334 = false
end
end
if V_1334 then
V_1330 = V_1330 + 1
if V_1330 ~= V_1331 then
V_1328[V_1330] = V_1332
end
end
end
for V_1336 = V_1330 + 1, V_1329 do
V_1328[V_1336] = nil
end
state_15._uiRecN = V_1330
end
local function F_35()
local state_16 = Lumia.state
state_16._uiRecOn = false
F_34()
end
local function F_36(V_1337, V_1338, V_1339, V_1340, V_1341, V_1342, V_1343, V_1344, V_1345, V_1346)
local draw_6 = Lumia.draw
local V_1347 = draw_6.rectFast or draw_6.rect
return V_1347(V_1337, V_1338, V_1339, V_1340, V_1341, V_1342, V_1343, V_1344, V_1345, V_1346)
end
local function F_37(V_1348, V_1349, V_1350, V_1351, V_1352, V_1353, V_1354, V_1355, V_1356)
local draw_7 = Lumia.draw
local V_1357 = draw_7.textFast or draw_7.text
return V_1357(V_1348, V_1349, V_1350, V_1351, V_1352, V_1353, V_1354, V_1355, V_1356)
end
local function F_38()
local V_1358 = Lumia.state._uiSel
if not V_1358 then
return
end
local anim_2 = Lumia.state.anim
local V_1359 = V_1358.targetY
local selY_1 = tonumber(anim_2.selY)
if selY_1 == nil or selY_1 < 0 then
selY_1 = V_1359
elseif V_1359 and math.abs(selY_1 - V_1359) > 0.35 then
selY_1 = Lumia.util.lerp(16, selY_1, V_1359)
if math.abs(selY_1 - V_1359) < 0.35 then
selY_1 = V_1359
end
else
selY_1 = V_1359
end
if selY_1 == V_1359 and Lumia.state._uiSelNeedRecolor then
Lumia.state._uiSelNeedRecolor = false
Lumia.state._uiDirty = true
end
anim_2.selY = selY_1
anim_2.selYTarget = V_1359
if not selY_1 then
return
end
local V_1360 = V_1358.cy
local V_1361 = V_1358.cy + V_1358.listH - V_1358.h - 1
if selY_1 < V_1360 then
selY_1 = V_1360
elseif selY_1 > V_1361 then
selY_1 = V_1361
end
local draw_8 = Lumia.draw
local V_1362 = draw_8._rawRect or draw_8.rectFast or draw_8.rect
V_1362(V_1358.x, selY_1 + 1, V_1358.w, V_1358.h, V_1358.r, V_1358.g, V_1358.b, V_1358.a, 5, 240)
end
local function F_39()
local V_1363 = Lumia.state._uiThumb
if not V_1363 or not V_1363.trackH or V_1363.trackH < 1 then
return
end
local draw_9 = Lumia.draw
local V_1364 = draw_9._rawRect or draw_9.rectFast or draw_9.rect
local V_1365 = Lumia.state.active
local V_1366 = V_1365 and Lumia.state.menus[V_1365]
local V_1367 = tonumber(V_1363.count) or 0
local V_1368 = tonumber(V_1363.act) or 1
if V_1366 then
local state_17 = Lumia.state
local V_1369 = state_17._visOptVer or 0
local V_1370 = V_1366.activeSubTab or 1
local V_1371 = V_1366.scroll or 0
local V_1372 = V_1366.SelectedFeature or 1
if
state_17._uiThumbCount ~= nil
and state_17._uiThumbVer == V_1369
and state_17._uiThumbKey == V_1365
and state_17._uiThumbSub == V_1370
and state_17._uiThumbScr == V_1371
and state_17._uiThumbSel == V_1372
then
V_1367 = state_17._uiThumbCount
V_1368 = state_17._uiThumbAct
else
local V_1373 = Lumia.api.visibleOptions(V_1365)
V_1367 = #V_1373
if V_1367 > 0 then
V_1368 = Lumia.api.activeIndex(V_1366, V_1373)
end
state_17._uiThumbVer = V_1369
state_17._uiThumbKey = V_1365
state_17._uiThumbSub = V_1370
state_17._uiThumbScr = V_1371
state_17._uiThumbSel = V_1372
state_17._uiThumbCount = V_1367
state_17._uiThumbAct = V_1368
end
end
V_1363.count = V_1367
V_1363.act = V_1368
V_1364(
V_1363.trackX,
V_1363.trackY,
V_1363.trackW,
V_1363.trackH,
V_1363.tr or 10,
V_1363.tg or 10,
V_1363.tb or 12,
V_1363.ta or 200,
2
)
if V_1367 <= 0 then
return
end
local anim_3 = Lumia.state.anim
local sideThumbGrow_1 = tonumber(anim_3.sideThumbGrow)
if sideThumbGrow_1 == nil then
sideThumbGrow_1 = 1.0
anim_3.sideThumbGrow = 1.0
elseif sideThumbGrow_1 < 0.995 then
sideThumbGrow_1 = Lumia.util.lerp(12, sideThumbGrow_1, 1.0)
if sideThumbGrow_1 > 0.995 then
sideThumbGrow_1 = 1.0
end
anim_3.sideThumbGrow = sideThumbGrow_1
else
sideThumbGrow_1 = 1.0
anim_3.sideThumbGrow = 1.0
end
local V_1374 = 1.0 - (1.0 - sideThumbGrow_1) * (1.0 - sideThumbGrow_1)
local V_1375 = V_1363.thumbHClosed or 16
local V_1376 = V_1363.thumbHOpen or V_1375
local V_1377 = V_1375 + (V_1376 - V_1375) * V_1374
local V_1378 = (V_1367 > 1) and ((V_1368 - 1) / (V_1367 - 1)) or 0
if V_1378 < 0 then
V_1378 = 0
elseif V_1378 > 1 then
V_1378 = 1
end
local V_1379 = V_1363.trackY + (V_1363.trackH - V_1377) * V_1378
local thumbY_1 = tonumber(anim_3.thumbY)
if thumbY_1 == nil or math.abs(thumbY_1 - V_1379) < 0.35 then
thumbY_1 = V_1379
else
thumbY_1 = Lumia.util.lerp(14, thumbY_1, V_1379)
if math.abs(thumbY_1 - V_1379) < 0.35 then
thumbY_1 = V_1379
end
end
anim_3.thumbY = thumbY_1
anim_3.thumbYTarget = V_1379
V_1364(
V_1363.trackX,
thumbY_1,
V_1363.trackW,
V_1377,
V_1363.r or 80,
V_1363.g or 80,
V_1363.b or 200,
V_1363.a or 250,
2
)
end
local function F_40()
local active_7 = Lumia.state.active
local V_1380 = active_7 and Lumia.state.menus[active_7]
local V_1381 = Lumia.state._uiSel
if V_1381 and V_1380 then
V_1381.targetY = V_1381.cy + ((V_1380.SelectedFeature or 1) - 1) * (V_1381.rowH or 33)
end
F_38()
F_39()
if Lumia.state.active == "Online" and Lumia.features.drawOnlinePlayerInfo then
local V_1382 = Lumia.state._uiPos
local V_1383 = Lumia.state._uiGeo
if V_1382 and V_1383 and V_1383.menu == "Online" then
pcall(Lumia.features.drawOnlinePlayerInfo, V_1382.mx, V_1382.my, V_1383.mw, V_1383.totalH)
end
end
end
function Lumia.render()
if Lumia.state.disconnectBanScreen then
Lumia.features.drawDisconnectBanScreen()
return
end
if Lumia.skin == "nova" then
if Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen() then
Lumia.colorPicker.draw()
end
return
end
local layout_3 = Lumia.layout
local colors_3 = Lumia.colors
if Lumia.open then
Lumia.state.anim.openA = 1
elseif (Lumia.state.anim.openA or 0) < 0.02 then
Lumia.state.anim.openA = 0
else
Lumia.state.anim.openA = 0
end
local V_1384 = Lumia.state.anim.openA
if V_1384 < 0.01 then
return
end
if
not Lumia.state._uiDirty
and (Lumia.state._uiRecN or 0) > 0
and Lumia.state.active ~= "Search"
and not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
and not Lumia.state.kbSideCombo
and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
then
local V_1385 = Lumia.state.menus[Lumia.state.active]
local V_1386 = V_1385
and Lumia.state._uiRecAtKey == Lumia.state.active
and Lumia.state._uiRecAtSel == (V_1385.SelectedFeature or 1)
and Lumia.state._uiRecAtScr == (V_1385.scroll or 0)
if V_1386 then
if Lumia.state._diagOn then
Lumia.state._diagL1 = (Lumia.state._diagL1 or 0) + 1
end
F_28(Lumia.state._uiRec, Lumia.state._uiRecN)
if Lumia.paintLiveBanner then
Lumia.paintLiveBanner()
end
F_40()
return
end
Lumia.state._uiDirty = true
end
Lumia.state.anim._widgetSlide = false
local draw_10 = Lumia.draw
if not draw_10 or not draw_10.rect or not draw_10.text then
return
end
local V_1387 = draw_10.fitText or F_26
local V_1388 = draw_10.estWidth or F_27
local lumiaMeasureGlyphs_1 = lumiaMeasureGlyphs
local alpha_1 = Lumia.util.alpha
local snap_4 = Lumia.util.snap
if not alpha_1 or not snap_4 then
return
end
local fonts_2 = Lumia.fonts
local V_1389 = Lumia.util._now or 0
local screenW_2, screenH_2
if Lumia.util.getScreenRes then
screenW_2, screenH_2 = Lumia.util.getScreenRes(Lumia.state._menuDrag and 0 or 2500)
else
screenW_2, screenH_2 = GetActiveScreenResolution()
end
if screenW_2 and screenW_2 > 0 then
screenW, screenH = screenW_2, screenH_2
end
local V_1390 = Lumia.state.active
local V_1391 = Lumia.state.menus[V_1390]
if not V_1391 then
return
end
if
Lumia.state._uiDirty
and V_1390 ~= "Search"
and not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
and not Lumia.state.kbSideCombo
and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
then
local V_1392 = F_29(V_1390, V_1391.activeSubTab, V_1391.scroll, V_1391.SelectedFeature)
local V_1393 = F_30(V_1392)
if V_1393 then
Lumia.state._uiRec = V_1393.list
Lumia.state._uiRecN = V_1393.n
Lumia.state._uiSel = V_1393.sel
if V_1393.thumb then
Lumia.state._uiThumb = V_1393.thumb
end
Lumia.state._uiDirty = false
if Lumia.state._diagOn then
Lumia.state._diagL2 = (Lumia.state._diagL2 or 0) + 1
end
F_28(V_1393.list, V_1393.n)
if Lumia.paintLiveBanner then
Lumia.paintLiveBanner()
end
F_40()
return
end
end
local V_1394 = (V_1391 and V_1391.activeSubTab) or 1
if Lumia.state.anim._sideGrowMenu ~= V_1390 or Lumia.state.anim._sideGrowSub ~= V_1394 then
Lumia.state.anim._sideGrowMenu = V_1390
Lumia.state.anim._sideGrowSub = V_1394
Lumia.state.anim.listReveal = nil
end
local V_1395 = Lumia.api.visibleOptions(V_1390)
local V_1396 = 1
local V_1397 = #V_1395
local V_1398 = Lumia.state._uiGeo
local V_1399 = V_1391.activeSubTab or 1
local V_1400 = Lumia.state._visOptVer or 0
local V_1401 = (V_1391.subtabs and #V_1391.subtabs) or 0
local maxRows_1, listH_1, hasSub_1, subH_1, bannerH_2, headerH_1, totalH_1, mw_2
if
V_1398
and V_1398.menu == V_1390
and V_1398.sub == V_1399
and V_1398.count == V_1397
and V_1398.ver == V_1400
and V_1398.maxV == layout_3.maxVisible
and V_1398.rowH == layout_3.rowH
and V_1398.w == layout_3.w
and V_1398.bH == layout_3.bannerH
and V_1398.fH == layout_3.footerH
and V_1398.subN == V_1401
then
maxRows_1, listH_1, hasSub_1, subH_1, bannerH_2, headerH_1, totalH_1, mw_2 =
V_1398.maxRows,
V_1398.listH,
V_1398.hasSub,
V_1398.subH,
V_1398.bannerH,
V_1398.headerH,
V_1398.totalH,
V_1398.mw
else
maxRows_1 = math.min(layout_3.maxVisible, math.max(1, V_1397))
listH_1 = maxRows_1 * layout_3.rowH
hasSub_1 = V_1391.subtabs and #V_1391.subtabs > 0
subH_1 = hasSub_1 and (layout_3.subtabH or 32) or 0
bannerH_2 = layout_3.bannerH or 96
headerH_1 = 0
totalH_1 = bannerH_2 + headerH_1 + subH_1 + listH_1 + layout_3.footerH
mw_2 = layout_3.w
Lumia.state._uiGeo = {
menu = V_1390,
sub = V_1399,
count = V_1397,
ver = V_1400,
maxV = layout_3.maxVisible,
rowH = layout_3.rowH,
w = layout_3.w,
bH = layout_3.bannerH,
fH = layout_3.footerH,
subN = V_1401,
maxRows = maxRows_1,
listH = listH_1,
hasSub = hasSub_1,
subH = subH_1,
bannerH = bannerH_2,
headerH = headerH_1,
totalH = totalH_1,
mw = mw_2,
}
end
local V_1402 = V_1391.SelectedFeature or 1
local V_1403 = Lumia.state.toggles and Lumia.state.toggles["ui_center"] == true
if Lumia.state._menuDrag or Lumia.state._menuPosUserSet then
V_1403 = false
layout_3.center = false
if Lumia.state.toggles then
Lumia.state.toggles["ui_center"] = false
end
end
local x_3, y_1
local V_1404 = Lumia.state._menuPosUserSet and 1 or 0
local V_1405 = V_1403 and 1 or 0
local V_1406 = Lumia.state._uiPos
if
not Lumia.state._menuDrag
and V_1406
and V_1406.sw == screenW
and V_1406.sh == screenH
and V_1406.mw == mw_2
and V_1406.th == totalH_1
and V_1406.c == V_1405
and V_1406.x == layout_3.x
and V_1406.y == layout_3.y
and V_1406.u == V_1404
then
x_3, y_1 = V_1406.mx, V_1406.my
layout_3.center = V_1403 == true
elseif V_1403 then
layout_3.center = true
x_3 = math.floor((screenW - mw_2) * 0.5 + 0.5)
y_1 = math.floor((screenH - totalH_1) * 0.5 + 0.5)
Lumia.state._uiPos = {
sw = screenW,
sh = screenH,
mw = mw_2,
th = totalH_1,
c = V_1405,
x = layout_3.x,
y = layout_3.y,
u = V_1404,
mx = x_3,
my = y_1,
}
else
layout_3.center = false
local x_4 = 48.0
local V_1407 = math.max(20.0, screenW - mw_2 - 48.0)
if not layout_3.x or layout_3.x < 0 then
layout_3.x = x_4
end
if not layout_3.y or layout_3.y < 0 then
layout_3.y = math.max(40.0, (screenH - totalH_1) * 0.5)
end
if not Lumia.state._menuPosUserSet and not Lumia.state._menuPosMigrated then
local V_1408 = (screenW - mw_2) * 0.5
if math.abs(layout_3.x - V_1408) < 60.0 or math.abs(layout_3.x - V_1407) < 60.0 then
layout_3.x = x_4
end
Lumia.state._menuPosMigrated = true
end
x_3, y_1 = layout_3.x, layout_3.y
Lumia.state._uiPos = {
sw = screenW,
sh = screenH,
mw = mw_2,
th = totalH_1,
c = V_1405,
x = layout_3.x,
y = layout_3.y,
u = V_1404,
mx = x_3,
my = y_1,
}
end
local V_1409 = (Lumia.util.cachedPrimary and Lumia.util.cachedPrimary()) or colors_3.primary
Lumia.state._framePri = V_1409
local V_1410 = V_1384
local V_1411 = (Lumia.util.menuBgMul()) or 1.0
x_3, y_1, mw_2 = snap_4(x_3), snap_4(y_1), snap_4(mw_2)
local V_1412 = Lumia.colorPicker and Lumia.colorPicker.isOpen()
local V_1413 = Lumia.util.keyDown(0x12)
if Lumia.prompt.isActive() then
V_1413 = false
end
local V_1414 = V_1413 or V_1412 or (Lumia.state._bindListWantCursor == true)
if Lumia.state._altCursorOn ~= V_1414 then
Lumia.state._altCursorOn = V_1414
local drawing_2 = SharkAPI.Drawing
if drawing_2 and drawing_2.SetCursorActive then
drawing_2.SetCursorActive(V_1414 == true)
if V_1414 and drawing_2.SetCursorIcon then
drawing_2.SetCursorIcon(0)
end
end
end
if V_1413 and not V_1412 then
local V_1415 = (GetControlNormal(0, 239) or 0.0) * screenW
local V_1416 = (GetControlNormal(0, 240) or 0.0) * screenH
if SharkAPI.GetCursorX and SharkAPI.GetCursorY then
local V_1417, V_1418 = SharkAPI.GetCursorX(), SharkAPI.GetCursorY()
if type(V_1417) == "number" and type(V_1418) == "number" then
V_1415, V_1416 = V_1417, V_1418
end
end
local V_1419 = IsDisabledControlPressed(0, 24) or IsControlPressed(0, 24) or (SharkAPI.IsKeyPressed(0x01))
local V_1420 = IsDisabledControlJustPressed(0, 24)
or IsControlJustPressed(0, 24)
or (SharkAPI.IsKeyJustPressed(0x01))
if not Lumia.state._playerInfoDrag or not Lumia.state._playerInfoDrag.active then
if not (Lumia.state._bindListDrag and Lumia.state._bindListDrag.active) then
if
V_1420
and V_1415 >= x_3
and V_1415 <= x_3 + mw_2
and V_1416 >= y_1
and V_1416 <= y_1 + bannerH_2
then
Lumia.state._menuDrag = { offX = V_1415 - x_3, offY = V_1416 - y_1 }
end
end
if not V_1419 then
Lumia.state._menuDrag = nil
end
if Lumia.state._menuDrag then
x_3 = V_1415 - (Lumia.state._menuDrag.offX or 0)
y_1 = V_1416 - (Lumia.state._menuDrag.offY or 0)
if x_3 < 0 then
x_3 = 0
end
if y_1 < 0 then
y_1 = 0
end
if x_3 + mw_2 > screenW then
x_3 = screenW - mw_2
end
if y_1 + bannerH_2 > screenH then
y_1 = screenH - bannerH_2
end
layout_3.center = false
Lumia.state._menuPosUserSet = true
if Lumia.state.toggles then
Lumia.state.toggles["ui_center"] = false
end
layout_3.x, layout_3.y = x_3, y_1
Lumia.state.sliders = Lumia.state.sliders or {}
Lumia.state.sliders["menux"] = x_3
Lumia.state.sliders["menuy"] = y_1
end
end
else
Lumia.state._menuDrag = nil
end
x_3, y_1 = snap_4(x_3), snap_4(y_1)
local V_1421 = not (Lumia.colorPicker and Lumia.colorPicker.isOpen and Lumia.colorPicker.isOpen())
and not (menu.F.pedPreviewWanted and menu.F.pedPreviewWanted())
and not (Lumia.state.kbSideCombo and not Lumia.state.kbSideCombo.closing)
and V_1390 ~= "Search"
if V_1421 then
local anim_4 = Lumia.state.anim
if anim_4.selY and anim_4.selYTarget and math.abs(anim_4.selY - anim_4.selYTarget) > 0.6 then
V_1421 = false
end
end
if V_1421 and (Lumia.state._uiRecN or 0) > 0 then
local V_1422 = x_3 * 3
+ y_1 * 5
+ (V_1391.scroll or 0) * 13
+ (V_1391.SelectedFeature or 1) * 17
+ (V_1391.activeSubTab or 1) * 19
local V_1423 = (V_1391.scroll or 0) + 1
local toggles_2 = Lumia.state.toggles
local sliders_1 = Lumia.state.sliders
local combos_1 = Lumia.state.combos
for V_1424 = V_1423, V_1423 + maxRows_1 - 1 do
local V_1425 = V_1395[V_1424]
if V_1425 then
if V_1425.radarDynamic or V_1425.onlineDynamic or V_1425.searchField then
V_1421 = false
break
end
local V_1426 = V_1425.id or V_1425.toggle or V_1425.sld
local V_1427 = V_1426
and Lumia.state.anim
and Lumia.state.anim.check
and Lumia.state.anim.check[V_1426]
if V_1427 and V_1427 ~= 0 and V_1427 ~= 1 then
V_1421 = false
break
end
if V_1426 then
if toggles_2 and toggles_2[V_1426] then
V_1422 = V_1422 + V_1424
end
if sliders_1 and sliders_1[V_1426] then
V_1422 = V_1422 + sliders_1[V_1426]
end
local V_1428 = combos_1 and combos_1[V_1426]
if V_1428 then
V_1422 = V_1422 + (V_1428.index or 0) * 23
end
end
end
end
if V_1421 and Lumia.state._uiSig == V_1422 and Lumia.state._uiSigKey == V_1390 then
if Lumia.state._diagOn then
Lumia.state._diagL3 = (Lumia.state._diagL3 or 0) + 1
end
F_28(Lumia.state._uiRec, Lumia.state._uiRecN)
if Lumia.paintLiveBanner then
Lumia.paintLiveBanner()
end
F_40()
return
end
if V_1421 then
Lumia.state._uiSig = V_1422
Lumia.state._uiSigKey = V_1390
end
end
if Lumia.state._diagOn then
Lumia.state._diagFull = (Lumia.state._diagFull or 0) + 1
Lumia.state._diagFullTab = tostring(V_1390)
end
F_33()
local V_1429 = true
if Lumia.util.uiDecorLite then
V_1429 = Lumia.util.uiDecorLite()
end
local radius_2 = tonumber(layout_3.radius) or 0.0
local V_1430 = Lumia.state.sliders and Lumia.state.sliders["menu:cornerRadius"]
if V_1430 ~= nil then
radius_2 = tonumber(V_1430) or radius_2
layout_3.radius = radius_2
end
if radius_2 < 0 then
radius_2 = 0
elseif radius_2 > 20 then
radius_2 = 20
end
local V_1431 = 48
local V_1432 = 192
local V_1433 = 240
local V_1434, V_1435, V_1436 = colors_3.bg[1] or 15, colors_3.bg[2] or 15, colors_3.bg[3] or 20
local V_1437 = alpha_1(math.floor(255 * V_1411 + 0.5), V_1410)
F_36(x_3, y_1, mw_2, totalH_1, V_1434, V_1435, V_1436, V_1437, 0)
if
Lumia.banner
and Lumia.banner._gifHold ~= true
and not Lumia.banner.loading
and (not Lumia.banner.ready or Lumia.banner.fallback == true or Lumia.banner.hasTexture ~= true)
then
local V_1438 = V_1389
local V_1439 = tonumber(Lumia.state._bannerUiRetryAt) or 0
if V_1438 >= V_1439 then
Lumia.state._bannerUiRetryAt = V_1438 + 5000
local V_1440 = Lumia.state.allowPanelAutoBanner == true
and (
(
type(Lumia.state.panelBannerFile) == "string"
and Lumia.state.panelBannerFile:find("custom_", 1, true)
)
or (
type(Lumia.state.panelAutoInjectLayout) == "table"
and (Lumia.state.panelAutoInjectLayout.bannerFile or Lumia.state.panelAutoInjectLayout.file)
)
)
if V_1440 and Lumia.features and Lumia.features.reapplyPanelAutoInjectBanner then
pcall(Lumia.features.reapplyPanelAutoInjectBanner, 0)
else
if Lumia.features and Lumia.features.ensureLocalBannerBootstrap then
pcall(Lumia.features.ensureLocalBannerBootstrap, "ui-draw")
end
if Lumia.loadBanner then
pcall(Lumia.loadBanner)
end
if
(not Lumia.banner.ready or Lumia.banner.hasTexture ~= true)
and Lumia.applyBannerFallback
and not V_1440
then
pcall(Lumia.applyBannerFallback, tonumber(Lumia.state.bannerIndex) or 1)
end
end
end
end
local V_1441 = Lumia.banner
and Lumia.banner.ready
and Lumia.banner.hasTexture == true
and type(Lumia.banner.name) == "string"
and Lumia.banner.name ~= ""
and Lumia.banner.fallback ~= true
local V_1442 = false
if not V_1441 then
local V_1443 = colors_3.bannerFallback or { 10, 10, 14, 255 }
F_36(
x_3,
y_1,
mw_2,
bannerH_2,
V_1443[1],
V_1443[2],
V_1443[3],
alpha_1(math.floor(255 * V_1411 + 0.5), V_1410),
radius_2,
V_1431
)
end
if Lumia.banner and Lumia.banner.ready then
local V_1444 = alpha_1(255, V_1410)
if
Lumia.banner.hasTexture == true
and type(Lumia.banner.name) == "string"
and Lumia.banner.name ~= ""
and Lumia.banner.fallback ~= true
then
local V_1445 = Lumia.banner.isGif == true
if Lumia.banner._gifChecked ~= Lumia.banner.name then
Lumia.banner._gifChecked = Lumia.banner.name
if Lumia.detectBannerIsGif then
local V_1446, V_1447 = pcall(Lumia.detectBannerIsGif, Lumia.banner.file, Lumia.banner.url, {})
if V_1446 and V_1447 == true then
Lumia.banner.isGif = true
V_1445 = true
end
end
end
local name_1 = Lumia.banner.name
local V_1448 = V_1445
and (Lumia.banner.gifNative == true or Lumia.banner._gifReady == true)
and Lumia.draw.gif
and Lumia.state.toggles["menu:bannerAnimated"] ~= false
if V_1448 then
V_1442 = Lumia.draw.gif(
Lumia.BANNER_GIF_TEX,
x_3,
y_1,
mw_2,
bannerH_2,
255,
255,
255,
V_1444,
radius_2,
V_1431
)
end
if
not V_1442
and Lumia.draw.image
and type(name_1) == "string"
and name_1 ~= ""
and name_1 ~= Lumia.BANNER_GIF_TEX
then
V_1442 =
Lumia.draw.image(name_1, x_3, y_1, mw_2, bannerH_2, 255, 255, 255, V_1444, radius_2, V_1431)
end
end
end
if
not V_1442
and not (
Lumia.banner
and (Lumia.banner._gifHold == true or Lumia.banner._gifReady == true or Lumia.banner.gifNative == true)
)
then
if Lumia.drawMenuBannerFallback then
Lumia.drawMenuBannerFallback(x_3, y_1, mw_2, bannerH_2, V_1409, V_1410, V_1411)
end
end
if
Lumia.banner
and Lumia.draw.gif
and (Lumia.banner._gifHold == true or Lumia.banner._gifReady == true or Lumia.banner.gifNative == true)
then
local V_1449 = Lumia.banner.gifTex or Lumia.BANNER_GIF_TEX
Lumia.draw.gif(V_1449, x_3, y_1, mw_2, bannerH_2, 255, 255, 255, alpha_1(255, V_1410), radius_2)
V_1442 = true
end
local V_1450 = y_1 + bannerH_2
local V_1451 = layout_3.pad or 14
local V_1452 = layout_3.rightPad or 14
if hasSub_1 then
local V_1453 = #V_1391.subtabs
local V_1454 = Lumia.util.clamp(V_1391.activeSubTab or 1, 1, V_1453)
local V_1455 = 16
local V_1456 = x_3 + V_1455
local V_1457 = math.max(40, mw_2 - V_1455 * 2)
local V_1458 = colors_3.subtabBg or { 12, 12, 14 }
F_36(
x_3,
V_1450,
mw_2,
subH_1,
V_1458[1],
V_1458[2],
V_1458[3],
alpha_1(math.floor(248 * V_1411 + 0.5), V_1410),
0
)
local small_1 = fonts_2.small
local V_1459 = 14
local V_1460 = 6
local V_1461 = 2.0
local V_1462 = math.min(subH_1 - 10, small_1 + V_1460 * 2)
local V_1463 = V_1450 + (subH_1 - V_1462) * 0.5
local V_1464 = V_1462 * 0.5
local options_40, options_41 = {}, {}
local V_1465 = 0
for V_1466 = 1, V_1453 do
local V_1467 = tostring(V_1391.subtabs[V_1466] or "")
local V_1468 = (Lumia.draw.textWidth and Lumia.draw.textWidth(V_1467, small_1))
or (V_1388 and V_1388(V_1467, small_1))
or (#V_1467 * 6.5)
options_40[V_1466] = math.max(32, V_1468 + V_1459 * 2)
V_1465 = V_1465 + options_40[V_1466]
end
V_1465 = V_1465 + V_1461 * math.max(0, V_1453 - 1)
if V_1465 > V_1457 then
local V_1469 = V_1457 / V_1465
for V_1470 = 1, V_1453 do
options_40[V_1470] = options_40[V_1470] * V_1469
end
elseif V_1465 < V_1457 and V_1453 > 0 then
local V_1471 = (V_1457 - V_1465) / V_1453
for V_1472 = 1, V_1453 do
options_40[V_1472] = options_40[V_1472] + V_1471
end
end
local V_1473 = V_1456
for V_1474 = 1, V_1453 do
options_41[V_1474] = V_1473
V_1473 = V_1473 + options_40[V_1474] + V_1461
end
local subtabDrawX_1 = options_41[V_1454] or V_1456
local subtabDrawW_1 = options_40[V_1454] or 40
local anim_5 = Lumia.state.anim
anim_5.subtabDrawX = subtabDrawX_1
anim_5.subtabDrawW = subtabDrawW_1
anim_5._subMenuKey = V_1390
anim_5._subIdx = V_1454
anim_5.subtabX, anim_5.subtabW = subtabDrawX_1, subtabDrawW_1
local V_1475, V_1476 = snap_4(subtabDrawX_1), snap_4(subtabDrawW_1)
local V_1477 = snap_4(V_1463)
F_36(
V_1475,
V_1477,
V_1476,
V_1462,
V_1409[1] or 55,
V_1409[2] or 120,
V_1409[3] or 220,
alpha_1(235, V_1410),
V_1464
)
local V_1478 = V_1477 + (V_1462 - small_1) * 0.5
for V_1479 = 1, V_1453 do
local V_1480 = V_1479 == V_1454
local V_1481 = tostring(V_1391.subtabs[V_1479] or "")
local V_1482, V_1483, V_1484 = 130, 130, 138
if V_1480 then
V_1482, V_1483, V_1484 = 255, 255, 255
end
local V_1485 = (options_41[V_1479] or V_1456) + (options_40[V_1479] or 40) * 0.5
F_37(
V_1481,
V_1485,
V_1478,
small_1,
true,
V_1482,
V_1483,
V_1484,
alpha_1(V_1480 and 255 or 165, V_1410)
)
end
if V_1414 and not Lumia.state.isBinding and not Lumia.state._menuDrag then
local V_1486 = SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01)
if V_1486 and SharkAPI.GetCursorX and SharkAPI.GetCursorY then
local V_1487 = SharkAPI.GetCursorX()
local V_1488 = SharkAPI.GetCursorY()
if
type(V_1487) == "number"
and type(V_1488) == "number"
and V_1488 >= V_1450
and V_1488 <= V_1450 + subH_1
then
local activeSubTab_2 = V_1454
for V_1489 = 1, V_1453 do
local V_1490 = options_41[V_1489] or 0
local V_1491 = V_1490 + (options_40[V_1489] or 0)
if V_1487 >= V_1490 and V_1487 <= V_1491 then
activeSubTab_2 = V_1489
break
end
end
if activeSubTab_2 ~= V_1454 then
V_1391.activeSubTab = activeSubTab_2
V_1391.scroll = 0
V_1391.SelectedFeature = 1
if Lumia.state.anim then
Lumia.state.anim.subtabDrawX = nil
Lumia.state.anim._subIdx = nil
end
Lumia.state._tabLabelCache = nil
Lumia.api.invalidateVisibleOptions()
if Lumia.api.beginSubTabPass then
Lumia.api.beginSubTabPass(activeSubTab_2 > V_1454 and 1 or -1)
end
if Lumia.sound and Lumia.sound.horiz then
Lumia.sound.horiz()
end
end
end
end
end
V_1450 = V_1450 + subH_1
elseif headerH_1 > 0 then
local V_1492 = tostring(V_1391.title or V_1390)
if V_1391.parent and Lumia.state.menus[V_1391.parent] then
local V_1493 = tostring(Lumia.state.menus[V_1391.parent].title or V_1391.parent)
V_1492 = V_1493 .. " > " .. V_1492
end
F_36(x_3, V_1450, mw_2, headerH_1, 12, 12, 14, alpha_1(math.floor(255 * V_1411 + 0.5), V_1410), 0)
F_36(x_3 + 8, V_1450 + headerH_1 - 1, mw_2 - 16, 1, 255, 255, 255, alpha_1(40, V_1410), 0)
F_37(
V_1492,
x_3 + mw_2 * 0.5,
V_1450 + (headerH_1 - fonts_2.small) * 0.5,
fonts_2.small,
true,
245,
245,
250,
alpha_1(255, V_1410)
)
V_1450 = V_1450 + headerH_1
end
local scroll_5 = math.max(0, V_1397 - maxRows_1)
if (V_1391.scroll or 0) > scroll_5 then
V_1391.scroll = scroll_5
elseif (V_1391.scroll or 0) < 0 then
V_1391.scroll = 0
end
V_1396 = Lumia.api.activeIndex(V_1391, V_1395)
V_1402 = V_1391.SelectedFeature or 1
local selY_2 = V_1450 + (V_1402 - 1) * layout_3.rowH
local V_1494 = tonumber(Lumia.state.anim.selY) or -1
if V_1494 < 0 or math.abs(V_1494 - selY_2) < 0.3 then
Lumia.state.anim.selY = selY_2
elseif math.abs(V_1494 - selY_2) > (layout_3.rowH * 8.0) then
if V_1494 > selY_2 then
Lumia.state.anim.selY = selY_2 + layout_3.rowH * 2
else
Lumia.state.anim.selY = selY_2 - layout_3.rowH * 2
end
Lumia.state.anim.selY = Lumia.util.lerp(16, Lumia.state.anim.selY, selY_2)
else
Lumia.state.anim.selY = Lumia.util.lerp(16, V_1494, selY_2)
if math.abs(Lumia.state.anim.selY - selY_2) < 0.3 then
Lumia.state.anim.selY = selY_2
end
end
Lumia.state.anim.selYTarget = selY_2
Lumia.state._uiSel = {
x = x_3 + 2,
cy = V_1450,
listH = listH_1,
w = mw_2 - 4,
h = layout_3.rowH - 2,
rowH = layout_3.rowH,
targetY = selY_2,
r = V_1409[1],
g = V_1409[2],
b = V_1409[3],
a = alpha_1(32, listGa),
}
Lumia.state.anim.scrollY = V_1391.scroll * layout_3.rowH
local V_1495 = 0
local V_1496 = 1
local V_1497 = 4
local V_1498 = V_1497
local selPop_1 = Lumia.state.anim.selPop
if selPop_1 and selPop_1.start then
local V_1499 = (V_1389 - (selPop_1.start or 0)) / math.max(1, selPop_1.dur or 160)
if V_1499 >= 1 then
Lumia.state.anim.selPop = nil
V_1498 = V_1497
else
if V_1499 < 0 then
V_1499 = 0
end
V_1498 = V_1497 * Lumia.util.easeOutCubic(V_1499)
end
end
local V_1500 = V_1410 * V_1496
local V_1501 = alpha_1(255, V_1500)
local V_1502 = alpha_1(240, V_1500)
local V_1503 = alpha_1(235, V_1500)
local V_1504 = alpha_1(220, V_1500)
local V_1505 = alpha_1(205, V_1500)
local V_1506 = alpha_1(200, V_1500)
local V_1507 = alpha_1(170, V_1500)
local V_1508 = alpha_1(150, V_1500)
local V_1509 = alpha_1(55, V_1500)
local V_1510 = (V_1391.scroll or 0) + 1
local toggleW_1 = (Lumia.draw.widgets and Lumia.draw.widgets.size and Lumia.draw.widgets.size.toggleW) or 34
local toggleH_1 = (Lumia.draw.widgets and Lumia.draw.widgets.size and Lumia.draw.widgets.size.toggleH) or 16
if V_1414 and not Lumia.state.isBinding and not Lumia.state._menuDrag then
local V_1511 = SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x01)
if V_1511 and SharkAPI.GetCursorX and SharkAPI.GetCursorY then
local V_1512 = SharkAPI.GetCursorX()
local V_1513 = SharkAPI.GetCursorY()
if
type(V_1512) == "number"
and type(V_1513) == "number"
and V_1512 >= x_3
and V_1512 <= x_3 + mw_2
and V_1513 >= V_1450
and V_1513 <= V_1450 + listH_1
then
local V_1514 = math.floor((V_1513 - V_1450) / (layout_3.rowH or 28))
local V_1515 = V_1510 + V_1514
if V_1515 >= 1 and V_1515 <= V_1397 and V_1395[V_1515] and V_1395[V_1515].type ~= "divi" then
V_1391.SelectedFeature = V_1514 + 1
Lumia.api.handleSelect()
end
end
end
end
local V_1516 = V_1495 ~= 0
if V_1516 then
Lumia.draw.clipPush(x_3, V_1450, mw_2, listH_1)
end
for V_1517 = 0, maxRows_1 - 1 do
local V_1518 = V_1510 + V_1517
if V_1518 >= 1 and V_1518 <= V_1397 then
local V_1519 = V_1395[V_1518]
local V_1520 = V_1518 == V_1396
local V_1521 = x_3 + V_1495 + (V_1520 and V_1498 or 0)
local V_1522 = V_1450 + V_1517 * layout_3.rowH
local textSel_1 = V_1520 and colors_3.textSel
or (V_1519.type == "divi" and colors_3.textDim or colors_3.text)
if type(V_1519.textRgb) == "table" then
textSel_1 = V_1519.textRgb
elseif type(V_1519.getTextRgb) == "function" then
local V_1523, V_1524 = pcall(V_1519.getTextRgb)
if V_1523 and type(V_1524) == "table" then
textSel_1 = V_1524
end
end
local V_1525 = V_1521 + V_1451
local V_1526 = V_1522 + (layout_3.rowH - fonts_2.size) * 0.5 - 1
local V_1527 = V_1521 + mw_2 - V_1452
local V_1528 = V_1500
local type_2 = V_1519.type
local V_1529 = false
if
(type_2 == "combo" or type_2 == "checkcombo")
and V_1519._uiValSrc
and V_1519._uiValShow
and V_1519._uiValBoxW
then
local V_1530 = V_1519.id or V_1519.toggle
local V_1531 = V_1530 and Lumia.state.combos and Lumia.state.combos[V_1530]
local V_1532 = (V_1531 and V_1531.list and V_1531.list[V_1531.index]) or "..."
V_1529 = V_1519._uiValSrc == kbPrettyComboLabel(V_1532)
end
local V_1533 = type_2 ~= "divi"
and V_1519._uiFitLabel
and V_1519._uiFitSrc == V_1519.text
and not V_1519.searchField
and not V_1519.faIcons
and not V_1519.icon
and (type_2 == "button" or type_2 == "submenu" or type_2 == "checkbox" or type_2 == "checkslider")
if V_1533 then
F_37(
V_1519._uiFitLabel,
V_1525,
V_1526,
fonts_2.size,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1501
)
if type_2 == "submenu" then
F_37(
">>",
V_1527 - 18,
V_1526 - 1,
fonts_2.size,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
elseif type_2 == "checkbox" or type_2 == "checkslider" then
local V_1534 = V_1519.id or V_1519.toggle
if V_1534 then
Lumia.draw.widgets.toggle(
V_1527 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1534] == true,
V_1534,
V_1528,
V_1520
)
end
end
elseif
V_1529
and V_1519._uiFitLabel
and V_1519._uiFitSrc == V_1519.text
and not V_1519.faIcons
and not V_1519.searchField
then
F_37(
V_1519._uiFitLabel,
V_1525,
V_1526,
fonts_2.size,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1501
)
local V_1535 = V_1519._uiValBoxW
local V_1536 = V_1519._uiBoxH or 22
local V_1537 = V_1527 - V_1535
if type_2 == "checkcombo" then
V_1537 = V_1537 - toggleW_1 - 10
end
local V_1538 = V_1522 + (layout_3.rowH - V_1536) * 0.5
local V_1539 = V_1520
F_36(
V_1537,
V_1538,
V_1535,
V_1536,
V_1539 and 36 or 26,
V_1539 and 36 or 26,
V_1539 and 40 or 30,
V_1502,
5
)
F_37(
V_1519._uiValShow,
V_1537 + 10,
V_1526,
fonts_2.size,
false,
V_1539 and 245 or 190,
V_1539 and 245 or 190,
V_1539 and 248 or 195,
V_1501
)
if type_2 == "checkcombo" then
local V_1540 = V_1519.id or V_1519.toggle
if V_1540 then
Lumia.draw.widgets.toggle(
V_1527 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1540] == true,
V_1540,
V_1528,
V_1520
)
end
end
elseif
type_2 == "slider"
and V_1519.id
and V_1519._uiFitLabel
and V_1519._uiFitSrc == V_1519.text
and not V_1519.faIcons
and not V_1519.searchField
and not V_1519.icon
and type(V_1519.closetComp) ~= "table"
then
F_37(
V_1519._uiFitLabel,
V_1525,
V_1526,
fonts_2.size,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1501
)
local V_1541 = Lumia.state.sliders[V_1519.id] or V_1519.min or 0
local V_1542 = tostring(math.floor(V_1541 + 0.5))
local V_1543 = 32.0
local V_1544 = 8.0
local V_1545 = V_1527 - V_1543
local V_1546 = 84.0
local V_1547 = V_1545 - V_1544 - V_1546
local V_1548 = V_1525 + (V_1519._uiFitW or 40)
if V_1547 < V_1548 then
V_1546 = math.max(56.0, V_1545 - V_1544 - V_1548)
V_1547 = V_1545 - V_1544 - V_1546
end
local V_1549 = V_1519._uiValW
if V_1519._uiValSrc ~= V_1542 then
V_1549 = (V_1388 and V_1388(V_1542, fonts_2.small)) or (#V_1542 * 6)
V_1519._uiValSrc = V_1542
V_1519._uiValSize = fonts_2.small
V_1519._uiValW = V_1549
end
F_37(
V_1542,
V_1545 + (V_1543 - (V_1549 or 24)) * 0.5,
V_1526 + 1,
fonts_2.small,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
Lumia.draw.widgets.slider(
V_1547,
V_1522 + layout_3.rowH * 0.5,
V_1546,
V_1541,
V_1519.min or 0,
V_1519.max or 100,
V_1519.id,
V_1520,
V_1528
)
elseif type_2 == "divi" then
if V_1519.text ~= "" then
local small_2 = fonts_2.small
local V_1550 = V_1519._divW
if not V_1550 or V_1519._divSrc ~= V_1519.text then
local V_1551 = tostring(V_1519.text or "")
V_1550 = (V_1388 and V_1388(V_1551, small_2)) or (#V_1551 * 7)
V_1519._divSrc = V_1519.text
V_1519._divW = V_1550
V_1519._divLabel = V_1551
end
local V_1552 = 12.0
local V_1553 = V_1522 + layout_3.rowH * 0.5
local V_1554 = V_1521 + mw_2 * 0.5
local V_1555 = V_1554 - V_1550 * 0.5 - V_1552
local V_1556 = V_1554 + V_1550 * 0.5 + V_1552
local V_1557 = V_1521 + V_1451
local V_1558 = V_1521 + mw_2 - V_1452
if V_1555 > V_1557 + 8 then
F_36(V_1557, V_1553, V_1555 - V_1557, 1, 255, 255, 255, alpha_1(28, V_1528), 0)
end
if V_1558 > V_1556 + 8 then
F_36(V_1556, V_1553, V_1558 - V_1556, 1, 255, 255, 255, alpha_1(28, V_1528), 0)
end
F_37(
V_1519._divLabel or V_1519.text,
V_1554,
V_1553 - small_2 * 0.5,
small_2,
true,
168,
168,
174,
V_1501
)
else
F_36(
V_1521 + V_1451,
V_1522 + layout_3.rowH * 0.5,
mw_2 - V_1451 - V_1452,
1,
255,
255,
255,
alpha_1(22, V_1528),
0
)
end
else
local V_1559 = tostring(V_1519.text or "")
local V_1560 = false
local V_1561 = false
if V_1519.searchField then
local V_1562 = tostring(Lumia.state.menuSearchQuery or "")
V_1561 = (math.floor(V_1389 / 430) % 2) == 0
if V_1562 == "" then
V_1559 = V_1561 and "|Search..." or "Search..."
V_1560 = true
textSel_1 = colors_3.textDim or textSel_1
else
V_1559 = V_1561 and (V_1562 .. "|") or V_1562
end
end
if V_1519.icon == "search" and Lumia.draw.circle and Lumia.draw.line then
local V_1563 = V_1525 + 5
local V_1564 = V_1522 + layout_3.rowH * 0.5 - 1
Lumia.draw.circle(V_1563, V_1564, 4.0, textSel_1[1], textSel_1[2], textSel_1[3], V_1503, false)
Lumia.draw.line(
V_1563 + 3,
V_1564 + 3,
V_1563 + 7,
V_1564 + 7,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1503,
1.5
)
V_1525 = V_1525 + 19
end
local V_1565 = V_1527 - 8
if
(V_1519.type == "checkbox" or V_1519.type == "checkslider" or V_1519.type == "checkcombo")
and (V_1519.id or V_1519.toggle)
then
V_1565 = V_1527 - toggleW_1 - 12
elseif V_1519.type == "submenu" then
V_1565 = V_1527 - 22
elseif V_1519.type == "combo" or V_1519.type == "slider" then
V_1565 = V_1527 - 90
end
local faIcons_1 = V_1519.faIcons
if V_1519.radarDynamic and V_1519.radarVeh and menu.F.radarVehicleFaIcons then
if (V_1519._faAt or 0) + 250 <= V_1389 then
faIcons_1 = menu.F.radarVehicleFaIcons(V_1519.radarVeh)
V_1519.faIcons = faIcons_1
V_1519._occ = menu.F.radarVehicleOccupied and menu.F.radarVehicleOccupied(V_1519.radarVeh)
or false
V_1519._faAt = V_1389
end
end
if V_1519.onlineDynamic and V_1519.id and menu.F.onlinePlayerFaIcons then
if (V_1519._faAt or 0) + 250 <= V_1389 then
local V_1566 = tonumber(tostring(V_1519.id):match("online:player:(%d+)"))
if V_1566 then
faIcons_1 = menu.F.onlinePlayerFaIcons(V_1566)
V_1519.faIcons = faIcons_1
end
V_1519._faAt = V_1389
end
end
local V_1567 = (type(faIcons_1) == "table" and #faIcons_1) or 0
local V_1568 = V_1567 > 0 and (V_1567 * 16 + 8) or 0
local V_1569 = (not V_1519.searchField) and tostring(V_1519.searchCat or "") or ""
local V_1570 = 0
if V_1569 ~= "" then
if V_1519._uiCatStr == V_1569 and V_1519._uiCatSize == fonts_2.small then
V_1570 = V_1519._uiCatW or 0
else
V_1570 = lumiaMeasureGlyphs_1(V_1569, fonts_2.small) + 10
V_1519._uiCatStr = V_1569
V_1519._uiCatSize = fonts_2.small
V_1519._uiCatW = V_1570
end
end
local V_1571 = math.max(24, V_1565 - V_1525 - V_1570 - V_1568)
local V_1572 = fonts_2.size
if not V_1519.searchField then
local V_1573 = Lumia.state._visOptVer or 0
if
V_1519._uiFitVer == V_1573
and V_1519._uiFitMax == V_1571
and V_1519._uiFitSrc == V_1559
and V_1519._uiFitSize == V_1572
then
V_1559 = V_1519._uiFitLabel or V_1559
else
if V_1387 then
V_1559 = V_1387(V_1559, V_1572, V_1571)
else
local V_1574 = (V_1388 and V_1388(V_1559, V_1572)) or (#V_1559 * 7)
if V_1574 > V_1571 and #V_1559 > 4 then
local V_1575 = math.max(4, math.floor(V_1571 / 7) - 2)
V_1559 = V_1559:sub(1, V_1575) .. ".."
end
end
V_1519._uiFitVer = V_1573
V_1519._uiFitMax = V_1571
V_1519._uiFitSrc = tostring(V_1519.text or "")
V_1519._uiFitSize = V_1572
V_1519._uiFitLabel = V_1559
V_1519._uiFitW = lumiaMeasureGlyphs_1(V_1559, V_1572)
end
end
if V_1519.searchField and Lumia.state.menuSearchSelAll and not V_1560 then
local V_1576 = tostring(Lumia.state.menuSearchQuery or "")
local V_1577 = lumiaMeasureGlyphs_1(V_1576, V_1572)
F_36(
V_1525 - 2,
V_1522 + 4,
math.max(8, V_1577 + 4),
layout_3.rowH - 8,
V_1409[1],
V_1409[2],
V_1409[3],
V_1509,
3
)
end
F_37(
V_1559,
V_1525,
V_1526,
V_1572,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1560 and V_1507 or V_1501
)
local V_1578 = V_1525 + (V_1519._uiFitW or lumiaMeasureGlyphs_1(V_1559, V_1572)) + 8
if V_1569 ~= "" then
local V_1579 = V_1578
if V_1579 + V_1570 <= V_1565 + 2 then
F_37(V_1569, V_1579, V_1526 + 1, fonts_2.small, false, 120, 120, 128, V_1506)
V_1578 = V_1579 + V_1570
end
end
if V_1567 > 0 and Lumia.draw.fa then
local V_1580 = V_1578
local V_1581 = V_1526 - 1
for V_1582 = 1, V_1567 do
local V_1583 = faIcons_1[V_1582]
local V_1584, V_1585, V_1586 = textSel_1[1] or 210, textSel_1[2] or 210, textSel_1[3] or 215
if menu.F.faIconRgb then
local V_1587, V_1588, V_1589 = menu.F.faIconRgb(V_1583)
if V_1587 then
V_1584, V_1585, V_1586 = V_1587, V_1588, V_1589
end
end
Lumia.draw.fa(V_1583, V_1580, V_1581, 13, V_1584, V_1585, V_1586, V_1501)
V_1580 = V_1580 + 16
end
if V_1519.radarDynamic and V_1519._occ and Lumia.draw.circle then
local V_1590 = tostring(faIcons_1[1] or "")
local V_1591 = V_1590 == "f206" or V_1590 == "f21c"
local V_1592 = V_1580 + (V_1591 and 8 or 7)
local V_1593 = V_1581 + (V_1591 and -1 or 3)
Lumia.draw.circle(V_1592, V_1593, 3.6, 235, 235, 240, V_1501, true)
Lumia.draw.circle(V_1592, V_1593 + 8, 5.2, 235, 235, 240, V_1501, true)
end
end
if V_1519.type == "submenu" then
F_37(
">>",
V_1527 - 18,
V_1526 - 1,
fonts_2.size,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
elseif V_1519.type == "checkcombo" and (V_1519.id or V_1519.toggle) then
local V_1594 = V_1519.id or V_1519.toggle
local V_1595 = Lumia.state.combos and Lumia.state.combos[V_1594]
local V_1596 = (V_1595 and V_1595.list and V_1595.list[V_1595.index]) or "..."
local V_1597 = kbPrettyComboLabel(V_1596)
local V_1598 = (V_1595 and V_1595.list and #V_1595.list) or 0
local V_1599 = Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true
local V_1600
if V_1519._uiSideArrow == V_1599 and V_1519._uiSideN == V_1598 then
V_1600 = V_1519._uiSide == true
else
V_1600 = Lumia.api.isKbSideComboOpt(V_1519)
V_1519._uiSide = V_1600
V_1519._uiSideArrow = V_1599
V_1519._uiSideN = V_1598
end
Lumia.draw.widgets.toggle(
V_1527 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1594] == true,
V_1594,
V_1528,
V_1520
)
if V_1600 then
if V_1520 then
Lumia.state._kbSideComboAnchorY = V_1522
Lumia.state._kbSideComboAnchorH = layout_3.rowH
end
local V_1601 = V_1520 and Lumia.api.isKbSideComboOpen()
local V_1602 = math.max(22, math.floor(layout_3.rowH * 0.66))
local V_1603 = 10
local V_1604 = 168
local V_1605, V_1606, V_1607
if V_1519._uiValSrc == V_1597 and V_1519._uiValMax == V_1604 then
V_1605, V_1606, V_1607 = V_1519._uiValShow, V_1519._uiValW, V_1519._uiValBoxW
else
V_1605 = V_1387(V_1597, fonts_2.size, V_1604 - 20) or V_1597
V_1606 = (V_1388(V_1605, fonts_2.size)) or (#V_1605 * 8)
V_1607 = math.max(78, math.min(V_1604, math.floor(V_1606 + V_1603 * 2)))
V_1519._uiValSrc = V_1597
V_1519._uiValMax = V_1604
V_1519._uiValShow = V_1605
V_1519._uiValW = V_1606
V_1519._uiValBoxW = V_1607
end
local V_1608 = V_1527 - toggleW_1 - 10 - V_1607
local V_1609 = V_1522 + math.floor((layout_3.rowH - V_1602) / 2)
Lumia.state._kbSideComboBoxX = V_1608
Lumia.state._kbSideComboBoxW = V_1607
Lumia.state._kbSideComboBoxY = V_1609
Lumia.state._kbSideComboBoxH = V_1602
local V_1610 = V_1520 or V_1601
F_36(
V_1608,
V_1609,
V_1607,
V_1602,
V_1610 and 36 or 26,
V_1610 and 36 or 26,
V_1610 and 40 or 30,
V_1502,
5
)
local V_1611 = V_1610 and 245 or 190
local V_1612 = V_1610 and 245 or 190
local V_1613 = V_1610 and 248 or 195
F_37(V_1605, V_1608 + V_1603, V_1526, fonts_2.size, false, V_1611, V_1612, V_1613, V_1501)
else
if #V_1597 > 18 then
V_1597 = V_1597:sub(1, 16) .. ".."
end
local V_1614 = "- " .. V_1597 .. " -"
local V_1615 = (V_1388 and V_1388(V_1614, fonts_2.small)) or (#V_1614 * 6)
F_37(
V_1614,
V_1527 - toggleW_1 - 10 - V_1615,
V_1526 + 1,
fonts_2.small,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
end
elseif
(V_1519.type == "checkbox" or V_1519.type == "checkslider") and (V_1519.id or V_1519.toggle)
then
local V_1616 = V_1519.id or V_1519.toggle
Lumia.draw.widgets.toggle(
V_1527 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1616] == true,
V_1616,
V_1528,
V_1520
)
elseif V_1519.type == "textbox" and (V_1519.id or V_1519.toggle) then
local V_1617 = V_1519.id or V_1519.toggle
local V_1618 = tostring((Lumia.state.textboxes and Lumia.state.textboxes[V_1617]) or "")
if V_1618 == "" then
V_1618 = "..."
elseif #V_1618 > 18 then
V_1618 = V_1618:sub(1, 16) .. ".."
end
local V_1619
if V_1519._uiValSrc == V_1618 and V_1519._uiValSize == fonts_2.small then
V_1619 = V_1519._uiValW or 24
else
V_1619 = (V_1388 and V_1388(V_1618, fonts_2.small)) or (#V_1618 * 6)
V_1519._uiValSrc = V_1618
V_1519._uiValSize = fonts_2.small
V_1519._uiValW = V_1619
end
F_37(
V_1618,
V_1527 - V_1619,
V_1526 + 1,
fonts_2.small,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
elseif V_1519.type == "combo" and (V_1519.id or V_1519.toggle) then
local V_1620 = V_1519.id or V_1519.toggle
local V_1621 = Lumia.state.combos and Lumia.state.combos[V_1620]
local V_1622 = (V_1621 and V_1621.list and V_1621.list[V_1621.index]) or "..."
local V_1623 = kbPrettyComboLabel(V_1622)
local V_1624 = (V_1621 and V_1621.list and #V_1621.list) or 0
local V_1625 = Lumia.state.toggles and Lumia.state.toggles["ui:arrowCombo"] == true
local V_1626
if V_1519._uiSideArrow == V_1625 and V_1519._uiSideN == V_1624 then
V_1626 = V_1519._uiSide == true
else
V_1626 = Lumia.api.isKbSideComboOpt(V_1519)
V_1519._uiSide = V_1626
V_1519._uiSideArrow = V_1625
V_1519._uiSideN = V_1624
end
local V_1627 = V_1519.loopToggle and string.lower(tostring(V_1622)) == "loop"
local V_1628 = V_1627 and 1 or 0
local V_1629 = (toggleW_1 + 10) * V_1628
if V_1626 then
if V_1520 then
Lumia.state._kbSideComboAnchorY = V_1522
Lumia.state._kbSideComboAnchorH = layout_3.rowH
end
local V_1630 = V_1520 and Lumia.api.isKbSideComboOpen()
local V_1631 = math.max(22, math.floor(layout_3.rowH * 0.68))
local V_1632 = 10
local V_1633 = 168
local V_1634, V_1635, V_1636
if V_1519._uiValSrc == V_1623 and V_1519._uiValMax == V_1633 then
V_1634, V_1635, V_1636 = V_1519._uiValShow, V_1519._uiValW, V_1519._uiValBoxW
else
V_1634 = V_1387(V_1623, fonts_2.size, V_1633 - 20) or V_1623
V_1635 = (V_1388(V_1634, fonts_2.size)) or (#V_1634 * 8)
V_1636 = math.max(64, math.min(V_1633, math.floor(V_1635 + V_1632 * 2)))
V_1519._uiValSrc = V_1623
V_1519._uiValMax = V_1633
V_1519._uiValShow = V_1634
V_1519._uiValW = V_1635
V_1519._uiValBoxW = V_1636
end
local V_1637 = V_1527 - V_1629
local V_1638 = V_1637 - V_1636
local V_1639 = V_1522 + math.floor((layout_3.rowH - V_1631) / 2)
Lumia.state._kbSideComboBoxX = V_1638
Lumia.state._kbSideComboBoxW = V_1636
Lumia.state._kbSideComboBoxY = V_1639
Lumia.state._kbSideComboBoxH = V_1631
local V_1640 = V_1520 or V_1630
F_36(
V_1638,
V_1639,
V_1636,
V_1631,
V_1640 and 36 or 26,
V_1640 and 36 or 26,
V_1640 and 40 or 30,
V_1502,
5
)
local V_1641 = V_1640 and 245 or 190
local V_1642 = V_1640 and 245 or 190
local V_1643 = V_1640 and 248 or 195
F_37(V_1634, V_1638 + V_1632, V_1526, fonts_2.size, false, V_1641, V_1642, V_1643, V_1501)
if V_1628 > 0.02 and V_1519.loopToggle then
local V_1644 = V_1527 + (1 - V_1628) * (toggleW_1 + 6)
Lumia.draw.widgets.toggle(
V_1644 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1519.loopToggle] == true,
V_1519.loopToggle,
V_1528 * V_1628,
V_1520
)
end
else
if #V_1623 > 18 then
V_1623 = V_1623:sub(1, 16) .. ".."
end
local V_1645 = "- " .. V_1623 .. " -"
local V_1646 = (V_1388 and V_1388(V_1645, fonts_2.small)) or (#V_1645 * 6)
F_37(
V_1645,
V_1527 - V_1629 - V_1646 - 4,
V_1526 + 1,
fonts_2.small,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
if V_1628 > 0.02 and V_1519.loopToggle then
local V_1647 = V_1527 + (1 - V_1628) * (toggleW_1 + 6)
Lumia.draw.widgets.toggle(
V_1647 - toggleW_1,
V_1522 + (layout_3.rowH - toggleH_1) * 0.5,
Lumia.state.toggles[V_1519.loopToggle] == true,
V_1519.loopToggle,
V_1528 * V_1628,
V_1520
)
end
end
elseif V_1519.type == "slider" and V_1519.id then
local V_1648 = Lumia.state.sliders[V_1519.id] or V_1519.min or 0
local V_1649 = tostring(math.floor(V_1648 + 0.5))
if
type(V_1519.closetComp) == "table"
and Lumia.features
and Lumia.features.closetTextureIndex
then
local V_1650 = Lumia.features.closetTextureIndex(
V_1519.closetComp.id,
V_1519.closetComp.isProp == true
) or 0
V_1649 = tostring(math.floor(V_1648 + 0.5)) .. "." .. tostring(math.floor(V_1650 + 0.5))
end
local V_1651 = type(V_1519.closetComp) == "table" and 42.0 or 32.0
local V_1652 = 8.0
local V_1653 = V_1527 - V_1651
local V_1654
if V_1519._uiSlideLabel == V_1519.text and V_1519._uiSlideSize == fonts_2.size then
V_1654 = V_1525 + (V_1519._uiSlideLabelW or 40)
else
local V_1655 = (
(V_1388 and V_1388(V_1519.text or "", fonts_2.size))
or (#tostring(V_1519.text or "") * 7)
) + 10
V_1519._uiSlideLabel = V_1519.text
V_1519._uiSlideSize = fonts_2.size
V_1519._uiSlideLabelW = V_1655
V_1654 = V_1525 + V_1655
end
local V_1656 = 84.0
local V_1657 = V_1653 - V_1652 - V_1656
if V_1657 < V_1654 then
V_1656 = math.max(56.0, V_1653 - V_1652 - V_1654)
V_1657 = V_1653 - V_1652 - V_1656
end
local V_1658
if V_1519._uiValSrc == V_1649 and V_1519._uiValSize == fonts_2.small then
V_1658 = V_1519._uiValW or 24
else
V_1658 = (V_1388 and V_1388(V_1649, fonts_2.small)) or (#V_1649 * 6)
V_1519._uiValSrc = V_1649
V_1519._uiValSize = fonts_2.small
V_1519._uiValW = V_1658
end
F_37(
V_1649,
V_1653 + (V_1651 - V_1658) * 0.5,
V_1526 + 1,
fonts_2.small,
false,
textSel_1[1],
textSel_1[2],
textSel_1[3],
V_1504
)
Lumia.draw.widgets.slider(
V_1657,
V_1522 + layout_3.rowH * 0.5,
V_1656,
V_1648,
V_1519.min or 0,
V_1519.max or 100,
V_1519.id,
V_1520,
V_1528
)
elseif V_1519.type == "color" and (V_1519.id or V_1519.toggle) then
local V_1659 = V_1519.id or V_1519.toggle
local V_1660 = Lumia.state.colors and Lumia.state.colors[V_1659]
local V_1661 = V_1660.r or 255
local V_1662 = V_1660.g or 255
local V_1663 = V_1660.b or 255
local V_1664, V_1665 = 46.0, 16.0
local V_1666 = V_1527 - V_1664
local V_1667 = V_1522 + (layout_3.rowH - V_1665) * 0.5
local V_1668 = V_1520 and { 255, 255, 255 } or { 55, 55, 58 }
F_36(V_1666 - 1, V_1667 - 1, V_1664 + 2, V_1665 + 2, V_1668[1], V_1668[2], V_1668[3], V_1501, 5)
F_36(V_1666, V_1667, V_1664, V_1665, V_1661, V_1662, V_1663, V_1501, 4)
F_36(V_1666 + 3, V_1667 + 2, V_1664 - 16, 4, 255, 255, 255, V_1509, 2)
Lumia.state.colorPickerAnchors = Lumia.state.colorPickerAnchors or {}
Lumia.state.colorPickerAnchors[V_1659] = {
x = V_1521 + mw_2 + 10,
y = math.max(8, V_1667 - 40),
}
end
end
end
end
if V_1516 then
Lumia.draw.clipPop()
end
do
local V_1669 = 4.0
local V_1670 = 3.0
local V_1671 = x_3 - V_1670 - V_1669
local V_1672 = V_1450
local V_1673 = math.max(8, listH_1)
local V_1674 = math.max(16, math.floor(layout_3.rowH * 0.7))
local V_1675 = math.min(V_1673 * 0.55, math.max(V_1674 * 3.2, math.floor(layout_3.rowH * 2.6)))
if V_1429 then
Lumia.state.anim.sideThumbGrow = 1.0
elseif Lumia.state.anim.sideThumbGrow == nil then
Lumia.state.anim.sideThumbGrow = 0
end
Lumia.state._uiThumb = {
trackX = V_1671,
trackY = V_1672,
trackW = V_1669,
trackH = V_1673,
thumbHClosed = V_1674,
thumbHOpen = V_1675,
count = V_1397,
act = V_1396,
tr = 10,
tg = 10,
tb = 12,
ta = alpha_1(200, V_1410),
r = V_1409[1],
g = V_1409[2],
b = V_1409[3],
a = alpha_1(250, V_1410),
}
end
local V_1676 = y_1 + totalH_1 - layout_3.footerH
F_36(
x_3,
V_1676,
mw_2,
layout_3.footerH,
colors_3.footer[1],
colors_3.footer[2],
colors_3.footer[3],
alpha_1(math.floor((tonumber(colors_3.footer[4]) or 255) * V_1411 + 0.5), V_1410),
radius_2,
V_1432
)
local V_1677 = math.max(1, tonumber(V_1396) or 1)
local V_1678 = math.max(1, V_1397)
local V_1679 = V_1390
.. "|"
.. tostring(V_1677)
.. "|"
.. tostring(V_1678)
.. "|"
.. tostring(Lumia.state.menuSearchCount)
.. "|"
.. tostring(Lumia.state.menuSearchQuery or "")
local V_1680 = Lumia.state._uiFoot
local rightTxt_1
if V_1680 and V_1680.k == V_1679 then
rightTxt_1 = V_1680.rightTxt
else
rightTxt_1 = tostring(V_1677) .. " / " .. tostring(V_1678)
if V_1390 == "Search" then
local V_1681 = tonumber(Lumia.state.menuSearchCount) or 0
local V_1682 = tostring(Lumia.state.menuSearchQuery or "")
if V_1682 == "" then
rightTxt_1 = "type to search"
elseif V_1681 <= 0 then
rightTxt_1 = "0 results"
else
rightTxt_1 = tostring(V_1681) .. (V_1681 == 1 and " result" or " results")
end
end
V_1680 = { k = V_1679, rightTxt = rightTxt_1 }
Lumia.state._uiFoot = V_1680
end
local V_1683 = Lumia.state._footerUserName
if V_1683 == nil or (V_1389 - (tonumber(Lumia.state._footerUserNameAt) or 0)) > 8000 then
V_1683 = ""
if Lumia.getSharkUsername then
local V_1684, V_1685 = pcall(Lumia.getSharkUsername)
if V_1684 then
V_1683 = tostring(V_1685 or "")
end
end
if (V_1683 == "" or V_1683 == "unknown") and Lumia.panel and Lumia.panel.userName then
local V_1686, V_1687 = pcall(Lumia.panel.userName)
if V_1686 then
V_1683 = tostring(V_1687 or "")
end
end
if V_1683 == "unknown" then
V_1683 = ""
end
Lumia.state._footerUserName = V_1683
Lumia.state._footerUserNameAt = V_1389
end
local rightW_1 = 0
if rightTxt_1 ~= "" then
if V_1680.rightW and V_1680.rightTxt == rightTxt_1 then
rightW_1 = V_1680.rightW
else
rightW_1 = (V_1388 and V_1388(rightTxt_1, fonts_2.small)) or 40
V_1680.rightW = rightW_1
end
F_37(
rightTxt_1,
x_3 + mw_2 - (layout_3.rightPad or 14) - rightW_1,
V_1676 + (layout_3.footerH - fonts_2.small) * 0.5,
fonts_2.small,
false,
235,
235,
240,
alpha_1(255, V_1410)
)
end
if type(V_1683) == "string" and V_1683 ~= "" then
local maxUserW_1 = math.max(40, mw_2 - (layout_3.leftPad or 12) - (layout_3.rightPad or 14) - rightW_1 - 16)
local shownUser_1
if V_1680.user == V_1683 and V_1680.maxUserW == maxUserW_1 then
shownUser_1 = V_1680.shownUser
else
shownUser_1 = V_1387 and V_1387(V_1683, fonts_2.small, maxUserW_1) or V_1683
V_1680.user = V_1683
V_1680.maxUserW = maxUserW_1
V_1680.shownUser = shownUser_1
end
F_37(
shownUser_1,
x_3 + (layout_3.leftPad or 12),
V_1676 + (layout_3.footerH - fonts_2.small) * 0.5,
fonts_2.small,
false,
V_1409[1],
V_1409[2],
V_1409[3],
alpha_1(230, V_1410)
)
end
local V_1688 = V_1395 and V_1395[V_1396]
local V_1689 = V_1688 and tostring(V_1688.desc or "") or ""
if V_1689 ~= "" then
local V_1690 = 20.0
local V_1691 = y_1 + totalH_1 + 3.0
F_36(x_3, V_1691, mw_2, V_1690, 12, 12, 14, alpha_1(math.floor(220 * V_1411 + 0.5), V_1410), 0)
local V_1692 = mw_2 - 18.0
local V_1693
if V_1688._uiDesc == V_1689 and V_1688._uiDescMax == V_1692 then
V_1693 = V_1688._uiDescShown or V_1689
else
V_1693 = V_1387(V_1689, fonts_2.small, V_1692) or V_1689
V_1688._uiDesc = V_1689
V_1688._uiDescMax = V_1692
V_1688._uiDescShown = V_1693
end
F_37(
V_1693,
x_3 + 9.0,
V_1691 + (V_1690 - fonts_2.small) * 0.5,
fonts_2.small,
false,
160,
162,
170,
alpha_1(230, V_1410)
)
end
if Lumia.api.shouldDrawKbSideCombo() then
local kbSideCombo_6 = Lumia.state.kbSideCombo
local V_1694 = kbSideCombo_6.list or {}
local V_1695 = #V_1694
if V_1695 > 0 then
local V_1696 = V_1389
local V_1697 = tonumber(kbSideCombo_6.animFrom) or 0
local openAnim_1 = tonumber(kbSideCombo_6.animTo)
if openAnim_1 == nil then
openAnim_1 = kbSideCombo_6.closing and 0 or 1
end
local V_1698 = math.max(1, tonumber(kbSideCombo_6.animDur) or (kbSideCombo_6.closing and 160 or 150))
local V_1699 = tonumber(kbSideCombo_6.animStart) or V_1696
local V_1700 = math.max(0, math.min(1, (V_1696 - V_1699) / V_1698))
local V_1701 = kbSideCombo_6.closing and (V_1700 * V_1700) or (1 - (1 - V_1700) * (1 - V_1700))
kbSideCombo_6.openAnim = V_1697 + (openAnim_1 - V_1697) * V_1701
if V_1700 >= 1 then
kbSideCombo_6.openAnim = openAnim_1
end
if kbSideCombo_6.closing and (V_1700 >= 1 or kbSideCombo_6.openAnim <= 0.01) then
Lumia.state.kbSideCombo = nil
Lumia.state._kbSideComboAnchorY = nil
Lumia.state._kbSideSelY = nil
else
local V_1702 = math.max(0, math.min(1, kbSideCombo_6.openAnim))
local V_1703 = math.max(26, layout_3.rowH - 2)
local V_1704 = 6
local V_1705 = 6
local V_1706 = 14
local V_1707 = 11
local V_1708 = math.min(V_1695, V_1707)
local V_1709 = math.max(1, math.min(V_1695, tonumber(kbSideCombo_6.highlight) or 1))
local V_1710 = tonumber(kbSideCombo_6.scroll) or 0
local V_1711 = math.max(0, V_1695 - V_1708)
if V_1709 < V_1710 + 1 then
V_1710 = V_1709 - 1
elseif V_1709 > V_1710 + V_1708 then
V_1710 = V_1709 - V_1708
end
V_1710 = math.max(0, math.min(V_1711, V_1710))
kbSideCombo_6.scroll = V_1710
if not kbSideCombo_6.lockReady then
local V_1712 = tonumber(Lumia.state._kbSideComboBoxW) or 120
local lockW_1 = math.max(168, math.min(228, V_1712 + 48))
local V_1713 = 10
local lockH_1 = V_1704 * 2 + V_1703 * V_1708
local lockX_1 = x_3 + mw_2 + V_1713
if lockX_1 + lockW_1 > screenW - 8 then
lockX_1 = math.max(8, x_3 - V_1713 - lockW_1)
end
local V_1714 = Lumia.state._kbSideComboBoxY or Lumia.state._kbSideComboAnchorY or V_1450
local lockY_1 = V_1714 - V_1704
if lockY_1 + lockH_1 > screenH - 8 then
lockY_1 = math.max(8, screenH - 8 - lockH_1)
end
if lockY_1 < 8 then
lockY_1 = 8
end
kbSideCombo_6.lockX = lockX_1
kbSideCombo_6.lockY = lockY_1
kbSideCombo_6.lockW = lockW_1
kbSideCombo_6.lockH = lockH_1
kbSideCombo_6.lockReady = true
Lumia.state._kbSideSelY = V_1704 + (V_1709 - V_1710 - 1) * V_1703
kbSideCombo_6._lastScroll = V_1710
end
local lockX_2 = kbSideCombo_6.lockX
local lockY_2 = kbSideCombo_6.lockY
local lockW_2 = kbSideCombo_6.lockW
local lockH_2 = kbSideCombo_6.lockH
local V_1715 = V_1695 > V_1707
local V_1716 = V_1715 and 3 or 0
local V_1717 = lockW_2 - V_1705 * 2 - V_1706 - V_1716 - 18
local V_1718 = V_1702 * V_1410
local V_1719 = 8.0
local V_1720 = colors_3.bg or { 18, 18, 24, 255 }
Lumia.draw.border(
lockX_2,
lockY_2,
lockW_2,
lockH_2,
8,
8,
12,
alpha_1(120, V_1718),
V_1719 + 1,
2.0
)
F_36(lockX_2, lockY_2, lockW_2, lockH_2, 18, 18, 24, alpha_1(245, V_1718), V_1719)
F_36(
lockX_2 + 1,
lockY_2 + 1,
lockW_2 - 2,
lockH_2 - 2,
V_1720[1],
V_1720[2],
V_1720[3],
alpha_1(235, V_1718),
V_1719 - 1
)
local V_1721 = V_1704 + (V_1709 - V_1710 - 1) * V_1703
local V_1722 = Lumia.state._kbSideSelY
if V_1722 == nil or kbSideCombo_6._lastScroll ~= V_1710 then
V_1722 = V_1721
kbSideCombo_6._lastScroll = V_1710
else
local V_1723 = Lumia.util._dt or 0.016
V_1722 = V_1722 + (V_1721 - V_1722) * (1 - math.exp(-20 * V_1723))
if math.abs(V_1722 - V_1721) < 0.3 then
V_1722 = V_1721
end
end
Lumia.state._kbSideSelY = V_1722
local V_1724 = lockY_2 + V_1722
local V_1725 = V_1703 - 4
if V_1702 > 0.15 then
F_36(
lockX_2 + V_1705,
V_1724 + 2,
lockW_2 - V_1705 * 2 - V_1716,
V_1725,
36,
36,
46,
alpha_1(235, V_1718),
7.0
)
end
for V_1726 = 1, V_1708 do
local V_1727 = V_1710 + V_1726
if V_1727 > V_1695 then
break
end
local V_1728 = lockY_2 + V_1704 + (V_1726 - 1) * V_1703
local V_1729 = kbPrettyComboLabel(
(kbSideCombo_6.list and kbSideCombo_6.list[V_1727]) or ("Option " .. V_1727)
)
local V_1730 = (V_1727 == V_1709)
local V_1731 = V_1730 and 3 or 0
local V_1732 = tostring(V_1729)
local V_1733 = math.max(8, math.floor((V_1717 - V_1731) / 7))
if #V_1732 > V_1733 then
V_1732 = V_1732:sub(1, math.max(1, V_1733 - 2)) .. ".."
end
local V_1734 = V_1730 and 255 or 175
local V_1735 = V_1730 and 255 or 175
local V_1736 = V_1730 and 255 or 180
F_37(
V_1732,
lockX_2 + V_1705 + V_1706 + V_1731,
V_1728 + (V_1703 - fonts_2.size) * 0.5,
fonts_2.size,
false,
V_1734,
V_1735,
V_1736,
alpha_1(V_1730 and 255 or 200, V_1718)
)
end
if V_1715 then
local V_1737 = V_1703 * V_1708 - 4
local V_1738 = lockX_2 + lockW_2 - V_1705 - V_1716
local V_1739 = lockY_2 + V_1704 + 2
F_36(V_1738, V_1739, V_1716, V_1737, 28, 28, 34, alpha_1(150, V_1718), 2.0)
local V_1740 = math.max(12, V_1737 * (V_1708 / V_1695))
local V_1741 = V_1739 + (V_1737 - V_1740) * (V_1710 / math.max(1, V_1711))
F_36(V_1738, V_1741, V_1716, V_1740, 90, 90, 100, alpha_1(200, V_1718), 2.0)
end
end
end
end
if menu.F.pedPreviewWanted and menu.F.pedPreviewWanted() then
local V_1742 = menu.F.pedPreviewDrawCard(x_3, y_1, mw_2, totalH_1, V_1410)
if menu.F.pedPreviewTick then
menu.F.pedPreviewTick(V_1742)
end
elseif Lumia.state.pedPreview and Lumia.state.pedPreview.entity then
menu.F.pedPreviewStop()
end
Lumia.colorPicker.draw()
F_35()
F_40()
Lumia.state._uiRecAtKey = V_1390
Lumia.state._uiRecAtSel = V_1391.SelectedFeature or 1
Lumia.state._uiRecAtScr = V_1391.scroll or 0
local anim_6 = Lumia.state.anim
local V_1743 = (anim_6 and anim_6._widgetSlide) and true or false
if Lumia.state._uiFaNeedRecache then
Lumia.state._uiFaNeedRecache = false
Lumia.state._uiTabCache = nil
Lumia.state._uiDrawVer = (tonumber(Lumia.state._uiDrawVer) or 0) + 1
V_1743 = true
end
Lumia.state._uiDirty = V_1743
if (not V_1743) and V_1390 ~= "Search" and (Lumia.state._uiRecN or 0) > 0 then
F_31(
F_29(V_1390, V_1391.activeSubTab, V_1391.scroll, V_1391.SelectedFeature),
Lumia.state._uiRec,
Lumia.state._uiRecN,
Lumia.state._uiSel,
Lumia.state._uiThumb
)
end
end
do
local V_1744 = 0
local options_42 = { dir = 0, startAt = 0, nextAt = 0 }
local options_43 = { dir = 0, startAt = 0, nextAt = 0 }
local options_44 = { dir = 0, startAt = 0, nextAt = 0 }
local function getCurrentTime_6(V_1745)
local V_1746 = GetGameTimer() - V_1745
return math.max(26, 150 - math.floor(V_1746 / 11))
end
local function getCurrentTime_7(V_1747)
local V_1748 = GetGameTimer() - V_1747
return math.max(28, 100 - math.floor(V_1748 / 12))
end
local function getCurrentTime_8(V_1749)
local V_1750 = GetGameTimer() - V_1749
return math.max(70, 220 - math.floor(V_1750 / 10))
end
local function F_41(V_1751)
if Lumia.api.isKbSideComboOpen() then
return true
end
return V_1751
and (
V_1751.type == "slider"
or V_1751.type == "checkslider"
or V_1751.type == "combo"
or V_1751.type == "checkcombo"
)
end
local function getCurrentTime_9()
local startAt_1 = GetGameTimer()
local V_1752 = Lumia.util.keyDown(Lumia.keys.down)
local V_1753 = Lumia.util.keyDown(Lumia.keys.up)
local dir_1 = V_1752 and 1 or (V_1753 and -1 or 0)
if dir_1 == 0 then
options_42.dir = 0
return
end
if options_42.dir ~= dir_1 then
options_42.dir = dir_1
options_42.startAt = startAt_1
if dir_1 > 0 then
Lumia.api.handleDown()
else
Lumia.api.handleUp()
end
Lumia.sound.nav()
options_42.nextAt = startAt_1 + getCurrentTime_6(startAt_1)
return
end
if startAt_1 >= options_42.nextAt then
if dir_1 > 0 then
Lumia.api.handleDown()
else
Lumia.api.handleUp()
end
Lumia.sound.nav()
options_42.nextAt = startAt_1 + getCurrentTime_6(options_42.startAt)
end
end
local function getCurrentTime_10()
local V_1754 = Lumia.util.keyDown(Lumia.keys.left)
local V_1755 = Lumia.util.keyDown(Lumia.keys.right)
local dir_2 = V_1754 and -1 or (V_1755 and 1 or 0)
if dir_2 == 0 then
options_43.dir = 0
return false
end
local V_1756 = Lumia.api.getSelectedOption()
if not F_41(V_1756) then
options_43.dir = 0
return false
end
local startAt_2 = GetGameTimer()
if options_43.dir ~= dir_2 then
options_43.dir = dir_2
options_43.startAt = startAt_2
if dir_2 < 0 then
Lumia.api.handleLeft()
else
Lumia.api.handleRight()
end
Lumia.sound.horiz()
options_43.nextAt = startAt_2 + getCurrentTime_7(startAt_2)
return true
end
if startAt_2 >= options_43.nextAt then
if dir_2 < 0 then
Lumia.api.handleLeft()
else
Lumia.api.handleRight()
end
Lumia.sound.horiz()
options_43.nextAt = startAt_2 + getCurrentTime_7(options_43.startAt)
end
return true
end
local function getCurrentTime_11()
local startAt_3 = GetGameTimer()
local V_1757 = Lumia.util.keyDown(Lumia.keys.subLeft)
local V_1758 = Lumia.util.keyDown(Lumia.keys.subRight)
local dir_3 = V_1757 and -1 or (V_1758 and 1 or 0)
if dir_3 == 0 then
options_44.dir = 0
return
end
local V_1759 = Lumia.state._eagleLive
if not (V_1759 and V_1759.on == true) then
DisableControlAction(0, 44, true)
DisableControlAction(0, 38, true)
DisableControlAction(0, 52, true)
DisableControlAction(0, 51, true)
DisableControlAction(0, 23, true)
DisableControlAction(0, 75, true)
DisableControlAction(0, 73, true)
end
if options_44.dir ~= dir_3 then
options_44.dir = dir_3
options_44.startAt = startAt_3
if dir_3 < 0 then
Lumia.api.handleSubTabLeft()
else
Lumia.api.handleSubTabRight()
end
Lumia.sound.horiz()
options_44.nextAt = startAt_3 + getCurrentTime_8(startAt_3)
return
end
if startAt_3 >= options_44.nextAt then
if dir_3 < 0 then
Lumia.api.handleSubTabLeft()
else
Lumia.api.handleSubTabRight()
end
Lumia.sound.horiz()
options_44.nextAt = startAt_3 + getCurrentTime_8(options_44.startAt)
end
end
local options_45 = { nextAt = 0 }
local function getCurrentTime_12()
if Lumia.state.active ~= "Search" then
options_45.nextAt = 0
return
end
if not (menu.F.eagleAcLive and menu.F.eagleAcLive()) then
for V_1760 = 0, 2 do
DisableControlAction(V_1760, 30, true)
DisableControlAction(V_1760, 31, true)
DisableControlAction(V_1760, 32, true)
DisableControlAction(V_1760, 33, true)
DisableControlAction(V_1760, 34, true)
DisableControlAction(V_1760, 35, true)
DisableControlAction(V_1760, 21, true)
DisableControlAction(V_1760, 22, true)
end
end
local currentTime_7 = GetGameTimer()
if currentTime_7 < (tonumber(Lumia.state._searchIgnoreUntil) or 0) then
return
end
local menuSearchQuery_1 = tostring(Lumia.state.menuSearchQuery or "")
local V_1761 = 48
local V_1762 = false
local V_1763 = SharkAPI.IsKeyPressed
and (SharkAPI.IsKeyPressed(0x11) or SharkAPI.IsKeyPressed(0xA2) or SharkAPI.IsKeyPressed(0xA3))
local V_1764 = SharkAPI.IsKeyPressed
and (SharkAPI.IsKeyPressed(0x12) or SharkAPI.IsKeyPressed(0xA4) or SharkAPI.IsKeyPressed(0xA5))
local V_1765 = SharkAPI.IsKeyPressed
and (SharkAPI.IsKeyPressed(0x10) or SharkAPI.IsKeyPressed(0xA0) or SharkAPI.IsKeyPressed(0xA1))
if V_1763 and not V_1764 and Lumia.util.keyEdge(0x41) then
Lumia.state.menuSearchSelAll = menuSearchQuery_1 ~= ""
return
end
if V_1763 and not V_1764 and Lumia.util.keyEdge(0x43) then
if Lumia.state.menuSearchSelAll and menuSearchQuery_1 ~= "" and SharkAPI.SetClipboardText then
pcall(SharkAPI.SetClipboardText, menuSearchQuery_1)
end
return
end
if V_1763 and not V_1764 and Lumia.util.keyEdge(0x56) then
local V_1766 = ""
if SharkAPI.GetClipboardText then
local V_1767, V_1768 = pcall(SharkAPI.GetClipboardText)
if V_1767 and type(V_1768) == "string" then
V_1766 = V_1768:gsub("[\r\n]+", " "):gsub("^%s+", ""):gsub("%s+$", "")
end
end
if V_1766 ~= "" then
if Lumia.state.menuSearchSelAll then
menuSearchQuery_1 = V_1766:sub(1, V_1761)
else
menuSearchQuery_1 = (menuSearchQuery_1 .. V_1766):sub(1, V_1761)
end
Lumia.state.menuSearchSelAll = false
V_1762 = true
end
elseif
(V_1763 and Lumia.util.keyEdge(0x08))
or Lumia.util.keyEdge(0x2E)
or (Lumia.state.menuSearchSelAll and Lumia.util.keyEdge(0x08))
then
if menuSearchQuery_1 ~= "" then
menuSearchQuery_1 = ""
Lumia.state.menuSearchSelAll = false
V_1762 = true
end
else
local V_1769 = Lumia.util.keyDown(0x08)
if V_1769 and menuSearchQuery_1 ~= "" and not V_1763 then
if Lumia.state.menuSearchSelAll then
menuSearchQuery_1 = ""
Lumia.state.menuSearchSelAll = false
V_1762 = true
options_45.nextAt = 0
elseif Lumia.util.keyEdge(0x08) then
menuSearchQuery_1 = menuSearchQuery_1:sub(1, math.max(0, #menuSearchQuery_1 - 1))
V_1762 = true
options_45.nextAt = currentTime_7 + 220
elseif (options_45.nextAt or 0) > 0 and currentTime_7 >= options_45.nextAt then
menuSearchQuery_1 = menuSearchQuery_1:sub(1, math.max(0, #menuSearchQuery_1 - 1))
V_1762 = true
options_45.nextAt = currentTime_7 + 40
end
else
options_45.nextAt = 0
end
if not V_1762 and not V_1763 and not V_1764 then
local pROMPT_KEY_CHARS = PROMPT_KEY_CHARS
if type(pROMPT_KEY_CHARS) == "table" then
local V_1770 = Lumia.state.promptCapsLock == true
for V_1771 = 1, #pROMPT_KEY_CHARS do
local V_1772 = pROMPT_KEY_CHARS[V_1771]
local V_1773, V_1774, V_1775 = V_1772[1], V_1772[2], V_1772[3]
if V_1773 ~= 0x08 and Lumia.util.keyEdge(V_1773) then
local V_1776 = V_1774
local V_1777 = type(V_1774) == "string"
and #V_1774 == 1
and V_1774:match("^[a-z]$") ~= nil
if V_1777 then
local V_1778 = (V_1770 and not V_1765) or (not V_1770 and V_1765)
V_1776 = V_1778 and (V_1775 or V_1774:upper()) or V_1774
elseif V_1765 then
V_1776 = V_1775 or V_1774
end
if type(V_1776) == "string" and V_1776 ~= "" then
if Lumia.state.menuSearchSelAll then
menuSearchQuery_1 = V_1776
Lumia.state.menuSearchSelAll = false
elseif #menuSearchQuery_1 < V_1761 then
menuSearchQuery_1 = menuSearchQuery_1 .. V_1776
end
V_1762 = true
end
break
end
end
end
end
end
if V_1762 then
Lumia.state.menuSearchQuery = menuSearchQuery_1
Lumia.state.menuSearchSelAll = false
if menu.F.refreshSearchResults then
menu.F.refreshSearchResults()
end
end
end
function Lumia.tickInput()
Lumia.state.anim.openA = Lumia.open and 1 or 0
if Lumia.state.isBinding then
return
end
local V_1779 = Lumia.state._menuToggleSeq or 0
if GetGameTimer() < (Lumia.state._keepMenuUntil or 0) then
Lumia.state._menuToggleSeen = V_1779
elseif V_1779 ~= (Lumia.state._menuToggleSeen or 0) then
if GetGameTimer() < (Lumia.state._suppressMenuToggleUntil or 0) then
elseif Lumia.state.playerCountBlocked then
Lumia.state._menuToggleSeen = V_1779
if Lumia.state.playerCountWarningPending then
Lumia.state.playerCountWarningPending = false
local V_1780 = tonumber(Lumia.INJECT_MIN_PLAYERS) or 15
Lumia.notify.error(
"Menu access is blocked until the server has at least " .. tostring(V_1780) .. " players.",
120000
)
Lumia.f8("[Lumia] toggle blocked: playerCountBlocked=true")
end
else
Lumia.state._menuToggleSeen = V_1779
if Lumia.prompt.isActive() then
Lumia.prompt.close(false)
end
if Lumia.colorPicker.isOpen() then
Lumia.colorPicker.close(true)
end
Lumia.open = not Lumia.open
Lumia.state._userWantsOpen = Lumia.open
Lumia.state._uiDirty = true
if menu.F.eagleSyncPauseMenuHook then
pcall(menu.F.eagleSyncPauseMenuHook)
end
if Lumia.open and not Lumia.state._menusRegistered then
Lumia.state._menusRegistered = true
pcall(Lumia.features.registerAll)
end
if Lumia.features.armMenuToggleGuard then
Lumia.features.armMenuToggleGuard(320)
end
if Lumia.open then
if not Lumia.state._menuPosUserSet then
Lumia.layout.pinKeyboardLeft(false)
end
Lumia.state.anim.selY = -1
Lumia.state.anim.scrollY = 0
V_1744 = GetGameTimer() + 180
Lumia.sound.open()
else
Lumia.api.closeKbSideCombo(true)
Lumia.sound.close()
end
end
end
if Lumia.prompt.isActive() then
Lumia.prompt.tick()
return
end
if
not Lumia.open
and Lumia.features.blockMenuTaskCancelInput
and Lumia.features.menuToggleGuardActive
and Lumia.features.menuToggleGuardActive()
then
Lumia.features.blockMenuTaskCancelInput()
end
if not Lumia.open then
return
end
local V_1781 = menu.F.eagleAcLive and menu.F.eagleAcLive()
if
Lumia.features.blockMenuCombatInput
and (not Lumia.state.toggles or Lumia.state.toggles["menu:blockinput"] ~= false)
then
Lumia.features.blockMenuCombatInput()
end
if Lumia.colorPicker.tick() then
return
end
if Lumia.skin == "nova" then
return
end
if not V_1781 then
DisableControlAction(0, 47, true)
DisableControlAction(0, 81, true)
DisableControlAction(0, 82, true)
end
local currentTime_8 = GetGameTimer()
if Lumia.state.active == "Search" then
if not V_1781 then
DisableControlAction(0, 30, true)
DisableControlAction(0, 31, true)
DisableControlAction(0, 32, true)
DisableControlAction(0, 33, true)
DisableControlAction(0, 34, true)
DisableControlAction(0, 35, true)
DisableControlAction(0, 21, true)
DisableControlAction(0, 22, true)
DisableControlAction(0, 36, true)
end
getCurrentTime_12()
else
getCurrentTime_11()
end
getCurrentTime_9()
getCurrentTime_10()
if Lumia.util.keyEdge(0x78) and currentTime_8 > V_1744 then
local V_1782 = Lumia.api.getSelectedOption()
if V_1782 and V_1782.type ~= "divi" and V_1782.type ~= "submenu" then
Lumia.binds.start(V_1782)
V_1744 = currentTime_8 + 200
end
end
if Lumia.state._enterNeedUp then
if not Lumia.util.keyDown(Lumia.keys.enter) then
Lumia.state._enterNeedUp = false
end
elseif Lumia.util.keyEdge(Lumia.keys.enter) and currentTime_8 > V_1744 then
local V_1783 = Lumia.api.getSelectedOption()
local V_1784 = V_1783
and (V_1783.type == "checkbox" or V_1783.type == "checkslider" or V_1783.type == "checkcombo")
V_1744 = currentTime_8 + (V_1784 and 220 or 120)
Lumia.state._enterNeedUp = true
Lumia.sound.select()
Lumia.api.handleSelect()
end
if Lumia.state._backNeedUp then
if not Lumia.util.keyDown(Lumia.keys.back) then
Lumia.state._backNeedUp = false
end
elseif Lumia.util.keyEdge(Lumia.keys.back) and currentTime_8 > V_1744 then
V_1744 = currentTime_8 + 150
Lumia.state._backNeedUp = true
Lumia.sound.back()
local V_1785 = Lumia.api.goBack()
if not V_1785 then
Lumia.open = false
Lumia.state._userWantsOpen = false
if menu.F.eagleSyncPauseMenuHook then
pcall(menu.F.eagleSyncPauseMenuHook)
end
end
end
end
end
end
Lumia.features = Lumia.features or {}
function toVec3(x_5, y_2, z_1)
if type(x_5) == "vector3" then
return x_5
end
if type(x_5) == "table" and x_5.x then
y_2, z_1 = x_5.y, x_5.z
x_5 = x_5.x
end
return vector3((tonumber(x_5) or 0.0) + 0.0, (tonumber(y_2) or 0.0) + 0.0, (tonumber(z_1) or 0.0) + 0.0)
end
function Lumia.features.syncForceEntityControl(entity_6, V_1786)
if not entity_6 or entity_6 == 0 or not DoesEntityExist(entity_6) then
return false
end
local syncTree = SharkAPI.SyncTree
if syncTree.ForceEntityControl then
local V_1787 = pcall(syncTree.ForceEntityControl, entity_6, V_1786 and true or false)
return V_1787
end
if V_1786 and NetworkRequestControlOfEntity then
NetworkRequestControlOfEntity(entity_6)
end
return false
end
function Lumia.features.bringVehicleTo(entity_7, V_1788, V_1789, V_1790, V_1791)
if not entity_7 or entity_7 == 0 or not DoesEntityExist(entity_7) then
return false
end
Lumia.features.syncForceEntityControl(entity_7, true)
SetEntityCoords(entity_7, V_1788 + 0.0, V_1789 + 0.0, V_1790 + 0.0, false, false, false, false)
if V_1791 ~= nil then
SetEntityHeading(entity_7, V_1791 + 0.0)
end
if SetVehicleOnGroundProperly then
SetVehicleOnGroundProperly(entity_7)
end
Lumia.features.syncForceEntityControl(entity_7, false)
return true
end
function Lumia.features.syncSpoofServerCamera(V_1792)
local V_1793 = SharkAPI and SharkAPI.SyncTree
if not V_1793 or type(V_1793.SpoofServerCamera) ~= "function" then
return false
end
local V_1794 = false
if V_1792 ~= true then
local V_1795 = Lumia.state.toggles or {}
local V_1796 = (V_1795["fReecam"] == true) or (Lumia.state.freecam and Lumia.state.freecam.active == true)
local V_1797 = (V_1795["Spectate"] == true)
or (V_1795["SpectateSelectedVehicle"] == true)
or (Lumia.state._wsSpectateCamBypass == true)
or (Lumia.state._spectateBypassHooks == true)
V_1794 = V_1796 or V_1797
end
if Lumia.state._spoofServerCameraOn == V_1794 then
return V_1794
end
Lumia.state._spoofServerCameraOn = V_1794
pcall(V_1793.SpoofServerCamera, V_1794 and true or false)
return V_1794
end
function Lumia.features.spoofServerCoords(V_1798, V_1799, V_1800, V_1801)
V_1800 = V_1800 or "default"
local syncTree_1 = SharkAPI.SyncTree
if not syncTree_1 or type(syncTree_1.SpoofServerCoords) ~= "function" then
return false
end
if V_1798 then
local V_1802 = toVec3(V_1799 or GetEntityCoords(PlayerPedId()))
local V_1803 = tonumber(V_1801)
if V_1803 == nil then
V_1803 = GetEntityHeading(PlayerPedId()) + 0.0
end
Lumia.state._spoofCoordsOwner = V_1800
Lumia.state._spoofCoordsAnchor = V_1802
Lumia.state._spoofHeadingAnchor = V_1803
local V_1804 = pcall(syncTree_1.SpoofServerCoords, true, V_1802)
if not V_1804 then
pcall(syncTree_1.SpoofServerCoords, true, vector3(V_1802.x + 0.0, V_1802.y + 0.0, V_1802.z + 0.0))
end
if syncTree_1.SpoofServerHeading then
pcall(syncTree_1.SpoofServerHeading, true, V_1803)
end
return true
end
if Lumia.state._spoofCoordsOwner and Lumia.state._spoofCoordsOwner ~= V_1800 then
return false
end
Lumia.state._spoofCoordsOwner = nil
Lumia.state._spoofCoordsAnchor = nil
pcall(syncTree_1.SpoofServerCoords, false)
if syncTree_1.SpoofServerHeading then
pcall(syncTree_1.SpoofServerHeading, false)
end
return true
end
function Lumia.features.withKickDesync(V_1805)
if type(V_1805) ~= "function" then
return nil
end
return V_1805()
end
function Lumia.features.refreshSpoofCoords(V_1806)
if Lumia.state._spoofCoordsOwner ~= V_1806 then
return
end
local V_1807 = Lumia.state._spoofCoordsAnchor
if not V_1807 then
return
end
local syncTree_2 = SharkAPI.SyncTree
if not syncTree_2 or type(syncTree_2.SpoofServerCoords) ~= "function" then
return
end
local V_1808 = toVec3(V_1807)
local V_1809 = pcall(syncTree_2.SpoofServerCoords, true, V_1808)
if not V_1809 then
pcall(syncTree_2.SpoofServerCoords, true, vector3(V_1808.x + 0.0, V_1808.y + 0.0, V_1808.z + 0.0))
end
end
SOLO_OCEAN_WPS = {
{ x = -3426.0, y = 967.0, z = 0.0 },
{ x = -2200.0, y = 5200.0, z = 0.0 },
{ x = 2500.0, y = 6800.0, z = 0.0 },
{ x = 4200.0, y = 1500.0, z = 0.0 },
{ x = 3800.0, y = -2500.0, z = 0.0 },
{ x = 1200.0, y = -3200.0, z = 0.0 },
{ x = -1800.0, y = -2800.0, z = 0.0 },
{ x = -3200.0, y = -800.0, z = 0.0 },
}
function soloOceanWaterZ(V_1810, V_1811, V_1812)
V_1812 = (V_1812 or 0.0) + 0.0
if GetWaterHeight then
local V_1813, V_1814 = GetWaterHeight(V_1810 + 0.0, V_1811 + 0.0, V_1812)
if V_1813 and V_1814 then
return V_1814 + 0.0
end
end
return V_1812
end
function soloNetworkFlyZ(V_1815, V_1816, V_1817, V_1818)
return soloOceanWaterZ(V_1815, V_1816, V_1818) + ((tonumber(V_1817) or 0.0) + 0.0)
end
function Lumia.features.stopSoloNetworkSpoof(V_1819)
local V_1820 = Lumia.state._soloNet
if V_1820 and (not V_1819 or V_1820.owner == V_1819) then
Lumia.state._soloNet = nil
Lumia.features.spoofServerCoords(false, nil, V_1820.owner)
return true
end
if V_1819 then
Lumia.features.spoofServerCoords(false, nil, V_1819)
end
return false
end
function Lumia.features.startSoloNetworkSpoof(V_1821)
V_1821 = V_1821 or {}
local V_1822 = tostring(V_1821.owner or "solo")
Lumia.features.stopSoloNetworkSpoof(V_1822)
if Lumia.state._spoofCoordsOwner and Lumia.state._spoofCoordsOwner ~= V_1822 then
Lumia.features.spoofServerCoords(false, nil, Lumia.state._spoofCoordsOwner)
end
local V_1823 = tonumber(V_1821.networkFlyAlt) or 0.0
local V_1824 = tonumber(V_1821.wanderSpeed) or 360.0
local V_1825 = SOLO_OCEAN_WPS[1]
local V_1826 = soloNetworkFlyZ(V_1825.x, V_1825.y, V_1823, V_1825.z)
Lumia.state._soloNet = {
owner = V_1822,
networkPos = { x = V_1825.x, y = V_1825.y, z = V_1826 },
oceanIndex = 2,
oceanLegOffset = {
x = (math.random() - 0.5) * 700.0,
y = (math.random() - 0.5) * 700.0,
},
wanderSpeed = V_1824,
networkFlyAlt = V_1823,
tickGuard = V_1821.tickGuard,
}
return Lumia.features.spoofServerCoords(true, Lumia.state._soloNet.networkPos, V_1822)
end
function Lumia.features.soloNetworkTick()
local V_1827 = Lumia.state._soloNet
if not V_1827 then
return
end
if V_1827.tickGuard and not V_1827.tickGuard() then
return
end
local sOLO_OCEAN_WPS = SOLO_OCEAN_WPS
local V_1828 = V_1827.oceanIndex or 1
if V_1828 < 1 or V_1828 > #sOLO_OCEAN_WPS then
V_1828 = 1
end
if not V_1827.oceanLegOffset then
V_1827.oceanLegOffset = {
x = (math.random() - 0.5) * 700.0,
y = (math.random() - 0.5) * 700.0,
}
end
local V_1829 = tonumber(V_1827.networkFlyAlt) or 0.0
local V_1830 = tonumber(V_1827.wanderSpeed) or 360.0
local V_1831 = GetFrameTime() or 0.016
if V_1831 <= 0.0 or V_1831 > 0.1 then
V_1831 = 0.016
end
local V_1832 = V_1830 * V_1831
local networkPos_1 = V_1827.networkPos
for V_1833 = 1, 8 do
if V_1832 <= 0.05 then
break
end
V_1828 = V_1827.oceanIndex or 1
if V_1828 < 1 or V_1828 > #sOLO_OCEAN_WPS then
V_1828 = 1
V_1827.oceanIndex = 1
V_1827.oceanLegOffset = {
x = (math.random() - 0.5) * 700.0,
y = (math.random() - 0.5) * 700.0,
}
end
local V_1834 = sOLO_OCEAN_WPS[V_1828]
local oceanLegOffset_1 = V_1827.oceanLegOffset
local V_1835 = V_1834.x + (oceanLegOffset_1.x or 0.0)
local V_1836 = V_1834.y + (oceanLegOffset_1.y or 0.0)
local V_1837 = soloNetworkFlyZ(V_1835, V_1836, V_1829, V_1834.z)
local V_1838 = V_1835 - networkPos_1.x
local V_1839 = V_1836 - networkPos_1.y
local V_1840 = V_1837 - networkPos_1.z
local V_1841 = math.sqrt(V_1838 * V_1838 + V_1839 * V_1839 + V_1840 * V_1840)
if V_1841 < 40.0 then
V_1827.oceanIndex = (V_1828 % #sOLO_OCEAN_WPS) + 1
V_1827.oceanLegOffset = {
x = (math.random() - 0.5) * 700.0,
y = (math.random() - 0.5) * 700.0,
}
else
local V_1842 = 1.0 / V_1841
local V_1843 = V_1832
if V_1843 > V_1841 then
V_1843 = V_1841
end
local V_1844 = networkPos_1.x + V_1838 * V_1842 * V_1843
local V_1845 = networkPos_1.y + V_1839 * V_1842 * V_1843
local V_1846 = soloNetworkFlyZ(V_1844, V_1845, V_1829, networkPos_1.z + V_1840 * V_1842 * V_1843)
networkPos_1 = { x = V_1844, y = V_1845, z = V_1846 }
V_1832 = V_1832 - V_1843
if V_1841 - V_1843 < 40.0 then
V_1827.oceanIndex = (V_1828 % #sOLO_OCEAN_WPS) + 1
V_1827.oceanLegOffset = {
x = (math.random() - 0.5) * 700.0,
y = (math.random() - 0.5) * 700.0,
}
end
end
end
V_1827.networkPos = networkPos_1
Lumia.features.spoofServerCoords(true, networkPos_1, V_1827.owner)
end
function Lumia.features.applySoloSession(V_1847, soloSessionMode_1)
soloSessionMode_1 = tostring(soloSessionMode_1 or "Normal")
Lumia.state.soloSessionMode = soloSessionMode_1
Lumia.state.toggles["SoloSession"] = V_1847 and true or false
Lumia.features.stopSoloNetworkSpoof("solo")
local entity_8 = PlayerPedId()
if not V_1847 then
NetworkEndTutorialSession()
if
not Lumia.state.toggles["Invisible_Player"]
and not (Lumia.state.toggles["Noclipetypemode"] and Lumia.state._ncActiveMode == "Invisible")
then
SetEntityVisible(entity_8, true, false)
ResetEntityAlpha(entity_8)
end
return
end
if soloSessionMode_1 == "Full Insible" then
SetEntityVisible(entity_8, false, false)
if SetLocalPlayerVisibleLocally then
SetLocalPlayerVisibleLocally(true)
end
Lumia.features.startSoloNetworkSpoof({
owner = "solo",
networkFlyAlt = 0.0,
wanderSpeed = 360.0,
tickGuard = function()
return Lumia.state.toggles["SoloSession"] == true and Lumia.state.soloSessionMode == "Full Insible"
end,
})
return
end
__LCTR(8710, function()
if NetworkStartSoloTutorialSession then
NetworkStartSoloTutorialSession(0)
end
Wait(50)
NetworkEndTutorialSession()
end)
end
function Lumia.features.spoofPlayerModel(V_1848, V_1849)
if V_1848 then
SharkAPI.SyncTree.SpoofPlayerModel(true, V_1849)
else
SharkAPI.SyncTree.SpoofPlayerModel(false)
end
end
Lumia.features.sendDamage = function(entity_9, V_1850, V_1851)
if not entity_9 or entity_9 == 0 or not DoesEntityExist(entity_9) then
return
end
if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
return
end
V_1850 = V_1850 or GetHashKey("WEAPON_SNOWBALL")
V_1851 = (tonumber(V_1851) or 400.0) + 0.0
local V_1852 = (GetPedBoneCoords and GetPedBoneCoords(entity_9, 31086, 0.0, 0.0, 0.0)) or GetEntityCoords(entity_9)
pcall(
SharkAPI.SendDamageToEntity,
entity_9,
V_1852,
20,
true,
V_1850,
V_1851,
0,
0,
514,
747845569,
32846,
1359188717,
0,
0,
0,
0
)
end
Lumia.features.sendReaperPunchDamage = function(entity_10)
if not entity_10 or entity_10 == 0 or not DoesEntityExist(entity_10) then
return
end
if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
return
end
local coords_2 = GetEntityCoords(entity_10)
pcall(
SharkAPI.SendDamageToEntity,
entity_10,
vector3(coords_2.x + 0.0, coords_2.y + 0.0, coords_2.z + 0.0),
9,
true,
2725352035,
21,
0,
0,
522,
747845569,
32781,
2420426155,
3,
0,
1,
0
)
end
function Lumia.features.stopTeslaDrive()
local ped_3 = PlayerPedId()
local vehicle_1 = GetVehiclePedIsIn(ped_3, false)
if (not vehicle_1 or vehicle_1 == 0) and Lumia.state._teslaVeh and DoesEntityExist(Lumia.state._teslaVeh) then
vehicle_1 = Lumia.state._teslaVeh
end
SetPedKeepTask(ped_3, false)
SetBlockingOfNonTemporaryEvents(ped_3, false)
SetPedCanBeDraggedOut(ped_3, true)
FreezeEntityPosition(ped_3, false)
SetDriverAggressiveness(ped_3, 0.0)
ClearPedTasks(ped_3)
if vehicle_1 and vehicle_1 ~= 0 and DoesEntityExist(vehicle_1) then
if ClearVehicleTasksImmediately then
ClearVehicleTasksImmediately(vehicle_1)
elseif ClearVehicleTasks then
ClearVehicleTasks(vehicle_1)
end
SetVehicleUndriveable(vehicle_1, false)
SetVehicleForwardSpeed(vehicle_1, 0.0)
if BringVehicleToHalt then
BringVehicleToHalt(vehicle_1, 1.0, 1, false)
elseif SetVehicleHalt then
SetVehicleHalt(vehicle_1, 1.0, 1, false)
end
end
Lumia.state._teslaDriving = false
Lumia.state._teslaKind = nil
Lumia.state._teslaVeh = nil
Lumia.state._teslaAt = 0
end
function lumiaClearGodmodeState(entity_11)
entity_11 = entity_11 or PlayerPedId()
if entity_11 and entity_11 ~= 0 then
SetEntityProofs(entity_11, false, false, false, false, false, false, false, false)
local V_1853 = Lumia.state._godmodeRelGroup
if SetEntityOnlyDamagedByRelationshipGroup then
if V_1853 then
SetEntityOnlyDamagedByRelationshipGroup(entity_11, false, V_1853)
end
SetEntityOnlyDamagedByRelationshipGroup(entity_11, false, 0)
end
end
Lumia.state._godmodeRelGroup = nil
Lumia.state._godWas = false
Lumia.features.setGodmodeBypassHooks(false)
end
Lumia.features.clearGodmodeState = lumiaClearGodmodeState
function lumiaApplyGodmodeProofs(entity_12)
entity_12 = entity_12 or PlayerPedId()
if not entity_12 or entity_12 == 0 then
return
end
SetEntityProofs(entity_12, true, true, true, true, true, true, true, true)
local V_1854 = Lumia.state._godmodeRelGroup
if not V_1854 then
V_1854 = math.random(1, 100000)
Lumia.state._godmodeRelGroup = V_1854
end
if SetEntityOnlyDamagedByRelationshipGroup then
SetEntityOnlyDamagedByRelationshipGroup(entity_12, true, V_1854)
end
if not Lumia.state._godmodeHooksActive and Lumia.features.setGodmodeBypassHooks then
Lumia.features.setGodmodeBypassHooks(true)
end
end
function Lumia.features.tick()
if Lumia.state and Lumia.state._bootHooksLocked then
return
end
if Lumia.features.startFeatureBypassSyncLoop then
pcall(Lumia.features.startFeatureBypassSyncLoop)
end
if Lumia.util.needsFeatureTick and not Lumia.util.needsFeatureTick() then
return
end
local toggles_3 = Lumia.state.toggles
local sliders_2 = Lumia.state.sliders
local entity_13 = PlayerPedId()
if entity_13 == 0 then
return
end
local currentTime_9 = GetGameTimer()
local V_1855 = currentTime_9 >= (Lumia.state._slowTickAt or 0)
if V_1855 then
Lumia.state._slowTickAt = currentTime_9 + 100
end
if toggles_3["godmode"] then
if V_1855 or not Lumia.state._godWas then
lumiaApplyGodmodeProofs(entity_13)
end
Lumia.state._godWas = true
elseif Lumia.state._godWas or Lumia.state._godmodeRelGroup or Lumia.state._godmodeHooksActive then
lumiaClearGodmodeState(entity_13)
end
if toggles_3["semigod"] then
if GetEntityHealth(entity_13) < 150 then
SetEntityHealth(entity_13, 200)
end
end
if
toggles_3["Invisible_Player"]
or (
toggles_3["Noclipetypemode"]
and (Lumia.state._ncActiveMode == "Invisible" or Lumia.state.noclipMode == "Invisible")
)
then
SetEntityVisible(entity_13, false, false)
if toggles_3["Invisible_Player"] then
SetEntityAlpha(entity_13, 170, false)
if SetPlayerVisibleLocally then
SetPlayerVisibleLocally(PlayerId(), false)
end
if SetLocalPlayerVisibleLocally then
SetLocalPlayerVisibleLocally(true)
end
else
SetEntityAlpha(entity_13, 0, false)
end
Lumia.state._invisWas = true
elseif Lumia.state._invisWas then
if not (toggles_3["SoloSession"] and Lumia.state.soloSessionMode == "Full Insible") then
SetEntityVisible(entity_13, true, true)
ResetEntityAlpha(entity_13)
end
Lumia.state._invisWas = false
end
if toggles_3["infstamina"] then
RestorePlayerStamina(PlayerId(), 1.0)
end
if V_1855 and toggles_3["infaoxygen"] then
SetPedDiesInWater(entity_13, false)
if Lumia.features.setOxygenBypassHooks then
Lumia.features.setOxygenBypassHooks(true)
end
elseif V_1855 and Lumia.state._oxygenHooksActive and Lumia.features.setOxygenBypassHooks then
SetPedDiesInWater(entity_13, true)
Lumia.features.setOxygenBypassHooks(false)
end
if V_1855 and toggles_3["AutoRevive:1"] and IsEntityDead(entity_13) then
if (menu.F.isSeedAc()) or (menu.F.shouldUseSeedApi()) then
pcall(Lumia.features.seedRevive, nil, nil, 2)
elseif Lumia.features.nativeRevive then
Lumia.features.nativeRevive()
else
local coords_3 = GetEntityCoords(entity_13)
NetworkResurrectLocalPlayer(coords_3.x, coords_3.y, coords_3.z, GetEntityHeading(entity_13), true, false)
SetEntityHealth(entity_13, GetEntityMaxHealth(entity_13))
ClearPedBloodDamage(entity_13)
end
end
if V_1855 and toggles_3["AutoGiveArmour:1"] then
if GetPedArmour(entity_13) < 100 then
SetPedArmour(entity_13, 100)
end
end
if Lumia.features.ensureMovementBuffLoop then
pcall(Lumia.features.ensureMovementBuffLoop)
end
if toggles_3["superjump"] then
SetSuperJumpThisFrame(PlayerId())
end
if toggles_3["RunSpeed"] then
local V_1856 = tonumber(sliders_2["runspeedvelocity"]) or 4
if V_1856 < 0 then
V_1856 = 0
end
if V_1856 > 10 then
V_1856 = 10
end
local V_1857 = (V_1856 <= 0) and 1.0 or (1.0 + V_1856 * 0.35)
if not IsPedInAnyVehicle(entity_13, false) then
SetPedMoveRateOverride(entity_13, V_1857 + 0.0)
end
SetRunSprintMultiplierForPlayer(PlayerId(), math.min(1.49, 1.0 + (V_1856 * 0.049)))
Lumia.state._runSpeedWas = true
elseif Lumia.state._runSpeedWas then
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
if not IsPedInAnyVehicle(entity_13, false) then
SetPedMoveRateOverride(entity_13, 1.0)
end
Lumia.state._runSpeedWas = false
end
if V_1855 and toggles_3["NoRagdoll"] then
SetPedCanRagdoll(entity_13, false)
end
if toggles_3["NoCollisions_col"] then
SetEntityCollision(entity_13, false, false)
end
if V_1855 and toggles_3["ShrinkYourself"] then
SetPedConfigFlag(entity_13, 223, true)
end
if
V_1855
and (toggles_3["InfiniteAmmo"] or toggles_3["infiniteammo"] or toggles_3["FreezeAmmo"] or toggles_3["infammo"])
then
local weaponHash_1 = GetSelectedPedWeapon(entity_13)
if weaponHash_1 and weaponHash_1 ~= 0 then
SetPedInfiniteAmmo(entity_13, true, weaponHash_1)
SetPedInfiniteAmmoClip(entity_13, true)
end
end
local vehicle_2 = GetVehiclePedIsIn(entity_13, false)
if vehicle_2 ~= 0 then
if
V_1855
and (toggles_3["vehgod"] or toggles_3["veh_god"] or toggles_3["VehicleGod"] or toggles_3["vehiclegod"])
then
SetEntityInvincible(vehicle_2, true)
SetVehicleCanBeVisiblyDamaged(vehicle_2, false)
SetVehicleTyresCanBurst(vehicle_2, false)
SetDisableVehiclePetrolTankDamage(vehicle_2, true)
SetVehicleEngineCanDegrade(vehicle_2, false)
SetEntityProofs(vehicle_2, true, true, true, true, true, true, true, true)
end
if V_1855 and toggles_3["ForceEngineOn"] then
SetVehicleEngineOn(vehicle_2, true, true, false)
end
if V_1855 and toggles_3["Autorepair:1"] then
SetVehicleFixed(vehicle_2)
SetVehicleDeformationFixed(vehicle_2)
SetVehicleEngineHealth(vehicle_2, 1000.0)
SetVehicleBodyHealth(vehicle_2, 1000.0)
end
if V_1855 and toggles_3["UnlimitedFuel:1"] then
SetVehicleFuelLevel(vehicle_2, 100.0)
end
if toggles_3["InvisibleVehicle:1"] then
if V_1855 or not Lumia.state._vehInvisWas then
SetEntityVisible(vehicle_2, false, false)
end
Lumia.state._vehInvisWas = true
elseif Lumia.state._vehInvisWas then
SetEntityVisible(vehicle_2, true, false)
Lumia.state._vehInvisWas = false
end
if V_1855 and toggles_3["Reducedamage:1"] then
SetVehicleCanBeVisiblyDamaged(vehicle_2, false)
SetVehicleReceivesRampDamage(vehicle_2, false)
SetDisableVehiclePetrolTankDamage(vehicle_2, true)
SetVehicleEngineCanDegrade(vehicle_2, false)
if GetVehicleBodyHealth(vehicle_2) < 800.0 then
SetVehicleBodyHealth(vehicle_2, 1000.0)
end
if GetVehicleEngineHealth(vehicle_2) < 800.0 then
SetVehicleEngineHealth(vehicle_2, 1000.0)
end
end
if V_1855 and toggles_3["Driveoverobjects:1"] then
SetVehicleStrong(vehicle_2, true)
SetEntityProofs(vehicle_2, false, true, true, false, true, false, false, false)
end
if V_1855 and toggles_3["Boostengine:1"] then
SetVehicleEnginePowerMultiplier(vehicle_2, 80.0)
SetVehicleEngineTorqueMultiplier(vehicle_2, 40.0)
end
if toggles_3["Instantbrake:1"] then
if IsControlPressed(0, 76) or IsDisabledControlPressed(0, 76) then
SetVehicleForwardSpeed(vehicle_2, 0.0)
end
end
if V_1855 and (toggles_3["VehicleRGB:1"] or toggles_3["rainbowcar"]) then
local V_1858 = currentTime_9 / 12.0
local V_1859 = math.floor(math.sin(V_1858) * 127 + 128)
local V_1860 = math.floor(math.sin(V_1858 + 2.094) * 127 + 128)
local V_1861 = math.floor(math.sin(V_1858 + 4.188) * 127 + 128)
SetVehicleCustomPrimaryColour(vehicle_2, V_1859, V_1860, V_1861)
SetVehicleCustomSecondaryColour(vehicle_2, V_1859, V_1860, V_1861)
end
if toggles_3["EasyHandling:"] then
local V_1862 = tonumber(sliders_2["Easy:Handling"]) or 5
if V_1855 then
SetVehicleGravityAmount(vehicle_2, 15.0 + (V_1862 * 0.35))
SetVehicleReduceGrip(vehicle_2, false)
end
SetVehicleCheatPowerIncrease(vehicle_2, 1.0 + (V_1862 / 40.0))
end
if toggles_3["Horn:Boost"] then
if IsControlPressed(0, 86) or IsDisabledControlPressed(0, 86) then
local V_1863 = tonumber(sliders_2["HornBoost:"]) or 100
local V_1864 = GetEntitySpeed(vehicle_2)
SetVehicleForwardSpeed(vehicle_2, V_1864 + (V_1863 * 0.035))
end
end
if toggles_3["VehicleJump:1"] then
if IsControlJustPressed(0, 22) or IsDisabledControlJustPressed(0, 22) then
ApplyForceToEntity(vehicle_2, 1, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0, true, true, true, false, true)
end
end
if V_1855 and toggles_3["WaterproofEngine:1"] then
SetVehicleEngineCanDegrade(vehicle_2, false)
if IsEntityInWater(vehicle_2) then
SetVehicleEngineOn(vehicle_2, true, true, false)
end
end
if toggles_3["ShiftBoost"] then
if IsControlJustPressed(0, 21) or IsDisabledControlJustPressed(0, 21) then
local V_1865 = GetEntityForwardVector(vehicle_2)
local V_1866 = GetEntityVelocity(vehicle_2)
SetEntityVelocity(vehicle_2, V_1866.x + V_1865.x * 28.0, V_1866.y + V_1865.y * 28.0, V_1866.z + 0.5)
end
end
if toggles_3["speedboost"] then
SetVehicleCheatPowerIncrease(vehicle_2, 8.0)
if V_1855 then
ModifyVehicleTopSpeed(vehicle_2, 80.0)
SetVehicleEnginePowerMultiplier(vehicle_2, 60.0)
end
end
if toggles_3["TorqueMultiplier:1"] then
local V_1867 = tonumber(sliders_2["TorqueMultiplier:Amt"]) or 10
SetVehicleEngineTorqueMultiplier(vehicle_2, V_1867 + 0.0)
SetVehicleCheatPowerIncrease(vehicle_2, V_1867 * 0.35)
end
if V_1855 and toggles_3["BulletProofTires:1"] then
SetVehicleTyresCanBurst(vehicle_2, false)
end
if V_1855 and toggles_3["NeverFallMoto:1"] then
SetPedCanBeKnockedOffVehicle(entity_13, 1)
end
if toggles_3["TeslaWaypoint:1"] then
local V_1868 = GetFirstBlipInfoId(8)
if V_1868 ~= 0 and DoesBlipExist(V_1868) then
local V_1869 = GetBlipInfoIdCoord(V_1868)
SetVehicleEngineOn(vehicle_2, true, true, false)
SetVehicleUndriveable(vehicle_2, false)
SetDriverAbility(entity_13, 1.0)
SetDriverAggressiveness(entity_13, 1.0)
SetBlockingOfNonTemporaryEvents(entity_13, true)
SetPedKeepTask(entity_13, true)
SetPedCanBeDraggedOut(entity_13, false)
if
not Lumia.state._teslaDriving
or Lumia.state._teslaKind ~= "wp"
or (Lumia.state._teslaAt or 0) < GetGameTimer()
then
TaskVehicleDriveToCoordLongrange(
entity_13,
vehicle_2,
V_1869.x,
V_1869.y,
V_1869.z,
35.0,
1074528293,
15.0
)
Lumia.state._teslaDriving = true
Lumia.state._teslaKind = "wp"
Lumia.state._teslaVeh = vehicle_2
Lumia.state._teslaAt = GetGameTimer() + 4000
end
elseif Lumia.state._teslaDriving then
Lumia.features.stopTeslaDrive()
end
elseif toggles_3["TeslaMode:1"] then
SetVehicleEngineOn(vehicle_2, true, true, false)
SetVehicleUndriveable(vehicle_2, false)
SetPedKeepTask(entity_13, true)
SetDriverAbility(entity_13, 1.0)
SetDriverAggressiveness(entity_13, 1.0)
SetBlockingOfNonTemporaryEvents(entity_13, true)
SetPedCanBeDraggedOut(entity_13, false)
if not Lumia.state._teslaDriving or Lumia.state._teslaKind ~= "wander" then
TaskVehicleDriveWander(entity_13, vehicle_2, 30.0, 1074528293)
Lumia.state._teslaDriving = true
Lumia.state._teslaKind = "wander"
Lumia.state._teslaVeh = vehicle_2
end
elseif Lumia.state._teslaDriving then
Lumia.features.stopTeslaDrive()
end
if V_1855 and toggles_3["VehFollowPlayer:1"] then
local entity_14, V_1870 = nil, 9999.0
local coords_4 = GetEntityCoords(entity_13)
for V_1871, playerId_3 in ipairs(GetActivePlayers()) do
if playerId_3 ~= PlayerId() then
local entity_15 = GetPlayerPed(playerId_3)
if entity_15 and entity_15 ~= 0 then
local V_1872 = #(coords_4 - GetEntityCoords(entity_15))
if V_1872 < V_1870 then
V_1870 = V_1872
entity_14 = entity_15
end
end
end
end
if entity_14 and V_1870 > 8.0 then
local coords_5 = GetEntityCoords(entity_14)
if (Lumia.state._vehFollowAt or 0) < GetGameTimer() then
TaskVehicleDriveToCoord(
entity_13,
vehicle_2,
coords_5.x,
coords_5.y,
coords_5.z,
28.0,
0,
GetEntityModel(vehicle_2),
787004,
8.0,
true
)
Lumia.state._vehFollowAt = GetGameTimer() + 2500
end
end
end
elseif Lumia.state._teslaDriving then
Lumia.features.stopTeslaDrive()
elseif Lumia.state._vehInvisWas then
Lumia.state._vehInvisWas = false
end
if toggles_3["TeleportVision:1"] and not Lumia.state._tpVisionLoop and Lumia.features.startTeleportVisionLoop then
Lumia.features.startTeleportVisionLoop()
end
Lumia.features.autoParachuteTick()
if
toggles_3["Lazer:Eyes"]
or toggles_3["SAFE:Eyes"]
or toggles_3["Lazer:EyesRPG"]
or toggles_3["Lazer:EyesShit"]
then
Lumia.features.ensureLazerEyesLoop()
end
Lumia.features.tickExtra()
end
function Lumia.features.autoParachuteTick()
if not (Lumia.state.toggles and Lumia.state.toggles["autoparachute"]) then
return
end
local ped_4 = PlayerPedId()
if not ped_4 or ped_4 == 0 then
return
end
if IsPedInAnyVehicle(ped_4, false) then
return
end
local playerId_4 = PlayerId()
local weaponHash_2 = GetHashKey("GADGET_PARACHUTE")
if weaponHash_2 == 0 then
weaponHash_2 = 0xFBAB5776
end
local currentTime_10 = GetGameTimer()
if currentTime_10 >= (Lumia.state._autoChuteGiveAt or 0) then
Lumia.state._autoChuteGiveAt = currentTime_10 + 400
if not HasPedGotWeapon(ped_4, weaponHash_2, false) then
GiveWeaponToPed(ped_4, weaponHash_2, 1, false, false)
end
if SetPlayerHasReserveParachute then
SetPlayerHasReserveParachute(playerId_4)
end
end
local V_1873 = GetPedParachuteState and GetPedParachuteState(ped_4) or -1
if V_1873 == 1 or V_1873 == 2 then
return
end
if IsPedInParachuteFreeFall and IsPedInParachuteFreeFall(ped_4) then
else
local V_1874 = GetEntityVelocity(ped_4)
local V_1875 = (type(V_1874) == "vector3" and V_1874.z or (V_1874 and V_1874.z) or 0.0) < -8.0
if not V_1875 then
local V_1876, V_1877 = pcall(IsPedFalling, ped_4)
V_1875 = V_1876 and V_1877 == true
end
if not V_1875 then
return
end
end
local coords_6 = GetEntityCoords(ped_4)
local V_1878 = false
if GetEntityHeightAboveGround then
local V_1879 = GetEntityHeightAboveGround(ped_4)
V_1878 = type(V_1879) == "number" and V_1879 > 8.0
end
if not V_1878 then
local V_1880, V_1881 = GetGroundZFor_3dCoord(coords_6.x, coords_6.y, coords_6.z, false)
if V_1880 and type(V_1881) == "number" and (coords_6.z - V_1881) > 8.0 then
V_1878 = true
elseif not V_1880 and coords_6.z > 50.0 then
V_1878 = true
end
end
if not V_1878 then
return
end
if SetPlayerCanLeaveParachuteSmokeTrail then
SetPlayerCanLeaveParachuteSmokeTrail(playerId_4, false)
end
if SetPlayerParachuteVariationOverride then
SetPlayerParachuteVariationOverride(playerId_4, 0, 0, 0, true)
end
if ForcePedToOpenParachute then
ForcePedToOpenParachute(ped_4)
end
if TaskParachute then
TaskParachute(ped_4, true)
end
end
function Lumia.features.startTeleportVisionLoop()
if Lumia.state._tpVisionLoop then
return
end
Lumia.state._tpVisionLoop = true
__LCTR(9156, function()
while Lumia.state.toggles and Lumia.state.toggles["TeleportVision:1"] do
pcall(Lumia.features.teleportVisionTick)
Wait(0)
end
Lumia.state._tpVisionLoop = false
end)
end
function Lumia.features.teleportVisionTick()
if not (Lumia.state.toggles and Lumia.state.toggles["TeleportVision:1"]) then
return
end
local ped_5 = PlayerPedId()
if not ped_5 or ped_5 == 0 then
return
end
local cameraCoords = GetGameplayCamCoord()
local cameraRotation = GetGameplayCamRot(2)
local V_1882 = math.rad(cameraRotation.x)
local V_1883 = math.rad(cameraRotation.z)
local V_1884 = math.abs(math.cos(V_1882))
local V_1885 = -math.sin(V_1883) * V_1884
local V_1886 = math.cos(V_1883) * V_1884
local V_1887 = math.sin(V_1882)
local V_1888 = 250.0
local V_1889 = cameraCoords.x + V_1885 * V_1888
local V_1890 = cameraCoords.y + V_1886 * V_1888
local V_1891 = cameraCoords.z + V_1887 * V_1888
local V_1892 = 1 + 2 + 4 + 16
local V_1893
if StartExpensiveSynchronousShapeTestLosProbe then
V_1893 = StartExpensiveSynchronousShapeTestLosProbe(
cameraCoords.x,
cameraCoords.y,
cameraCoords.z,
V_1889,
V_1890,
V_1891,
V_1892,
ped_5,
7
)
elseif StartShapeTestLosProbe then
V_1893 = StartShapeTestLosProbe(
cameraCoords.x,
cameraCoords.y,
cameraCoords.z,
V_1889,
V_1890,
V_1891,
V_1892,
ped_5,
7
)
else
V_1893 =
StartShapeTestRay(cameraCoords.x, cameraCoords.y, cameraCoords.z, V_1889, V_1890, V_1891, V_1892, ped_5, 7)
end
local V_1894, V_1895, V_1896 = GetShapeTestResult(V_1893)
local x_6, y_3, V_1897 = V_1889, V_1890, V_1891
if V_1894 == 1 and V_1895 == 1 and V_1896 then
x_6 = V_1896.x + 0.0
y_3 = V_1896.y + 0.0
V_1897 = V_1896.z + 0.0
end
local coords_7 = GetEntityCoords(ped_5)
local V_1898, V_1899, V_1900 = 220, 220, 225
if Lumia.colors and type(Lumia.colors.primary) == "table" then
V_1898 = tonumber(Lumia.colors.primary[1] or Lumia.colors.primary.r) or V_1898
V_1899 = tonumber(Lumia.colors.primary[2] or Lumia.colors.primary.g) or V_1899
V_1900 = tonumber(Lumia.colors.primary[3] or Lumia.colors.primary.b) or V_1900
end
DrawLine(coords_7.x, coords_7.y, coords_7.z + 0.45, x_6, y_3, V_1897, V_1898, V_1899, V_1900, 220)
DrawMarker(
28,
x_6,
y_3,
V_1897 + 0.05,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.22,
0.22,
0.22,
V_1898,
V_1899,
V_1900,
180,
false,
false,
2,
false,
nil,
nil,
false
)
local V_1901 = IsControlJustPressed(0, 38)
or IsDisabledControlJustPressed(0, 38)
or (SharkAPI and SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x45))
if V_1901 and GetGameTimer() >= (Lumia.state._tpVisionAt or 0) then
Lumia.state._tpVisionAt = GetGameTimer() + 250
local entity_16 = ped_5
if IsPedInAnyVehicle(ped_5, false) then
local V_1902 = GetVehiclePedIsIn(ped_5, false)
if V_1902 and V_1902 ~= 0 then
entity_16 = V_1902
end
end
SetEntityCoordsNoOffset(entity_16, x_6, y_3, V_1897 + 0.35, false, false, false)
end
end
local animationDict = "melee@unarmed@streamed_variations"
local V_1903 = "plyr_takedown_front_slap"
local V_1904 = 2.45
function Lumia.features.slapModeEnsureAnim()
if HasAnimDictLoaded(animationDict) then
return true
end
RequestAnimDict(animationDict)
local V_1905 = GetGameTimer() + 1500
while not HasAnimDictLoaded(animationDict) and GetGameTimer() < V_1905 do
Wait(0)
RequestAnimDict(animationDict)
end
return HasAnimDictLoaded(animationDict) == true
end
function Lumia.features.slapModeMenuBlocksE()
if Lumia.open == true then
return true
end
if Lumia.prompt and Lumia.prompt.isActive and Lumia.prompt.isActive() then
return true
end
return false
end
function Lumia.features.slapModeFindTarget(V_1906)
V_1906 = tonumber(V_1906) or V_1904
local entity_17 = PlayerPedId()
if not entity_17 or entity_17 == 0 then
return nil
end
local coords_8 = GetEntityCoords(entity_17)
local V_1907, V_1908 = nil, V_1906 + 0.001
for V_1909, playerId_5 in ipairs(GetActivePlayers()) do
if playerId_5 ~= PlayerId() then
local entity_18 = GetPlayerPed(playerId_5)
if entity_18 and entity_18 ~= 0 and DoesEntityExist(entity_18) and not IsEntityDead(entity_18) then
local V_1910 = #(coords_8 - GetEntityCoords(entity_18))
if V_1910 < V_1908 then
V_1907, V_1908 = entity_18, V_1910
end
end
end
end
return V_1907
end
function Lumia.features.slapModeDamageTarget(entity_19, V_1911)
if not entity_19 or entity_19 == 0 or not DoesEntityExist(entity_19) then
return
end
if not SharkAPI or type(SharkAPI.SendDamageToEntity) ~= "function" then
return
end
V_1911 = tostring(V_1911 or "Punch")
local V_1912 = (GetPedBoneCoords and GetPedBoneCoords(entity_19, 31086, 0.0, 0.0, 0.0))
or GetEntityCoords(entity_19)
if V_1911 == "Kill" then
local modelHash_3 = GetHashKey("WEAPON_SNOWBALL")
pcall(
SharkAPI.SendDamageToEntity,
entity_19,
V_1912,
20,
true,
modelHash_3,
99,
0,
0,
514,
747845569,
32846,
1359188717,
0,
0,
0,
0
)
return
end
if menu.F.isReaperAc and menu.F.isReaperAc() then
Lumia.features.sendReaperPunchDamage(entity_19)
return
end
local modelHash_4 = GetHashKey("WEAPON_SNOWBALL")
for V_1913 = 1, 6 do
if not DoesEntityExist(entity_19) or IsEntityDead(entity_19) then
break
end
pcall(
SharkAPI.SendDamageToEntity,
entity_19,
V_1912,
12,
true,
modelHash_4,
25,
0,
0,
514,
747845569,
32846,
1359188717,
0,
0,
0,
0
)
end
end
function Lumia.features.doSlapModeHit()
if Lumia.features.slapModeMenuBlocksE() then
return
end
local playerPed_5 = PlayerPedId()
if not playerPed_5 or playerPed_5 == 0 then
return
end
local currentTime_11 = GetGameTimer()
if currentTime_11 < (Lumia.state._slapHitAt or 0) then
return
end
Lumia.state._slapHitAt = currentTime_11 + 650
if Lumia.features.slapModeEnsureAnim() then
ClearPedSecondaryTask(playerPed_5)
TaskPlayAnim(playerPed_5, animationDict, V_1903, 8.0, -8.0, 900, 48, 0.0, false, false, false)
end
local V_1914 = "Punch"
local V_1915 = Lumia.features.slapModeFindTarget(V_1904)
if V_1915 then
Lumia.features.slapModeDamageTarget(V_1915, V_1914)
end
end
function Lumia.features.startSlapModeLoop()
if Lumia.state._slapModeLoop then
return
end
Lumia.state._slapModeLoop = true
__LCTR(9446, function()
while Lumia.state.toggles and Lumia.state.toggles.SlapMode do
if not Lumia.features.slapModeMenuBlocksE() then
local V_1916 = IsControlJustPressed(0, 38)
or IsDisabledControlJustPressed(0, 38)
or (SharkAPI and SharkAPI.IsKeyJustPressed and SharkAPI.IsKeyJustPressed(0x45))
if V_1916 then
Lumia.features.doSlapModeHit()
end
end
Wait(0)
end
Lumia.state._slapModeLoop = false
end)
end
function Lumia.features.registerAll()
if menu.F._built or menu.F._building or Lumia.state._menuBuildThread then
return
end
Lumia.state._menuBuildThread = true
__LCTR(9376, function()
Lumia.state._buildYield = true
Lumia.state._buildYieldN = 0
local V_1917, V_1918 = pcall(menu.F.buildAll)
Lumia.state._buildYield = false
if not V_1917 and Lumia.f8 then
pcall(Lumia.f8, "[Lumia] menu build: " .. tostring(V_1918))
end
pcall(menu.F.dedupeMainTabs)
end)
end
function Lumia.getImportGifFn()
if type(SharkAPI) ~= "table" or type(SharkAPI.Images) ~= "table" then
return nil
end
local images = SharkAPI.Images
return images.ImportGifFromUrl
or images.ImportGIFFromUrl
or images.ImportGif
or images.ImportGIF
or images.ImportAnimatedImageFromUrl
end
function Lumia.detectBannerIsGif(V_1919, V_1920, V_1921)
V_1921 = type(V_1921) == "table" and V_1921 or {}
if V_1921.isGif == false or V_1921.gif == false then
return false
end
if V_1921.isGif == true or V_1921.gif == true then
return true
end
local V_1922 = tostring(V_1921.mime or V_1921.contentType or V_1921.mimeType or ""):lower()
if
V_1922:find("png", 1, true)
or V_1922:find("jpeg", 1, true)
or V_1922:find("jpg", 1, true)
or V_1922:find("webp", 1, true)
then
return false
end
if V_1922:find("gif", 1, true) then
return true
end
local V_1923 = tostring(V_1921.dataUrl or V_1921.bannerDataUrl or "")
if V_1923:find("image/png", 1, true) or V_1923:find("image/jpeg", 1, true) then
return false
end
if V_1923:find("image/gif", 1, true) or V_1923:find("^data:image/gif", 1) then
return true
end
local V_1924 = tostring(V_1919 or ""):lower()
if V_1924:find("%.png") or V_1924:find("%.jpe?g") or V_1924:find("%.webp") then
return false
end
if V_1924:find("%.gif") or V_1924 == "gif" or V_1924 == "lumia.gif" then
return true
end
local V_1925 = tostring(V_1920 or ""):lower()
if V_1925:find("%.png") or V_1925:find("%.jpe?g") then
return false
end
if V_1925:find("%.gif") or V_1925:find("image/gif", 1, true) or V_1925:find("output=gif", 1, true) then
return true
end
local V_1926 = tostring(V_1921.name or ""):lower()
if V_1926 ~= "" and V_1926:find("gif", 1, true) and not V_1926:find("png", 1, true) then
return true
end
return false
end
function bannerUrlDecode(V_1927)
if type(V_1927) ~= "string" then
return V_1927
end
return V_1927:gsub("%%(%x%x)", function(V_1928)
return string.char(tonumber(V_1928, 16))
end):gsub("+", " ")
end
function bannerResolveDirectUrl(V_1929)
if type(V_1929) ~= "string" or V_1929 == "" then
return V_1929
end
if V_1929:find("^data:", 1) or not V_1929:find("wsrv%.nl", 1) then
return V_1929
end
local V_1930 = V_1929:match("[?&]url=([^&]+)")
if V_1930 and V_1930 ~= "" then
return bannerUrlDecode(V_1930)
end
return V_1929
end
function Lumia.importBannerGifTexture(V_1931, V_1932, V_1933, V_1934)
if LUMIA_TEST_NO_BANNER_IMPORT then
if type(V_1934) == "function" then
pcall(V_1934, false)
end
return false
end
V_1934 = type(V_1934) == "function" and V_1934 or function() end
__LCTR(9553, function()
local V_1935 = Lumia.getImportGifFn()
local function getCurrentTime_13(V_1936)
if type(V_1936) == "table" and type(V_1936.Completed) == "function" then
local V_1937 = GetGameTimer() + 20000
while not V_1936.Completed() and GetGameTimer() < V_1937 do
Wait(40)
end
else
Wait(120)
end
end
local function F_42(V_1938)
if type(V_1938) ~= "string" or V_1938 == "" then
return false
end
if V_1938:find("^data:", 1) then
Lumia.TraceAlways("gif skip dataUrl", "len=" .. tostring(#V_1938), "name=" .. tostring(V_1931))
return false
end
if V_1935 then
local V_1939, V_1940 = pcall(V_1935, V_1931, V_1938)
if V_1939 and V_1940 ~= false then
Lumia.TraceChange(
"gifImport",
"gif importFn ok",
"name=" .. tostring(V_1931),
"ret=" .. tostring(V_1940)
)
return true
end
Lumia.TraceAlways(
"gif importFn fail",
"name=" .. tostring(V_1931),
"err=" .. tostring(V_1940),
"ok=" .. tostring(V_1939)
)
end
return false
end
local function F_43(V_1941)
if type(V_1941) ~= "string" or #V_1941 < 6 then
return false
end
local V_1942 = V_1941:sub(1, 6)
if V_1942 ~= "GIF87a" and V_1942 ~= "GIF89a" then
return false
end
if #V_1941 > 6291456 then
Lumia.TraceAlways("gif skip huge bytes", "bytes=" .. tostring(#V_1941), "name=" .. tostring(V_1931))
return false
end
local V_1943 = SharkAPI.Images
and (
SharkAPI.Images.ImportGifFromData
or SharkAPI.Images.ImportGifFromBytes
or SharkAPI.Images.ImportGifData
)
if V_1943 and #V_1941 <= 6291456 then
local V_1944, V_1945 = pcall(V_1943, V_1931, V_1941)
if not V_1944 or V_1945 == false then
V_1944, V_1945 = pcall(V_1943, V_1941, V_1931)
end
if V_1944 and V_1945 ~= false then
Wait(120)
return true
end
end
return false
end
local V_1946 = SharkAPI.Images
and (
SharkAPI.Images.ImportGifFromData
or SharkAPI.Images.ImportGifFromBytes
or SharkAPI.Images.ImportGifData
)
if not V_1935 and not V_1946 then
Lumia.DevPrint("[banner] no GIF/image import API for", tostring(V_1931))
V_1934(false, true)
return
end
local V_1947 = bannerResolveDirectUrl(V_1932)
local V_1948 = false
local V_1949 = false
local V_1950 = 0
Lumia.TraceChange("gifStart", "gif load start", "name=" .. tostring(V_1931), "hint=" .. tostring(V_1933))
if V_1947:find("^https?://", 1) and not V_1947:find("^data:", 1) then
if F_42(V_1947) then
Lumia.TraceChange("gifOk", "gif ok url", "name=" .. tostring(V_1931))
V_1934(true, true)
return
end
Lumia.fetchBytes(V_1947, function(V_1951, V_1952)
if V_1951 and type(V_1952) == "string" then
V_1950 = #V_1952
if F_43(V_1952) then
V_1948 = true
elseif F_42(V_1947) then
V_1948 = true
end
end
V_1949 = true
end)
local currentTime_12 = GetGameTimer()
while not V_1949 and (GetGameTimer() - currentTime_12) < 15000 do
Wait(40)
end
if V_1948 then
Lumia.TraceChange("gifOk", "gif ok bytes", "bytes=" .. tostring(V_1950), "name=" .. tostring(V_1931))
V_1934(true, true)
return
end
Lumia.TraceAlways(
"gif fail url",
"name=" .. tostring(V_1931),
"bytes=" .. tostring(V_1950),
"url=" .. tostring(V_1947):sub(1, 60)
)
end
if type(V_1947) == "string" and V_1947:find("^https?://", 1) and F_42(V_1947) then
V_1934(true, true)
return
end
V_1934(false, true)
end)
end
function Lumia.importBannerTexture(V_1953, V_1954, V_1955, V_1956)
if LUMIA_TEST_NO_BANNER_IMPORT then
if type(V_1956) == "function" then
pcall(V_1956, false)
end
return false
end
if V_1955 then
V_1956 = V_1955
V_1955 = nil
end
V_1956 = type(V_1956) == "function" and V_1956 or function() end
__LCTR(9701, function()
local V_1957 = V_1955 == true
if V_1955 ~= true and V_1955 ~= false then
V_1957 = Lumia.detectBannerIsGif(nil, V_1954, {}) and true or false
end
if V_1957 then
Lumia.importBannerGifTexture(V_1953, V_1954, nil, V_1956)
return
end
local V_1958 = false
local V_1959 = V_1954
local function F_44(V_1960)
if type(V_1960) ~= "string" or V_1960 == "" then
return false
end
if V_1960:find("^data:", 1) and #V_1960 > 100000 then
Lumia.TraceAlways("banner skip huge dataUrl", "len=" .. tostring(#V_1960), "name=" .. tostring(V_1953))
return false
end
if SharkAPI.Images.ImportMultiImages then
local V_1961, V_1962 = pcall(SharkAPI.Images.ImportMultiImages, {
{ name = V_1953, url = V_1960 },
})
if V_1961 and V_1962 then
return true
end
end
if SharkAPI.Images.ImportImageFromUrl then
local V_1963 = pcall(SharkAPI.Images.ImportImageFromUrl, V_1953, V_1960)
if V_1963 then
return true
end
end
return false
end
if V_1959:find("/fivem/", 1) or V_1959:find("/api/", 1) or V_1959:find("custom%-banners", 1) then
if F_44(V_1959) then
V_1956(true, false)
return
end
Lumia.fetchBytes(V_1959, function(V_1964, V_1965)
if V_1964 and type(V_1965) == "string" and Lumia.util.isImageBytes(V_1965) and #V_1965 <= 70000 then
local V_1966 = Lumia.util.bytesToDataUrl(V_1965, V_1953 .. ".png")
if V_1966 and #V_1966 <= 100000 and F_44(V_1966) then
V_1956(true, false)
return
end
end
Lumia.TraceAlways(
"custom banner url import fail",
"name=" .. tostring(V_1953),
"bytes=" .. tostring(type(V_1965) == "string" and #V_1965 or 0)
)
V_1956(false, false)
end)
return
end
if SharkAPI.Images.ImportMultiImages then
local V_1967, V_1968 = pcall(SharkAPI.Images.ImportMultiImages, {
{ name = V_1953, url = V_1954 },
})
if V_1967 and V_1968 then
V_1958 = true
end
elseif SharkAPI.Images.ImportImageFromUrl then
local V_1969 = pcall(SharkAPI.Images.ImportImageFromUrl, V_1953, V_1954)
V_1958 = V_1969 and true or false
end
if not V_1958 and type(V_1954) == "string" and V_1954:find("lumiaa%.wtf/assets/images/banners", 1) then
local V_1970 = Lumia.bannerImportUrl(V_1954, V_1953) or V_1954
if V_1970 ~= V_1954 then
V_1958 = F_44(V_1970)
end
end
if not V_1958 and type(V_1954) == "string" and V_1954:find("lumiaa%.wtf", 1) then
local V_1971 = Lumia.util.urlEncode(V_1954) or V_1954
local V_1972 = Lumia.protect.urls.wsrvPrefix() .. V_1971 .. Lumia.protect.urls.wsrvSuffix("png")
V_1958 = F_44(V_1972)
end
V_1956(V_1958 and true or false, false)
end)
end
function Lumia.bannerTextureName(V_1973)
local V_1974 = tostring(V_1973 or "v7banner.png"):lower()
if V_1974 == "v7banner.png" or V_1974 == "default" then
return "lumia_v7_banner"
end
if V_1974 == "bw.png" or V_1974 == "black" then
return "lumia_banner_bw"
end
if V_1974 == "lumia.gif" or V_1974 == "gif" then
return "lumia_banner_gif"
end
local V_1975 = V_1974:gsub("[^%w]", "")
if #V_1975 > 28 then
V_1975 = V_1975:sub(1, 28)
end
if V_1975 == "" then
V_1975 = "custom"
end
return "lumia_banner_" .. V_1975
end
function Lumia.setBannerImage(url_2, file_2, V_1976)
if type(url_2) ~= "string" or url_2 == "" then
return false
end
V_1976 = type(V_1976) == "table" and V_1976 or {}
file_2 = type(file_2) == "string" and file_2 or tostring(file_2 or "")
if Lumia.state.loaderActive then
Lumia.state._pendingBannerLoad = { url = url_2, file = file_2, opts = V_1976 }
return false
end
Lumia.banner = Lumia.banner or {}
if V_1976.userPick == true then
Lumia.banner._gifHold = nil
elseif Lumia.banner._gifHold == true then
Lumia.banner.ready = true
Lumia.banner.loading = false
Lumia.banner.hasTexture = true
Lumia.banner.fallback = false
Lumia.banner.gifNative = true
Lumia.banner._gifReady = true
Lumia.banner.isGif = true
if type(Lumia.banner.gifTex) == "string" and Lumia.banner.gifTex ~= "" then
Lumia.banner.name = Lumia.banner.gifTex
end
return true
end
if Lumia.banner._gifImporting == true and V_1976.userPick ~= true then
return true
end
local isGif_1 = Lumia.detectBannerIsGif(file_2, url_2, V_1976) and true or false
if
isGif_1
and Lumia.banner.gifNative == true
and Lumia.banner._gifReady == true
and Lumia.banner.hasTexture == true
and Lumia.banner.fallback ~= true
and tostring(Lumia.banner.file or "") == file_2
then
return true
end
if
V_1976.force ~= true
and Lumia.banner.file == file_2
and Lumia.banner.url == url_2
and (Lumia.banner.loading == true or Lumia.banner.hasTexture == true)
and (not isGif_1 or Lumia.banner.gifNative == true or Lumia.banner.loading == true)
then
return true
end
Lumia.state._bannerTexSeq = (Lumia.state._bannerTexSeq or 0) + 1
local V_1977 = Lumia.state._bannerTexSeq
if isGif_1 and url_2:find("^data:", 1) then
Lumia.TraceAlways(
"banner gif dataUrl pending redirect",
"file=" .. tostring(file_2),
"len=" .. tostring(#url_2)
)
end
local V_1978 = tostring(file_2 or ""):lower()
local V_1979 = V_1978 == "v7banner.png" or V_1978 == "bw.png" or V_1978 == "lumia.gif"
local name_2 = V_1979 and Lumia.bannerTextureName(file_2)
or (Lumia.bannerTextureName(file_2) .. "_" .. tostring(V_1977))
local name_3 = Lumia.banner.name
local url_3 = Lumia.banner.url
local file_3 = Lumia.banner.file
local isGif_2 = Lumia.banner.isGif
local gifNative_1 = Lumia.banner.gifNative
local V_1980 = Lumia.banner.hasTexture == true
and Lumia.banner.fallback ~= true
and type(name_3) == "string"
and name_3 ~= ""
Lumia.banner.file = file_2
Lumia.banner.loading = true
Lumia.banner.isGif = isGif_1
if V_1980 then
Lumia.banner.ready = true
Lumia.banner.fallback = false
Lumia.banner.hasTexture = true
else
Lumia.banner.name = name_2
Lumia.banner.ready = false
Lumia.banner.fallback = false
Lumia.banner.hasTexture = false
end
__LCTR(9856, function()
Wait(10000)
if V_1977 ~= Lumia.state._bannerTexSeq then
return
end
if Lumia.banner.loading then
Lumia.banner.loading = false
if not (V_1980 and Lumia.banner.hasTexture == true) then
Lumia.banner.ready = true
Lumia.banner.hasTexture = false
Lumia.banner.fallback = true
end
Lumia.TraceAlways("banner watchdog fallback", "file=" .. tostring(file_2))
end
end)
local function F_45(V_1981, V_1982, V_1983)
if V_1977 ~= Lumia.state._bannerTexSeq then
return
end
if Lumia.banner._gifHold == true then
Lumia.banner.loading = false
Lumia.banner.ready = true
Lumia.banner.hasTexture = true
Lumia.banner.fallback = false
Lumia.banner.gifNative = true
Lumia.banner._gifReady = true
Lumia.banner.isGif = true
Lumia.banner.name = Lumia.banner.gifTex or Lumia.BANNER_GIF_TEX
return
end
Lumia.banner.isGif = isGif_1
Lumia.banner.loading = false
if V_1982 == true then
Lumia.banner.name = name_2
Lumia.banner.gifNative = false
Lumia.banner._gifReady = false
Lumia.banner.ready = true
Lumia.banner.hasTexture = true
Lumia.banner.fallback = false
Lumia.state._uiDirty = true
Lumia.state._uiRecN = 0
elseif V_1980 then
Lumia.banner.name = name_3
Lumia.banner.file = file_3
Lumia.banner.url = url_3
Lumia.banner.isGif = isGif_2
Lumia.banner.gifNative = gifNative_1
Lumia.banner.ready = true
Lumia.banner.hasTexture = true
Lumia.banner.fallback = false
Lumia.banner.loading = false
else
Lumia.banner.ready = true
Lumia.banner.hasTexture = false
Lumia.banner.fallback = true
Lumia.TraceAlways(
"banner import fail",
"file=" .. tostring(file_2),
"url=" .. tostring(V_1981 or url_2):sub(1, 72)
)
end
Lumia.TraceChange(
"bannerReady",
"banner ready",
"file=" .. tostring(file_2),
"gif=" .. tostring(isGif_1),
"ok=" .. tostring(V_1982)
)
end
local function F_46(importUrl_1)
Lumia.banner.importUrl = importUrl_1
if isGif_1 and type(importUrl_1) == "string" and not importUrl_1:find("^data:", 1) then
Lumia.banner._gifImporting = true
Lumia.importBannerGifTexture(Lumia.BANNER_GIF_TEX, importUrl_1, file_2, function(V_1984)
Lumia.banner.loading = false
Lumia.banner._gifImporting = false
if V_1984 == true then
Lumia.banner.name = Lumia.BANNER_GIF_TEX
Lumia.banner.gifTex = Lumia.BANNER_GIF_TEX
Lumia.banner.gifNative = true
Lumia.banner._gifReady = true
Lumia.banner._gifHold = true
Lumia.banner.isGif = true
Lumia.banner.ready = true
Lumia.banner.hasTexture = true
Lumia.banner.fallback = false
Lumia.state._uiTabCache = nil
Lumia.state._uiDirty = true
Lumia.state._uiRecN = 0
return
end
if V_1977 ~= Lumia.state._bannerTexSeq then
return
end
F_45(importUrl_1, false, true)
end)
return
end
local V_1985 = Lumia.bannerImportUrl(importUrl_1, file_2)
Lumia.importBannerTexture(name_2, V_1985, false, function(V_1986, V_1987)
F_45(V_1985, V_1986, V_1987)
end)
end
local function F_47(V_1988, V_1989)
return V_1988
end
if url_2:find("^data:image", 1) then
local V_1990 = tostring(file_2 or "")
if url_2:find("^data:image/gif", 1) then
isGif_1 = true
Lumia.banner.isGif = true
elseif url_2:find("^data:image/png", 1) or url_2:find("^data:image/jpeg", 1) then
isGif_1 = false
Lumia.banner.isGif = false
end
if V_1990:find("custom_", 1, true) and Lumia.panel and Lumia.panel.authBody then
local V_1991 = Lumia.panel.authBody({ file = V_1990 })
local url_4 = Lumia.panel.API .. "/fivem/menu/custom-banners/raw?" .. Lumia.panel.buildQuery(V_1991)
Lumia.TraceAlways("setBanner redirect dataUrl->raw", "len=" .. tostring(#url_2), "file=" .. V_1990)
Lumia.banner.url = url_4
F_46(F_47(url_4, V_1990))
return true
end
if V_1990 ~= "" and (V_1990 == "v7banner.png" or V_1990 == "bw.png" or V_1990 == "lumia.gif") then
local url_5 = Lumia.protect.urls.banners(V_1990)
Lumia.banner.url = url_5
F_46(F_47(url_5, V_1990))
return true
end
if isGif_1 or url_2:find("^data:image/gif", 1) or #url_2 > 48000 then
Lumia.TraceAlways("setBanner refuse dataUrl", "len=" .. tostring(#url_2), "gif=" .. tostring(isGif_1))
Lumia.banner.loading = false
Lumia.banner.ready = false
Lumia.banner.fallback = true
return false
end
Lumia.banner.url = url_2
F_46(url_2)
return true
end
if url_2:find("^https?://", 1) then
Lumia.banner.url = url_2
F_46(F_47(url_2, file_2))
return true
end
Lumia.banner.url = url_2
Lumia.banner.loading = false
return false
end
function Lumia.flushPendingStartupAssets()
if Lumia.state._pendingBannerLoad then
local V_1992 = Lumia.state._pendingBannerLoad
Lumia.state._pendingBannerLoad = nil
pcall(Lumia.setBannerImage, V_1992.url, V_1992.file, V_1992.opts or {})
end
local V_1993 = Lumia.state._pendingPanelBanner
if type(V_1993) == "table" and V_1993.file and Lumia.applyPanelBannerFile then
Lumia.state._pendingPanelBanner = nil
pcall(Lumia.applyPanelBannerFile, V_1993.file, V_1993.primary, V_1993.opts or {})
end
end
function Lumia.loadBanner(V_1994)
if Lumia.banner and Lumia.banner._gifHold == true then
return
end
if Lumia.state.loaderActive and Lumia.state._loaderCaching ~= true then
return
end
Lumia.banner = Lumia.banner or {}
local file_4 = Lumia.banner.file
if not file_4 or file_4 == "" then
local V_1995 = tostring(Lumia.banner.url or "")
file_4 = V_1995:match("banners/([^%?]+)$") or "v7banner.png"
Lumia.banner.file = file_4
end
if type(Lumia.banner.url) ~= "string" or Lumia.banner.url == "" then
if Lumia.protect.urls.banners then
Lumia.banner.url = Lumia.protect.urls.banners(tostring(file_4))
else
return
end
end
if not V_1994 and Lumia.banner.loading then
return
end
if not V_1994 and Lumia.banner.ready and Lumia.banner.hasTexture == true and Lumia.banner.fallback ~= true then
return
end
if tostring(file_4):find("custom_", 1, true) then
Lumia.loadCustomBannerFromPanel(file_4, nil, {})
return
end
if not tostring(Lumia.banner.url):find("^https?://", 1) or tostring(Lumia.banner.url):find("^data:", 1) then
Lumia.banner.url = Lumia.protect.urls.banners(tostring(file_4))
end
Lumia.setBannerImage(Lumia.banner.url, file_4, {
isGif = Lumia.detectBannerIsGif(file_4, Lumia.banner.url, {}) and true or false,
})
end
function Lumia.lockBannerLocal(V_1996)
Lumia.state.bannerLocalLock = V_1996 and true or false
Lumia.state.bannerLocalLockAt = GetGameTimer and GetGameTimer() or 0
end
function Lumia.loadCustomBannerFromPanel(panelBannerFile_4, V_1997, V_1998)
if
type(panelBannerFile_4) ~= "string"
or panelBannerFile_4 == ""
or not panelBannerFile_4:find("custom_", 1, true)
then
return false
end
if not Lumia.panel or not Lumia.panel.request or not Lumia.panel.authBody then
return false
end
V_1998 = type(V_1998) == "table" and V_1998 or {}
if
Lumia.banner
and Lumia.banner.file == panelBannerFile_4
and (Lumia.banner.ready == true or Lumia.banner.loading == true)
and V_1998.forceRestart ~= true
then
if V_1997 then
Lumia.applyPrimaryColor(V_1997)
end
return true
end
Lumia.state._bannerLoadSeq = (Lumia.state._bannerLoadSeq or 0) + 1
local V_1999 = Lumia.state._bannerLoadSeq
Lumia.state.panelBannerFile = panelBannerFile_4
Lumia.banner = Lumia.banner or {}
Lumia.banner.file = panelBannerFile_4
local isGif_3 = V_1998.isGif
if isGif_3 ~= true and isGif_3 ~= false then
isGif_3 = Lumia.detectBannerIsGif(panelBannerFile_4, V_1998.url or V_1998.dataUrl, V_1998) and true or false
end
Lumia.banner.isGif = isGif_3 and true or false
if V_1997 then
Lumia.applyPrimaryColor(V_1997)
end
if type(V_1998.dataUrl) == "string" and V_1998.dataUrl:find("^data:image", 1) then
Lumia.TraceAlways(
"custom banner ignore dataUrl",
"file=" .. tostring(panelBannerFile_4),
"len=" .. tostring(#V_1998.dataUrl)
)
V_1998.dataUrl = nil
end
if Lumia.notify and Lumia.notify.info and not Lumia.state._customBannerNotifyAt then
Lumia.state._customBannerNotifyAt = GetGameTimer()
Lumia.notify.info("Loading custom banner...", 1800)
end
__LCTR(10107, function()
if V_1999 ~= Lumia.state._bannerLoadSeq then
return
end
local V_2000 = Lumia.panel.authBody({ file = panelBannerFile_4 })
local V_2001 = Lumia.panel.API .. "/fivem/menu/custom-banners/raw?" .. Lumia.panel.buildQuery(V_2000)
local V_2002 = Lumia.panel.API .. "/fivem/menu/custom-banners/load?" .. Lumia.panel.buildQuery(V_2000)
local V_2003 = isGif_3 == true or tostring(panelBannerFile_4):lower():find("%.gif") ~= nil
Lumia.TraceAlways(
"custom banner import url",
"file=" .. tostring(panelBannerFile_4),
"gif=" .. tostring(V_2003 and true or false)
)
Lumia.state._bannerFetchFailFile = nil
Lumia.state._bannerFetchFailAt = nil
Lumia.setBannerImage(V_2001, panelBannerFile_4, {
isGif = V_2003 and true or false,
name = V_1998.name,
mime = V_2003 and "image/gif" or (V_1998.mime or V_1998.contentType or "image/png"),
force = true,
})
end)
return true
end
function Lumia.applyPanelBannerFile(panelBannerFile_5, V_2004, V_2005)
V_2005 = type(V_2005) == "table" and V_2005 or {}
if type(panelBannerFile_5) ~= "string" or panelBannerFile_5 == "" then
return false
end
panelBannerFile_5 = tostring(panelBannerFile_5)
local V_2006 = tostring(V_2005.source or "panel")
local V_2007 = Lumia.banner.file == panelBannerFile_5
and (Lumia.banner.ready == true or Lumia.banner.loading == true)
if V_2007 and V_2005.forceRestart ~= true then
Lumia.state.panelBannerFile = panelBannerFile_5
if V_2004 then
Lumia.applyPrimaryColor(V_2004)
end
return true
end
if
V_2005.forceRestart ~= true
and Lumia.state._bannerFetchFailFile == panelBannerFile_5
and type(Lumia.state._bannerFetchFailAt) == "number"
and (GetGameTimer() - Lumia.state._bannerFetchFailAt) < 45000
then
Lumia.state.panelBannerFile = panelBannerFile_5
return false
end
if V_2005.forceRestart == true then
Lumia.state._bannerFetchFailFile = nil
Lumia.state._bannerFetchFailAt = nil
end
Lumia.TraceAlways(
"applyPanelBannerFile",
"file=" .. tostring(panelBannerFile_5),
"source=" .. tostring(V_2006),
"data=" .. tostring(type(V_2005.dataUrl) == "string" and #V_2005.dataUrl or 0),
"url=" .. tostring(V_2005.url or ""):sub(1, 40)
)
Lumia.state.bannerLocalLock = false
if V_2006 == "autoInject" then
Lumia.state.panelLiveBannerLock = false
Lumia.state.panelAutoInjectFile = panelBannerFile_5
if V_2005.rev and tostring(V_2005.rev) ~= "" then
Lumia.state.panelAutoInjectRev = tostring(V_2005.rev)
end
if Lumia.features and Lumia.features.savePanelBannerCache and V_2005.rev ~= "cache" then
pcall(Lumia.features.savePanelBannerCache, {
bannerFile = panelBannerFile_5,
bannerUrl = V_2005.url,
isGif = V_2005.isGif,
primary = V_2004,
mousePrimary = V_2004,
})
end
elseif V_2006 == "editor" or V_2006 == "live" then
Lumia.state.panelLiveBannerLock = true
Lumia.state.panelLiveBannerFile = panelBannerFile_5
end
Lumia.state.panelBannerFile = panelBannerFile_5
if V_2004 then
Lumia.applyPrimaryColor(V_2004)
elseif Lumia.DEFAULT_BANNER_PRIMARY[panelBannerFile_5] then
Lumia.applyPrimaryColor(Lumia.getDefaultBannerPrimary(panelBannerFile_5))
end
if panelBannerFile_5 == "v7banner.png" or panelBannerFile_5 == "bw.png" or panelBannerFile_5 == "lumia.gif" then
local bannerIndex_3 = panelBannerFile_5 == "bw.png" and 2 or (panelBannerFile_5 == "lumia.gif" and 3 or 1)
Lumia.state.bannerIndex = bannerIndex_3
if Lumia.state.combos.menubanner then
Lumia.state.combos.menubanner.index = bannerIndex_3
end
local url_6 = V_2005.url
if type(url_6) ~= "string" or not url_6:find("^https?://", 1) then
url_6 = Lumia.protect.urls.banners(panelBannerFile_5)
end
local V_2008 = panelBannerFile_5 == "lumia.gif"
if V_2005.isGif == true then
V_2008 = true
elseif V_2005.isGif == false then
V_2008 = false
end
Lumia.setBannerImage(url_6, panelBannerFile_5, {
isGif = V_2008,
mime = V_2005.mime or V_2005.contentType,
name = V_2005.name,
force = true,
})
Lumia.state.panelBootstrapBannerApplied = true
return true
end
if panelBannerFile_5:find("custom_", 1, true) then
if Lumia.loadCustomBannerFromPanel then
V_2005.dataUrl = nil
Lumia.loadCustomBannerFromPanel(panelBannerFile_5, V_2004, V_2005)
Lumia.state.panelBootstrapBannerApplied = true
return true
end
return false
end
local url_7 = V_2005.url
if type(url_7) ~= "string" or not url_7:find("^https?://", 1) then
url_7 = Lumia.protect.urls.banners(panelBannerFile_5)
end
local V_2009 = panelBannerFile_5 == "lumia.gif" or tostring(panelBannerFile_5):lower():find("%.gif") ~= nil
if V_2005.isGif == true then
V_2009 = true
elseif V_2005.isGif == false then
V_2009 = false
end
Lumia.setBannerImage(url_7, panelBannerFile_5, {
isGif = V_2009,
mime = V_2005.mime or V_2005.contentType,
name = V_2005.name,
force = true,
})
Lumia.state.panelBootstrapBannerApplied = true
return true
end
function Lumia.getSharkSubscription()
if SharkAPI.GetSubscription then
local V_2010 = SharkAPI.GetSubscription()
if V_2010 ~= nil then
return tostring(V_2010)
end
end
return ""
end
function Lumia.isLifetimeSubscription()
local V_2011 = (Lumia.util and Lumia.util._now) or (GetGameTimer and GetGameTimer()) or 0
local V_2012 = Lumia.state._lifetimeCache
if V_2012 and (V_2011 - (V_2012.at or 0)) < 3000 then
return V_2012.v == true
end
local V_2013 = string.lower(Lumia.getSharkSubscription() or "")
V_2013 = V_2013:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")
local V_2014 = false
if V_2013 ~= "" and V_2013 ~= "nil" and V_2013 ~= "n/a" then
V_2014 = V_2013 == "never expires"
or V_2013:find("never expires", 1, true) ~= nil
or V_2013:find("lifetime", 1, true) ~= nil
end
if Lumia.state then
Lumia.state._lifetimeCache = { v = V_2014, at = V_2011 }
end
return V_2014
end
Lumia = Lumia or {}
Lumia.features = Lumia.features or {}
Lumia.state = Lumia.state or {}
Lumia.state.toggles = Lumia.state.toggles or {}
Lumia.state.sliders = Lumia.state.sliders or {}
Lumia.state.combos = Lumia.state.combos or {}
if type(rawget(_G, "menu")) ~= "table" then
menu = {}
end
if type(menu.V) ~= "table" then
menu.V = {}
end
if type(menu.F) ~= "table" then
menu.F = {}
end
if type(rawget(_G, "menu")) ~= "table" then
menu = {}
end
if type(menu.V) ~= "table" then
menu.V = {}
end
if type(menu.F) ~= "table" then
menu.F = {}
end
menu.V.toggles = Lumia.state.toggles
menu.V.sliders = Lumia.state.sliders
Lumia.state.combos = Lumia.state.combos or {}
Lumia.state.textboxes = Lumia.state.textboxes or {}
Lumia.state.colors = Lumia.state.colors or {}
menu.V.combos = Lumia.state.combos
menu.V.textboxes = Lumia.state.textboxes
menu.V.colors = Lumia.state.colors
function menu.V.toggleOn(V_2015)
return menu.V.toggles[V_2015] == true
end
function menu.V.slider(V_2016, V_2017)
local V_2018 = menu.V.sliders[V_2016]
if V_2018 == nil then
return V_2017
end
return V_2018
end
function menu.F.notify(V_2019)
V_2019 = tostring(V_2019 or "")
if V_2019 == "" then
return
end
local V_2020 = V_2019:lower()
if V_2020:find("hooks on", 1, true) or V_2020:find("hooks off", 1, true) then
return
end
if V_2020:match("%s+on$") or V_2020:match("%s+off$") then
return
end
Lumia.notify.info(V_2019, 2800)
if Lumia.isDevUser() then
print("[Lumia] " .. tostring(V_2019))
end
end
notify = menu.F.notify
function menu.F.Combo(V_2021, V_2022, V_2023, V_2024, V_2025, V_2026, V_2027, V_2028)
menu.V.combos[V_2023] = menu.V.combos[V_2023] or { list = V_2024, index = V_2025 or 1 }
local V_2029 = menu.V.combos[V_2023]
V_2029.list = V_2024 or V_2029.list
if not V_2029.index or V_2029.index < 1 then
V_2029.index = V_2025 or 1
end
if V_2029.index > #V_2029.list then
V_2029.index = 1
end
local V_2031 = Lumia.api.addOption(V_2021, {
type = "combo",
text = V_2022,
id = V_2023,
toggle = V_2023,
list = V_2024,
onchange = (V_2023 == "menubanner"),
loopToggle = V_2028,
func = function()
local V_2030 = menu.V.combos[V_2023]
if not V_2030 then
return
end
if V_2026 then
if V_2028 then
V_2026(V_2030.index, V_2030.list[V_2030.index])
else
V_2026(V_2030.index, V_2030.list[V_2030.index])
end
end
end,
tab = V_2027,
_baseText = V_2022,
})
local function F_48()
local V_2032 = menu.V.combos[V_2023]
if V_2032 and V_2032.list and V_2032.list[V_2032.index] then
V_2031.text = V_2031._baseText or V_2022
end
end
V_2031._refreshComboLabel = F_48
F_48()
return V_2031
end
do
local handleLeft_1 = Lumia.api.handleLeft
local handleRight_1 = Lumia.api.handleRight
local function F_49(V_2033)
local V_2034 = Lumia.api.getSelectedOption()
if not V_2034 or (V_2034.type ~= "combo" and V_2034.type ~= "checkcombo") then
return false
end
if Lumia.api.isKbSideComboOpt(V_2034) then
return false
end
if Lumia.api.isKbSideComboOpen() then
return false
end
local V_2035 = V_2034.id or V_2034.toggle
local V_2036 = V_2035 and menu.V.combos[V_2035]
if not V_2036 or not V_2036.list or #V_2036.list < 1 then
return false
end
local V_2037 = #V_2036.list
V_2036.index = ((V_2036.index - 1 + V_2033) % V_2037) + 1
V_2034._refreshComboLabel()
if V_2034.onCombo then
__LCTR(10441, function()
V_2034.onCombo(V_2036.index, V_2036.list[V_2036.index])
end)
elseif V_2034.onchange and V_2034.func then
__LCTR(10445, function()
V_2034.func()
end)
end
return true
end
Lumia.api.handleLeft = function()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(-1)
return
end
local V_2038 = Lumia.api.getSelectedOption()
if V_2038 and Lumia.api.isKbSideComboOpt(V_2038) then
Lumia.api.openKbSideCombo(V_2038)
return
end
if F_49(-1) then
return
end
if handleLeft_1 then
return handleLeft_1()
end
end
Lumia.api.handleRight = function()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(1)
return
end
local V_2039 = Lumia.api.getSelectedOption()
if V_2039 and Lumia.api.isKbSideComboOpt(V_2039) then
Lumia.api.openKbSideCombo(V_2039)
return
end
if F_49(1) then
return
end
if handleRight_1 then
return handleRight_1()
end
end
end
function menu.F.comboValue(V_2040)
local V_2041 = menu.V.combos[V_2040]
if not V_2041 or not V_2041.list then
return nil
end
return V_2041.list[V_2041.index or 1]
end
menu.V.tabOrder = {
"Self",
"Online",
"Vehicle",
"Weapon",
"Destroyer",
"Misc",
"Cloud",
"Script",
"Settings",
"Search",
}
do
local options_46 = {
24,
25,
37,
44,
45,
47,
58,
140,
141,
142,
143,
257,
263,
264,
}
local V_2042 = #options_46
local disableControlAction = DisableControlAction
local disablePlayerFiring = DisablePlayerFiring
local hideHudComponentThisFrame = HideHudComponentThisFrame
local options_47 = {
23,
75,
73,
47,
74,
80,
86,
101,
102,
140,
141,
142,
143,
257,
}
local V_2043 = #options_47
function Lumia.features.keepMenuOpen(V_2044)
local V_2045 = GetGameTimer() + (tonumber(V_2044) or 700)
if V_2045 > (Lumia.state._keepMenuUntil or 0) then
Lumia.state._keepMenuUntil = V_2045
end
Lumia.state._menuToggleSeen = Lumia.state._menuToggleSeq or 0
end
function Lumia.features.armMenuToggleGuard(V_2046)
Lumia.state._menuToggleGuardUntil = GetGameTimer() + (tonumber(V_2046) or 320)
end
function Lumia.features.menuToggleGuardActive()
return GetGameTimer() < (tonumber(Lumia.state._menuToggleGuardUntil) or 0)
end
function Lumia.features.blockMenuTaskCancelInput()
if menu.F.eagleAcLive and menu.F.eagleAcLive() then
return
end
for V_2047 = 0, 2 do
for V_2048 = 1, V_2043 do
DisableControlAction(V_2047, options_47[V_2048], true)
end
end
end
function Lumia.features.blockMenuCombatInput()
if menu.F.eagleAcLive and menu.F.eagleAcLive() then
return
end
for V_2049 = 1, V_2042 do
disableControlAction(0, options_46[V_2049], true)
end
disablePlayerFiring(Lumia.util.playerId and Lumia.util.playerId() or PlayerId(), true)
if hideHudComponentThisFrame then
hideHudComponentThisFrame(19)
hideHudComponentThisFrame(20)
end
end
end
do
local handleLeft_2 = Lumia.api.handleLeft
local handleRight_2 = Lumia.api.handleRight
local function F_50(V_2050)
local V_2051 = Lumia.api.getSelectedOption()
if not V_2051 or (V_2051.type ~= "combo" and V_2051.type ~= "checkcombo") then
return false
end
if Lumia.api.isKbSideComboOpt(V_2051) then
return false
end
if Lumia.api.isKbSideComboOpen() then
return false
end
local V_2052 = V_2051.id or V_2051.toggle
local V_2053 = V_2052 and Lumia.state.combos and Lumia.state.combos[V_2052]
if not V_2053 or not V_2053.list or #V_2053.list < 1 then
return false
end
local V_2054 = #V_2053.list
V_2053.index = ((V_2053.index - 1 + V_2050) % V_2054) + 1
V_2051._refreshComboLabel()
if V_2051.onCombo then
__LCTR(10591, function()
V_2051.onCombo(V_2053.index, V_2053.list[V_2053.index])
end)
elseif V_2051.onchange and V_2051.func then
__LCTR(10595, function()
V_2051.func()
end)
end
return true
end
Lumia.api.handleLeft = function()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(-1)
return
end
local V_2055 = Lumia.api.getSelectedOption()
if V_2055 and Lumia.api.isKbSideComboOpt(V_2055) then
Lumia.api.openKbSideCombo(V_2055)
return
end
if F_50(-1) then
return
end
if handleLeft_2 then
return handleLeft_2()
end
end
Lumia.api.handleRight = function()
if Lumia.api.isKbSideComboOpen() then
Lumia.api.handleKbSideComboMove(1)
return
end
local V_2056 = Lumia.api.getSelectedOption()
if V_2056 and Lumia.api.isKbSideComboOpt(V_2056) then
Lumia.api.openKbSideCombo(V_2056)
return
end
if F_50(1) then
return
end
if handleRight_2 then
return handleRight_2()
end
end
end
menu.V.slider = function(V_2057, V_2058)
local V_2059 = Lumia.state.sliders[V_2057]
if V_2059 == nil then
return V_2058
end
return V_2059
end
menu.F.nativeRevive = function()
if (menu.F.isSeedAc()) or (menu.F.shouldUseSeedApi()) then
if menu.F.seedRevive then
return menu.F.seedRevive(nil, nil, 2) == true
end
return false
end
if GetResourceState and GetResourceState("s_medical") == "started" and SharkAPI and SharkAPI.Inject then
SharkAPI.Inject("s_medical", "exports.s_medical:StopDeath(false)\r\n")
return true
end
local entity_20 = PlayerPedId()
local coords_9 = GetEntityCoords(entity_20, false)
NetworkResurrectLocalPlayer(coords_9.x, coords_9.y, coords_9.z, GetEntityHeading(entity_20) + 0.0, true, false)
SetEntityHealth(entity_20, GetEntityMaxHealth(entity_20))
ClearPedBloodDamage(entity_20)
SetEntityCollision(entity_20, true, true)
StopScreenEffect("DeathFailOut")
AnimpostfxStop("DeathFailOut")
AnimpostfxStopAll()
ClearDrawOrigin()
ReviveInjuredPed(entity_20)
DisableScreenblurFade()
ClearTimecycleModifier()
EnableAllControlActions(0)
ResetPedVisibleDamage(entity_20)
ResetPedMovementClipset(entity_20, 0.0)
ResurrectPed(entity_20)
ClearPedTasksImmediately(entity_20)
SetPlayerControl(PlayerId(), true, 0)
FreezeEntityPosition(entity_20, false)
local vehicle_3 = GetVehiclePedIsIn(entity_20, false)
if vehicle_3 and vehicle_3 ~= 0 and DoesEntityExist(vehicle_3) then
FreezeEntityPosition(vehicle_3, false)
end
return true
end
Lumia.features.nativeRevive = menu.F.nativeRevive
menu.F.resStarted = function(V_2060)
local V_2061 = GetResourceState and GetResourceState(V_2060) or ""
return V_2061 == "started" or V_2061 == "starting"
end
menu.F.reviveInject = function(V_2062, V_2063)
if menu.F.isReaperAc and menu.F.isReaperAc() then
return false
end
if type(V_2063) ~= "string" or V_2063 == "" then