local speedBuffer, velBuffer, pauseActive, isCarHud, stress, speedMultiplier = { 0.0, 0.0 }, {}, false, false, 0, 3.6 Framework = nil Framework = exports["qb-core"]:GetCoreObject() Citizen.Await(Framework) local showRadar = true Callback = Framework.Functions.TriggerCallback function getPlayerData() return Framework.Functions.GetPlayerData() end RegisterNetEvent('hp_hud:client:UpdateSettings') AddEventHandler('hp_hud:client:UpdateSettings', function(data) showRadar = not showRadar SendNUIMessage({ action = "HIDEHUD", hudStatus = data }) end) Citizen.CreateThread(function() if Config.RemoveStress["on_swimming"].enable then while true do Citizen.Wait(10000) if IsPedSwimming(playerPed) then local val = math.random(Config.RemoveStress["on_swimming"].min, Config.RemoveStress["on_swimming"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end end end) Citizen.CreateThread(function() if Config.RemoveStress["on_running"].enable then while true do Citizen.Wait(10000) if IsPedRunning(playerPed) then local val = math.random(Config.RemoveStress["on_running"].min, Config.RemoveStress["on_running"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end end end) Citizen.CreateThread(function() -- Speeding if Config.AddStress["on_fastdrive"].enable then while true do local ped = PlayerPedId() -- corrected line if IsPedInAnyVehicle(ped, false) then local speed = GetEntitySpeed(GetVehiclePedIsIn(ped, false)) * 15 local stressSpeed = 110 if speed >= stressSpeed then TriggerServerEvent('hud:server:GainStress', math.random(Config.AddStress["on_fastdrive"].min, Config.AddStress["on_fastdrive"].max)) end end Wait(10000) end end end) CreateThread(function() -- Shooting if Config.AddStress["on_shoot"].enable then while true do local ped = playerPed local weapon = GetSelectedPedWeapon(ped) if weapon ~= `WEAPON_UNARMED` then if IsPedShooting(ped) then if math.random() < 0.15 and not IsWhitelistedWeaponStress(weapon) then TriggerServerEvent('hud:server:GainStress', math.random(Config.AddStress["on_shoot"].min, Config.AddStress["on_shoot"].max)) end end else Wait(900) end Wait(8) end end end) function IsWhitelistedWeaponStress(weapon) if weapon then for _, v in pairs(Config.WhitelistedWeaponStress) do if weapon == v then return true end end end return false end Citizen.CreateThread(function() -- Shooting if Config.AddStress["on_shoot"].enable then while true do local ped = PlayerPedId() local weapon = GetSelectedPedWeapon(ped) if weapon ~= GetHashKey('WEAPON_UNARMED') then if IsPedShooting(ped) then if math.random() < 0.15 and not IsWhitelistedWeaponStress(weapon) then TriggerServerEvent('hud:server:GainStress', math.random(Config.AddStress["on_shoot"].min, Config.AddStress["on_shoot"].max)) end end else Wait(900) end Wait(8) end end end) Citizen.CreateThread(function() while true do local ped = PlayerPedId() if tonumber(stress) >= 100 then local ShakeIntensity = GetShakeIntensity(stress) local FallRepeat = math.random(2, 4) local RagdollTimeout = (FallRepeat * 1750) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) SetFlash(0, 0, 500, 3000, 500) if not IsPedRagdoll(ped) and IsPedOnFoot(ped) and not IsPedSwimming(ped) then SetPedToRagdollWithFall(ped, RagdollTimeout, RagdollTimeout, 1, GetEntityForwardVector(ped), 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) end Wait(500) for i = 1, FallRepeat, 1 do Wait(750) DoScreenFadeOut(200) Wait(1000) DoScreenFadeIn(200) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) SetFlash(0, 0, 200, 750, 200) end end if stress >= 50 then local ShakeIntensity = GetShakeIntensity(stress) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) SetFlash(0, 0, 500, 2500, 500) end Wait(GetEffectInterval(stress)) end end) function GetShakeIntensity(stresslevel) local retval = 0.05 local Intensity = { ["shake"] = { [1] = { min = 50, max = 60, intensity = 0.12, }, [2] = { min = 60, max = 70, intensity = 0.17, }, [3] = { min = 70, max = 80, intensity = 0.22, }, [4] = { min = 80, max = 90, intensity = 0.28, }, [5] = { min = 90, max = 100, intensity = 0.32, }, } } for k, v in pairs(Intensity['shake']) do if stresslevel >= v.min and stresslevel <= v.max then retval = v.intensity break end end return retval end function GetEffectInterval(stresslevel) local EffectInterval = { [1] = { min = 50, max = 60, timeout = math.random(14000, 15000) }, [2] = { min = 60, max = 70, timeout = math.random(12000, 13000) }, [3] = { min = 70, max = 80, timeout = math.random(10000, 11000) }, [4] = { min = 80, max = 90, timeout = math.random(8000, 9000) }, [5] = { min = 90, max = 100, timeout = math.random(6000, 7000) } } local retval = 10000 for k, v in pairs(EffectInterval) do if stresslevel >= v.min and stresslevel <= v.max then retval = v.timeout break end end return retval end RegisterNetEvent('hud:client:UpdateStress', function(newStress) -- Add this event with adding stress elsewhere stress = newStress SendNUIMessage({ action = 'STRESS', stress = math.ceil(newStress), }) end) RegisterNetEvent('consumables:client:Eat') AddEventHandler('consumables:client:Eat', function() if Config.RemoveStress["on_eat"].enable then local val = math.random(Config.RemoveStress["on_eat"].min, Config.RemoveStress["on_eat"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end) RegisterNetEvent('consumables:client:Drink') AddEventHandler('consumables:client:Drink', function() if Config.RemoveStress["on_drink"].enable then local val = math.random(Config.RemoveStress["on_drink"].min, Config.RemoveStress["on_drink"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end) RegisterNetEvent('consumables:client:DrinkAlcohol') AddEventHandler('consumables:client:DrinkAlcohol', function() if Config.RemoveStress["on_drink"].enable then local val = math.random(Config.RemoveStress["on_drink"].min, Config.RemoveStress["on_drink"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end) AddEventHandler('baseevents:onPlayerDied', function() TriggerServerEvent('hud:server:RelieveStress', 10000) end) AddEventHandler('baseevents:onPlayerKilled', function() TriggerServerEvent('hud:server:RelieveStress', 10000) end) RegisterNetEvent('hospital:client:RespawnAtHospital') AddEventHandler('hospital:client:RespawnAtHospital', function() TriggerServerEvent('hud:server:RelieveStress', 10000) end) Citizen.CreateThread(function() if Config.RemoveStress["on_swimming"].enable then while true do Citizen.Wait(10000) if IsPedSwimming(playerPed) then local val = math.random(Config.RemoveStress["on_swimming"].min, Config.RemoveStress["on_swimming"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end end end) Citizen.CreateThread(function() if Config.RemoveStress["on_running"].enable then while true do Citizen.Wait(10000) if IsPedRunning(playerPed) then local val = math.random(Config.RemoveStress["on_running"].min, Config.RemoveStress["on_running"].max) TriggerServerEvent('hud:server:RelieveStress', val) end end end end) RegisterCommand("Notification", function() -- Test Command exports['hp_hud']:Notification('success', 'Succes', 'Success description are there in few cute words for our dear players, enjoy') Citizen.Wait(1000) exports['hp_hud']:Notification('error', 'Error', 'Success description are there in few cute words for our dear players, enjoy') Citizen.Wait(2000) exports['hp_hud']:Notification('warning', 'Warning', 'Success description are there in few cute words for our dear players, enjoy') end, true) RegisterCommand("Question", function() exports['hp_hud']:Question('Are you sure?', 'Success description are there in few cute words for our dear players, enjoy') end, true) RegisterNetEvent('HudNotification') -- Trigger ==> Export AddEventHandler('HudNotification', function(Type, Header, Message) exports['hp_hud']:Notification(Type, Header, Message) end) exports('Notification', function(Type, Header, Message) SendNUIMessage({ action = "GET_NOTIFICATION", ntype = Type, nheader = Header, nmsg = Message }) end) exports('Question', function(Header, Message) if not isQuestion then isQuestion = true SendNUIMessage({ action = 'GET_QUESTION', qheader = Header, qmsg = Message, qstats = true }) while isQuestion do if IsControlJustPressed(0, 246) then SendNUIMessage({ action = 'GET_QUESTION', qstats = false }) isQuestion = false return 'Y' end --For some reason, they 249 is tied to voicechat, and if voicechat is disabled, it will not work. So, I added 306 as well. if IsControlJustPressed(0, 249) or IsControlJustPressed(0, 306) then SendNUIMessage({ action = 'GET_QUESTION', qstats = false }) isQuestion = false return 'N' end Citizen.Wait(4) end else return end end) local lastAmmo = nil local lastMaxAmmo = nil local displayAmmo = false local currentWeaponName = "" local weapons = { --Melee { label = "Dagger", name = "dagger", hash = "0x92A27487" }, { label = "Bat", name = "bat", hash = "0x958A4A8F" }, { label = "Bottle", name = "bottle", hash = "0xF9E6AA4B" }, { label = "Crowbar", name = "crowbar", hash = "0x84BD7BFD" }, { label = "Unarmed", name = "unarmed", hash = "0xA2719263" }, { label = "Flashlight", name = "flashlight", hash = "0x8BB05FD7" }, { label = "Golfclub", name = "golfclub", hash = "0x440E4788" }, { label = "Hammer", name = "hammer", hash = "0x4E875F73" }, { label = "Hatchet", name = "hatchet", hash = "0xF9DCBF2D" }, { label = "Knuckle", name = "knuckle", hash = "0xD8DF3C3C" }, { label = "Knife", name = "knife", hash = "0x99B507EA" }, { label = "Machete", name = "machete", hash = "0xDD5DF8D9" }, { label = "Switchblade", name = "switchblade", hash = "0xDFE37640" }, { label = "Nightstick", name = "nightstick", hash = "0x678B81B1" }, { label = "Wrench", name = "wrench", hash = "0x19044EE0" }, { label = "Battleaxe", name = "battleaxe", hash = "0xCD274149" }, { label = "Poolcue", name = "poolcue", hash = "0x94117305" }, { label = "Stone Hatchet", name = "stone_hatchet", hash = "0x3813FC08" }, -- Pistols { label = "Pistol", name = "pistol", hash = "0x1B06D571" }, { label = "Pistol MK2", name = "pistol_mk2", hash = "0xBFE256D4" }, { label = "Combat Pistol", name = "combatpistol", hash = "0x5EF9FEC4" }, { label = "AP Pistol", name = "appistol", hash = "0x22D8FE39" }, { label = "Stun Gun", name = "stungun", hash = "0x3656C8C1" }, { label = "Pistol .50", name = "pistol50", hash = "0x99AEEB3B" }, { label = "SNS Pistol", name = "snspistol", hash = "0xBFD21232" }, { label = "SNS Pistol MK2", name = "snspistol_mk2", hash = "0x88374054" }, { label = "Heavy Pistol", name = "heavypistol", hash = "0xD205520E" }, { label = "Vintage Pistol", name = "vintagepistol", hash = "0x83839C4" }, { label = "Flare Gun", name = "flaregun", hash = "0x47757124" }, { label = "Marksman Pistol", name = "marksmanpistol", hash = "0xDC4DB296" }, { label = "Revolver", name = "revolver", hash = "0xC1B3C3D1" }, { label = "Revolver MK2", name = "revolver_mk2", hash = "0xCB96392F" }, { label = "Double Action", name = "doubleaction", hash = "0x97EA20B8" }, { label = "Ray Pistol", name = "raypistol", hash = "0xAF3696A1" }, { label = "Ceramic Pistol", name = "ceramicpistol", hash = "0x2B5EF5EC" }, { label = "Navy Revolver", name = "navyrevolver", hash = "0x917F6C8C" }, { label = "Perico Pistol", name = "gadgetpistol", hash = "0x57A4368C" }, --SMGs { label = "Micro SMG", name = "microsmg", hash = "0x13532244" }, { label = "SMG", name = "smg", hash = "0x2BE6766B" }, { label = "SMG Mk II", name = "smg_mk2", hash = "0x78A97CD0" }, { label = "Assault SMG", name = "assaultsmg", hash = "0xEFE7E2DF" }, { label = "Combat PDW", name = "combatpdw", hash = "0x0A3D4D34" }, { label = "Machine Pistol", name = "machinepistol", hash = "0xDB1AA450" }, { label = "Mini SMG", name = "minismg", hash = "0xBD248B55" }, { label = "Unholy Hellbringer", name = "raycarbine", hash = "0x476BF155" }, --Shotguns { label = "Pump Shotgun", name = "pumpshotgun", hash = "0x1D073A89" }, { label = "Pump Shotgun Mk II", name = "pumpshotgun_mk2", hash = "0x555AF99A" }, { label = "Sawed-Off Shotgun", name = "sawnoffshotgun", hash = "0x7846A318" }, { label = "Assault Shotgun", name = "assaultshotgun", hash = "0xE284C527" }, { label = "Bullpup Shotgun", name = "bullpupshotgun", hash = "0x9D61E50F" }, { label = "Musket", name = "musket", hash = "0xA89CB99E" }, { label = "Heavy Shotgun", name = "heavyshotgun", hash = "0x3AABBBAA" }, { label = "Double Barrel Shotgun", name = "dbshotgun", hash = "0xEF951FBB" }, { label = "Sweeper Shotgun", name = "autoshotgun", hash = "0x12E82D3D" }, { label = "Combat Shotgun", name = "combatshotgun", hash = "0x5A96BA4" }, --Rifles { label = "Assault Rifle", name = "assaultrifle", hash = "0xBFEFFF6D" }, { label = "Assault RiflE", name = "assaultrifle_mk2", hash = "0x394F415C" }, { label = "Carbine Rifle", name = "carbinerifle", hash = "0x83BF0278" }, { label = "Carbine Rifle", name = "carbinerifle_mk2", hash = "0xFAD1F1C9" }, { label = "Advanced Rifle", name = "advancedrifle", hash = "0xAF113F99" }, { label = "Special Carbine", name = "specialcarbine", hash = "0xC0A3098D" }, { label = "Special Carbine Mk II", name = "specialcarbine_mk2", hash = "0x969C3D67" }, { label = "Bullpup Rifle", name = "bullpuprifle", hash = "0x7F229F94" }, { label = "Bullpup Rifle Mk II", name = "bullpuprifle_mk2", hash = "0x84D6FAFD" }, { label = "Compact Rifle", name = "compactrifle", hash = "0x624FE830" }, { label = "Military Rifle", name = "militaryrifle", hash = "0x9D1F17E6" }, { label = "Heavy Rifle", name = "heavyrifle", hash = "0xC78D71B4" }, { label = "Tactical Rifle", name = "tacticalrifle", hash = "0xD1D5F52B" }, --LMGs { label = "MG", name = "mg", hash = "0x9D07F764" }, { label = "Combat MG", name = "combatmg", hash = "0x7FD62962" }, { label = "Combat MG Mk II", name = "combatmg_mk2", hash = "0xDBBD7280" }, { label = "Gusenberg Sweeper", name = "gusenberg", hash = "0x61012683" }, --Snipers { label = "Sniper Rifle", name = "sniperrifle", hash = "0x05FC3C11" }, { label = "Heavy Sniper", name = "heavysniper", hash = "0x0C472FE2" }, { label = "Heavy Sniper Mk II", name = "heavysniper_mk2", hash = "0xA914799" }, { label = "Marksman Rifle", name = "marksmanrifle", hash = "0xC734385A" }, { label = "Marksman Rifle Mk II", name = "marksmanrifle_mk2", hash = "0x6A6C02E0" }, { label = "Precision Rifle", name = "precisionrifle", hash = "0x6E7DDDEC" }, --Heavy Weapons { label = "RPG", name = "rpg", hash = "0xB1CA77B1" }, { label = "Grenade Launcher", name = "grenadelauncher", hash = "0xA284510B" }, { label = "Grenade Launcher Smoke", name = "grenadelauncher_smoke", hash = "0x4DD2DC56" }, { label = "Minigun", name = "minigun", hash = "0x42BF8A85" }, { label = "Firework Launcher", name = "firework", hash = "0x7F7497E5" }, { label = "Railgun", name = "railgun", hash = "0x6D544C99" }, { label = "Homing Launcher", name = "hominglauncher", hash = "0x63AB0442" }, { label = "Compact Grenade Launcher", name = "compactlauncher", hash = "0x0781FE4A" }, { label = "Widowmaker", name = "rayminigun", hash = "0xB62D1F67" }, { label = "Compact EMP Launcher", name = "emplauncher", hash = "0xDB26713A" }, --Throwables { label = "Grenade", name = "grenade", hash = "0x93E220BD" }, { label = "BZ Gas", name = "bzgas", hash = "0xA0973D5E" }, { label = "Molotov Cocktail", name = "molotov", hash = "0x24B17070" }, { label = "Sticky Bomb", name = "stickybomb", hash = "0x2C3731D9" }, { label = "Proximity Mines", name = "proxmine", hash = "0xAB564B93" }, { label = "Snowballs", name = "snowball", hash = "0x787F0BB" }, { label = "Pipe Bombs", name = "pipebomb", hash = "0xBA45E8B8" }, { label = "Baseball", name = "ball", hash = "0x23C9F95C" }, { label = "Tear Gas", name = "smokegrenade", hash = "0xFDBC8A50" }, { label = "Flare", name = "flare", hash = "0x497FACC3" }, --Miscellaneous { label = "Jerry Can", name = "petrolcan", hash = "0x34A67B97" }, { label = "Parachute", name = "parachute", hash = "0xFBAB5776" }, { label = "Fire Extinguisher", name = "fireextinguisher", hash = "0x060EC506" }, { label = "Hazardous Jerry Can", name = "hazardcan", hash = "0xBA536372" }, { label = "Fertilizer Can", name = "fertilizercan", hash = "0x184140A1" }, } local function getWeaponNameFromHash(hash) for _, weapon in ipairs(weapons) do if hash == GetHashKey('weapon_' .. weapon.name) then return weapon.name end end return "" end local function getWeaponNameFromLabel(hash) for _, weapon in ipairs(weapons) do if hash == GetHashKey('weapon_' .. weapon.name) then return weapon.label end end return "" end Citizen.CreateThread(function() local lastAmmo = nil local lastMaxAmmo = nil local displayAmmo = false while true do Citizen.Wait(200) local playerPed = PlayerPedId() local _, weaponHash = GetCurrentPedWeapon(playerPed) local currentWeaponName = getWeaponNameFromHash(weaponHash) -- Update this to your function for getting weapon name from hash local currentWeaponLabel = getWeaponNameFromLabel(weaponHash) -- Update this to your function for getting weapon label from hash if IsPedArmed(playerPed, 7) then SendNUIMessage({ action = 'GET_WEAPON', name = currentWeaponLabel, img = currentWeaponName, stats = true }) local _, ammoClip = GetAmmoInClip(playerPed, weaponHash) local ammoTotal = GetAmmoInPedWeapon(playerPed, weaponHash) local ammoRemaining = ammoTotal - ammoClip if not displayAmmo then displayAmmo = true end if IsControlPressed(0, 24) or lastAmmo ~= ammoClip or lastMaxAmmo ~= ammoTotal then SendNUIMessage({ action = 'GET_AMMO', ammo = ammoClip .. '/' .. ammoRemaining, }) lastAmmo = ammoClip lastMaxAmmo = ammoTotal Citizen.Wait(100) end else SendNUIMessage({ action = 'GET_WEAPON', name = currentWeaponName, img = currentWeaponName, stats = false }) displayAmmo = false end end end) RegisterCommand(Config.Hud, function() SendNUIMessage({ action = 'MENU' }) SetDisplay(true, true) end, false) local display = false function SetDisplay(bool) display = bool SetNuiFocus(bool, bool) end RegisterNUICallback("exit", function(data) SetDisplay(false) end) local LastSpeed, LastRpm, LastEngine, LastSignal, LastLight local LastFuel = 0 local doorsOpen = false local indicatorlights = false local speedLimiterEnabled = false RegisterKeyMapping('blinkers', 'Nødblink', 'keyboard', 'DOWN') RegisterCommand('blinkers', function() local playerPed = GetPlayerPed(-1) local vehicle = GetVehiclePedIsIn(playerPed, false) if GetPedInVehicleSeat(vehicle, -1) == playerPed and IsPedInAnyVehicle(playerPed, false) then if indicatorlights then SetVehicleIndicatorLights(vehicle, 0, false) SetVehicleIndicatorLights(vehicle, 1, false) indicatorlights = false else SetVehicleIndicatorLights(vehicle, 0, true) SetVehicleIndicatorLights(vehicle, 1, true) indicatorlights = true end end end, false) local function handleSpeedLimiter(vehicle, maxSpeed) if not speedLimiterEnabled then local cruise = GetEntitySpeed(vehicle) SetEntityMaxSpeed(vehicle, cruise) speedLimiterEnabled = not speedLimiterEnabled cruise = math.floor(cruise * 3.6 + 0.5) exports['hp_hud']:Notification('success', 'Fartbegrænser', "Fartbegrænser sat til " .. cruise .. " km/h.") else SetEntityMaxSpeed(vehicle, maxSpeed) speedLimiterEnabled = not speedLimiterEnabled exports['hp_hud']:Notification('success', 'Fartbegrænser', "Fartbegrænser slået fra") end end RegisterKeyMapping('speedlimiter', 'Fartbegrænser', 'keyboard', 'F2') RegisterCommand('speedlimiter', function() local playerPed = GetPlayerPed(-1) local vehicle = GetVehiclePedIsIn(playerPed, false) if GetPedInVehicleSeat(vehicle, -1) == playerPed and IsPedInAnyVehicle(playerPed, false) then local maxSpeed = GetVehicleHandlingFloat(vehicle, "CHandlingData", "fInitialDriveMaxFlatVel") handleSpeedLimiter(vehicle, maxSpeed) end end, false) Citizen.CreateThread(function() while true do Citizen.Wait(50) local ped = PlayerPedId() local vehicle = GetVehiclePedIsIn(ped, false) if IsPedInVehicle(ped, vehicle, true) and not pauseActive then local engineHealth = GetVehicleEngineHealth(vehicle) local LightVal, LightLights, LightHighlights = GetVehicleLightsState(vehicle) local checkEngine = false local indicator = GetVehicleIndicatorLights(vehicle) local blinkers = false if indicator <= 3 and indicator >= 1 then blinkers = true else blinkers = false end local Light = (LightLights == 1 or LightHighlights == 1) local Speed, Rpm, Fuel, Engine, Signal = GetEntitySpeed(vehicle), GetVehicleCurrentRpm(vehicle), getFuelLevel(vehicle), GetIsVehicleEngineRunning(vehicle), GetVehicleIndicatorLights(vehicle) if engineHealth <= 549 then SetVehicleEngineTorqueMultiplier(vehicle, engineHealth <= 300 and 0.09 or 0.4) SetVehicleIndicatorLights(vehicle, 0, true) SetVehicleIndicatorLights(vehicle, 1, true) checkEngine = true if engineHealth <= 300 then SetVehicleEngineHealth(vehicle, 150.0) SetVehicleBodyHealth(vehicle, 0.0) SetVehicleUndriveable(vehicle, true) SetVehicleDoorOpen(vehicle, 4, 0, 0) end elseif engineHealth >= 550 then SetVehicleEngineTorqueMultiplier(vehicle, 1.0) checkEngine = false end for i = 0, 7 do if GetVehicleDoorAngleRatio(vehicle, i) > 0.0 then doorsOpen = true break else doorsOpen = false end end SendNUIMessage({ action = 'SETCARHUD', variable = true }) local Speed = GetEntitySpeed(vehicle) if LastSpeed ~= Speed or LastRpm ~= Rpm or LastFuel ~= Fuel or LastEngine ~= Engine or LastSignal ~= Signal or LastLight ~= Light then SendNUIMessage({ action = 'CARHUD', speed = math.floor(Speed * speedMultiplier), rpm = math.ceil(GetVehicleCurrentRpm(vehicle) * 78), fuel = math.floor(Config.GetVehFuel(vehicle)), cruise = speedLimiterEnabled, engine = checkEngine, state = Light, seatbelt = getSeatbeltStatus(), door = doorsOpen, gear = GetVehicleCurrentGear(vehicle), blinkers = blinkers, type = Config.DefaultSpeedUnit }) LastSpeed, LastRpm, LastFuel, LastEngine, LastSignal, LastLight = Speed, Rpm, Fuel, Engine, Signal, Light end else SendNUIMessage({ action = 'SETCARHUD', variable = false }) Citizen.Wait(500) end end end) local lastFuelUpdate = 0 function getFuelLevel(vehicle) local updateTick = GetGameTimer() if (updateTick - lastFuelUpdate) > 2000 then lastFuelUpdate = updateTick LastFuel = math.floor(Config.GetVehFuel(vehicle)) end return LastFuel end Citizen.CreateThread(function() while true do Citizen.Wait(1) HideHudComponentThisFrame(6) -- VEHICLE_NAME HideHudComponentThisFrame(7) -- AREA_NAME HideHudComponentThisFrame(8) -- VEHICLE_CLASS HideHudComponentThisFrame(9) -- STREET_NAME HideHudComponentThisFrame(3) -- CASH HideHudComponentThisFrame(4) -- MP_CASH DisplayAmmoThisFrame(false) end end) RegisterNetEvent("QBCore:Player:SetPlayerData") AddEventHandler("QBCore:Player:SetPlayerData", function(data) SendNUIMessage({ action = 'ECONOMY', cash = data.money.cash, bank = data.money.bank, black = data.money.crypto }) end) RegisterNetEvent("QBCore:Client:OnJobUpdate") AddEventHandler("QBCore:Client:OnJobUpdate", function(data) SendNUIMessage({ action = 'GET_JOB', job = data.grade.name, grade = data.label }) end) Citizen.CreateThread(function() while true do Citizen.Wait(1000) local playerData = getPlayerData() if playerData and playerData.metadata then local armorStats = playerData.metadata["armor"] if armorStats == nil then armorStats = 0 else armorStats = math.ceil(armorStats) end SendNUIMessage({ action = 'ARMOR', armor = armorStats }) else SendNUIMessage({ action = 'ARMOR', armor = 0 }) end Citizen.Wait(2500) end end) local seatbeltOn = false local speedBuffer = { nil, nil } local velBuffer = { nil, nil } function Fwv(entity) local hr = GetEntityHeading(entity) + 90.0 if hr < 0.0 then hr = 360.0 + hr end hr = hr * 0.0174533 return { x = math.cos(hr) * 2.0, y = math.sin(hr) * 2.0 } end local function hasHarness() return seatbeltOn end exports("HasHarness", hasHarness) -- RegisterKeyMapping('seatbelt', 'Toggle Seatbelt', 'keyboard', Config.SeatbeltControl) -- RegisterCommand('seatbelt', function() -- local playerPed = PlayerPedId() -- if IsPedInAnyVehicle(playerPed, false) then -- local class = GetVehicleClass(GetVehiclePedIsUsing(playerPed)) -- if class ~= 8 and class ~= 13 and class ~= 14 then -- if seatbeltOn then -- exports['hp_hud']:Notification('info', 'Sikkerhedssele', 'Du tog selen af!') -- TriggerServerEvent("InteractSound_SV:PlayOnSource", "carbuckle", 0.25) -- else -- exports['hp_hud']:Notification('info', 'Sikkerhedssele', 'Du tog selen på!') -- TriggerServerEvent("InteractSound_SV:PlayOnSource", "carunbuckle", 0.25) -- end -- seatbeltOn = not seatbeltOn -- end -- end -- end, false) Citizen.CreateThread(function() while true do local playerPed = PlayerPedId() local Veh = GetVehiclePedIsIn(playerPed, false) local isCarHud = true -- Replace as per your context. if isCarHud then if seatbeltOn then DisableControlAction(0, 75) end speedBuffer[2] = speedBuffer[1] speedBuffer[1] = GetEntitySpeed(Veh) velBuffer[2] = velBuffer[1] velBuffer[1] = GetEntityVelocity(Veh) if speedBuffer[2] and GetEntitySpeedVector(Veh, true).y > 1.0 and speedBuffer[1] > 15 and (speedBuffer[2] - speedBuffer[1]) > (speedBuffer[1] * 0.255) then if not seatbeltOn then local co = GetEntityCoords(playerPed) local fw = Fwv(playerPed) SetEntityCoords(playerPed, co.x + fw.x, co.y + fw.y, co.z - 0.47, true, true, true) SetEntityVelocity(playerPed, velBuffer[2].x, velBuffer[2].y, velBuffer[2].z) Wait(500) SetPedToRagdoll(playerPed, 1000, 1000, 0, 0, 0, 0) seatbeltOn = false end end else Wait(3000) end Wait(0) end end) function getSeatbeltStatus() return seatbeltOn end Citizen.CreateThread(function() while true do Citizen.Wait(650) if IsPauseMenuActive() and not pauseActive then pauseActive = true SendNUIMessage({ action = 'EXIT', args = false }) end if not IsPauseMenuActive() and pauseActive then pauseActive = false SendNUIMessage({ action = 'EXIT', args = true }) end end end) Citizen.CreateThread(function() while true do Citizen.Wait(150) local microphoneColor = NetworkIsPlayerTalking(PlayerId()) and "green" or "#FFFFFF" SendNUIMessage({ action = "MICROPHONE", variable = microphoneColor }) SendNUIMessage({ action = 'PLAYERS', players = "ID: " .. GetPlayerServerId(PlayerId()) }) end end) RegisterNetEvent('HudPlayerLoad') AddEventHandler('HudPlayerLoad', function(source) Citizen.Wait(2000) local Player = getPlayerData() Citizen.CreateThread(function() local hunger = math.ceil(Player.metadata["hunger"]) local thirst = math.ceil(Player.metadata["thirst"]) SendNUIMessage({ action = "STATUS", hunger = hunger, thirst = thirst }) end) SendNUIMessage({ action = "GET_JOB", job = Player.job.grade.name, grade = Player.job.label }) end) RegisterNetEvent('hud:client:UpdateNeeds', function(newHunger, newThirst) local hunger = math.ceil(newHunger) local thirst = math.ceil(newThirst) if hunger > 100 then hunger = 100 end if thirst > 100 then thirst = 100 end SendNUIMessage({ action = "STATUS", hunger = hunger, thirst = thirst }) end) Callback('Player', function(cash, bank, black) Citizen.Wait(2000) SendNUIMessage({ action = 'ECONOMY', cash = cash, bank = bank, black = black }) end) RegisterNUICallback("UpStats", function(data, cb) cb({ hunger = math.ceil(Framework.Functions.GetPlayerData().metadata["hunger"]), thirst = math.ceil(Framework.Functions.GetPlayerData().metadata["thirst"]) }) end) Citizen.CreateThread(function() while true do Citizen.Wait(1000) local playerPed = PlayerPedId() local health = GetEntityHealth(playerPed) if lastHealth ~= health then local val = health - 100 if GetEntityModel(playerPed) == `mp_f_freemode_01` then val = (health + 25) - 100 end SendNUIMessage({ action = 'HEALTH', health = GetEntityHealth(playerPed) - 100 }) lastHealth = health end end end) Citizen.CreateThread(function() local wait, LastOxygen while true do local Player = PlayerId() local newoxygen = GetPlayerSprintStaminaRemaining(Player) if IsPedInAnyVehicle(PlayerPed) then wait = 2100 end if LastOxygen ~= newoxygen then wait = 125 if IsEntityInWater(PlayerPed) then oxygen = GetPlayerUnderwaterTimeRemaining(Player) * 10 else oxygen = 100 - GetPlayerSprintStaminaRemaining(Player) end LastOxygen = newoxygen SendNUIMessage({ action = 'GET_STAMINA', stamina = math.ceil(oxygen), }) else wait = 1850 end Citizen.Wait(wait) end end) local NitroVeh = {} RegisterNetEvent('hud:client:UpdateNitrous', function(Plate, level) NitroVeh[Plate] = level SendNUIMessage({ action = 'UPDATE_NOSS', noss = NitroVeh[Plate] }) end) function GetVehicleInDirection() PlayerPed = PlayerPedId() local playerCoords = GetEntityCoords(PlayerPed) local inDirection = GetOffsetFromEntityInWorldCoords(PlayerPed, 0.0, 5.0, 0.0) local rayHandle = StartShapeTestRay(playerCoords, inDirection, 10, PlayerPed, 0) local numRayHandle, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle) if hit == 1 and GetEntityType(entityHit) == 2 then return entityHit end return nil end RegisterNUICallback("GetMap",function(type) if type.map == 'squared' then local defaultAspectRatio = 1920/1080 -- Don't change this. local resolutionX, resolutionY = GetActiveScreenResolution() local aspectRatio = resolutionX/resolutionY local minimapOffset = 0 if aspectRatio ~= defaultAspectRatio then minimapOffset = ((defaultAspectRatio-aspectRatio)/3.6)-0.008 end RequestStreamedTextureDict("squaremap", false) while not HasStreamedTextureDictLoaded("squaremap") do Wait(150) end SetMinimapClipType(0) AddReplaceTexture("platform:/textures/graphics", "radarmasksm", "squaremap", "radarmasksm") AddReplaceTexture("platform:/textures/graphics", "radarmask1g", "squaremap", "radarmasksm") SetMinimapComponentPosition("minimap", "L", "B", 0.0 + minimapOffset, -0.047, 0.1638, 0.183) SetMinimapComponentPosition("minimap_mask", "L", "B", 0.0 + minimapOffset, 0.0, 0.128, 0.20) SetMinimapComponentPosition('minimap_blur', 'L', 'B', 0.012 + minimapOffset, 0.064, 0.257, 0.325) SetBlipAlpha(GetNorthRadarBlip(), 0) SetRadarBigmapEnabled(true, false) SetMinimapClipType(0) Wait(0) SetRadarBigmapEnabled(false, false) else local defaultAspectRatio = 1920 / 1080 -- Don't change this. local resolutionX, resolutionY = GetActiveScreenResolution() local aspectRatio = resolutionX / resolutionY local minimapOffset = 0 if aspectRatio > defaultAspectRatio then minimapOffset = ((defaultAspectRatio - aspectRatio) / 3.6) - 0.008 end RequestStreamedTextureDict("circlemap", false) while not HasStreamedTextureDictLoaded("circlemap") do Wait(150) end SetMinimapClipType(1) AddReplaceTexture("platform:/textures/graphics", "radarmasksm", "circlemap", "radarmasksm") AddReplaceTexture("platform:/textures/graphics", "radarmask1g", "circlemap", "radarmasksm") -- -0.0100 = nav symbol and icons left -- 0.180 = nav symbol and icons stretched -- 0.258 = nav symbol and icons raised up SetMinimapComponentPosition("minimap", "L", "B", 0.00999 + minimapOffset, -0.090 - minimapOffset, 0.15, 0.170); SetMinimapComponentPosition("minimap_mask", "L", "B", 0.2125 + minimapOffset, -0.050 - minimapOffset, 0.065, 0.20); SetMinimapComponentPosition('minimap_blur', 'L', 'B', 0.027 + minimapOffset, -0.025 - minimapOffset, 0.190, 0.290); SetBlipAlpha(GetNorthRadarBlip(), 0) SetMinimapClipType(1) SetRadarBigmapEnabled(true, false) Wait(0) SetRadarBigmapEnabled(false, false) end end) Citizen.CreateThread(function() local minimap = RequestScaleformMovie("minimap") SetRadarBigmapEnabled(true, false) Wait(0) SetRadarBigmapEnabled(false, false) end) Citizen.CreateThread(function() Citizen.Wait(100) while true do local sleepThread = 500 local radarEnabled = IsRadarEnabled() local inVehicle = IsPedInAnyVehicle(PlayerPedId(), false) if not inVehicle and radarEnabled then DisplayRadar(false) elseif inVehicle and not radarEnabled then DisplayRadar(true) end Citizen.Wait(sleepThread) end end) -- Minimap update CreateThread(function() while true do SetRadarBigmapEnabled(false, false) SetRadarZoom(1000) SetBigmapActive(false, false) Wait(4) end end)