local requests = {} local function GenerateId() local id = "" for i = 1, 15 do id = id .. (math.random(1, 2) == 1 and string.char(math.random(97, 122)) or tostring(math.random(0,9))) end return id end local function ClearHeadshots() for i = 1, 32 do if IsPedheadshotValid(i) then UnregisterPedheadshot(i) end end end local function GetHeadshot(ped) ClearHeadshots() if not ped then ped = PlayerPedId() end if DoesEntityExist(ped) then local handle, timer = RegisterPedheadshot(ped), GetGameTimer() + 5000 while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do Wait(50) if GetGameTimer() >= timer then return {success=false, error="Could not load ped headshot."} end end local txd = GetPedheadshotTxdString(handle) local url = string.format("https://nui-img/%s/%s", txd, txd) return {success=true, url=url, txd=txd, handle=handle} end end GetBase64 = function(ped) if not ped then ped = PlayerPedId() end local headshot = GetHeadshot(ped) if headshot.success then local requestId = GenerateId() requests[requestId] = nil SendNUIMessage({ type = "convert_base64", img = headshot.url, handle = headshot.handle, id = requestId }) local timer = GetGameTimer() + 5000 while not requests[requestId] do Wait(250) if GetGameTimer() >= timer then return {success=false, error="Waiting for base64 conversion timed out."} end end return {success=true, base64=requests[requestId]} else return headshot end end RegisterNUICallback("base64", function(data, cb) if data.handle then UnregisterPedheadshot(data.handle) end if data.id then requests[data.id] = data.base64 Wait(1500) requests[data.id] = nil end cb({ok=true}) end)