PapitoEUS

Untitled

Jul 11th, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.72 KB | None | 0 0
  1. --[[
  2.     Author: michalMonster
  3. ]]
  4.  
  5. local sw, sh = guiGetScreenSize()
  6. local zoom = 1920/sw
  7.  
  8. SPEEDO = {}
  9.  
  10. SPEEDO.TEXTURES = {
  11.     dxCreateTexture('assets/textures/disc_fuel.png', 'argb', false, 'clamp'),
  12.     dxCreateTexture('assets/textures/disc_speed.png', 'argb', false, 'clamp'),
  13.     dxCreateTexture('assets/textures/indication_fuel.png', 'argb', false, 'clamp'),
  14.     dxCreateTexture('assets/textures/indication_speed.png', 'argb', false, 'clamp'),
  15.     dxCreateTexture('assets/textures/icon_breake.png', 'argb', false, 'clamp'),
  16.     dxCreateTexture('assets/textures/icon_engine.png', 'argb', false, 'clamp'),
  17.     dxCreateTexture('assets/textures/icon_light.png', 'argb', false, 'clamp'),
  18. }
  19.  
  20. function getElementSpeed(theElement, unit)
  21.     -- Check arguments for errors
  22.     assert(isElement(theElement), "Bad argument 1 @ getElementSpeed (element expected, got " .. type(theElement) .. ")")
  23.     local elementType = getElementType(theElement)
  24.     assert(elementType == "player" or elementType == "ped" or elementType == "object" or elementType == "vehicle" or elementType == "projectile", "Invalid element type @ getElementSpeed (player/ped/object/vehicle/projectile expected, got " .. elementType .. ")")
  25.     assert((unit == nil or type(unit) == "string" or type(unit) == "number") and (unit == nil or (tonumber(unit) and (tonumber(unit) == 0 or tonumber(unit) == 1 or tonumber(unit) == 2)) or unit == "m/s" or unit == "km/h" or unit == "mph"), "Bad argument 2 @ getElementSpeed (invalid speed unit)")
  26.     -- Default to m/s if no unit specified and "ignore" argument type if the string contains a number
  27.     unit = unit == nil and 0 or ((not tonumber(unit)) and unit or tonumber(unit))
  28.     -- Setup our multiplier to convert the velocity to the specified unit
  29.     local mult = (unit == 0 or unit == "m/s") and 50 or ((unit == 1 or unit == "km/h") and 180 or 111.84681456)
  30.     -- Return the speed by calculating the length of the velocity vector, after converting the velocity to the specified unit
  31.     return (Vector3(getElementVelocity(theElement)) * mult).length
  32. end
  33.  
  34. SPEEDO.font = dxCreateFont("assets/fonts/roboto.ttf", 13/zoom)
  35.  
  36. SPEEDO.UI = function()
  37.     local vehicle = getPedOccupiedVehicle(localPlayer)
  38.     if(vehicle)then
  39.         setRadioChannel(0)
  40.         if(not getElementData(localPlayer, "user:hud_disabled"))then
  41.             local arrow_speed = getElementSpeed(vehicle, 1) * 0.975
  42.             local distance = getElementData(vehicle, "vehicle:distance") or 0
  43.             local fuel = getElementData(vehicle, "vehicle:fuel") or 25
  44.             local bak = getElementData(vehicle, "vehicle:bak") or 25
  45.  
  46.             arrow_speed=arrow_speed > 303 and 303 or arrow_speed
  47.  
  48.             fuel = fuel > bak and bak or fuel
  49.             fuel = fuel < 0 and 0 or fuel
  50.  
  51.             if(getElementData(vehicle, "vehicle:handbrake") and not getControlState("handbrake"))then
  52.                 setControlState("handbrake", true)
  53.             end
  54.  
  55.             dxDrawImage(sw - 330/zoom, sh - 320/zoom, 290/zoom, 290/zoom, SPEEDO.TEXTURES[2], 0, 0, 0, tocolor(255, 255, 255, 255), false)
  56.  
  57.             dxDrawText(fuel..'/'..bak,300, 400, 1200, 1200, 0xFFFFFFFF,1,  SPEEDO.font, 'center', 'center', false )
  58.  
  59.             dxDrawImage(sw - 35/zoom, sh - 160/zoom, 25/zoom, 19/zoom, SPEEDO.TEXTURES[6], 0, 0, 0, (not getVehicleEngineState(vehicle) and 0xFFFFFFFF or 0x00FFFFFF));
  60.             dxDrawImage(sw - 35/zoom, sh - 190/zoom, 25/zoom, 19/zoom, SPEEDO.TEXTURES[5], 0, 0, 0, (getElementData(vehicle, "vehicle:handbrake") and 0xFFFFFFFF or 0x00FFFFFF))
  61.             dxDrawImage(sw - 35/zoom, sh - 130/zoom, 25/zoom, 17/zoom, SPEEDO.TEXTURES[7], 0, 0, 0, (getVehicleOverrideLights(vehicle) == 2 and 0xFFFFFFFF or 0x00FFFFFF))
  62.  
  63.             dxDrawText(string.format("%05.1f", distance).."km", sw - 225 /zoom, sh - 80/zoom, 1772/zoom, 968/zoom, 0xFFFFFFFF, 1, SPEEDO.font, "center", "center", false)
  64.  
  65.             dxDrawImage(sw - 472/zoom, sh - 180/zoom, 139/zoom, 139/zoom, SPEEDO.TEXTURES[1], 0, 0, 0, tocolor(255, 255, 255, 255), false)
  66.             dxDrawImage(sw - 472/zoom, sh - 180/zoom, 139/zoom, 139/zoom, SPEEDO.TEXTURES[3], fuel+30, 0, 0, tocolor(255, 255, 255, 255), false)
  67.  
  68.             dxDrawImage(sw - 330/zoom, sh - 310/zoom, 290/zoom, 290/zoom, SPEEDO.TEXTURES[4], arrow_speed+244, 0, 0, tocolor(255, 255, 255, 255), false)
  69.  
  70.             -- testowe informacji o spalaniu, etc.
  71.             local export=exports.si_engine_capacity
  72.             if(export)then
  73.                 local engine=getElementData(vehicle, "vehicle:engine") or export:getVehicleEngineFromModel(getElementModel(vehicle))
  74.                 local cylinders=export:getEngineCylinders(tonumber(string.format("%.1f", engine)))
  75.                 local fuel_usage=export:getFuelUsage(string.format("%.1f", engine))
  76.                 local fuel_type=getElementData(vehicle, "vehicle:type") or "?"
  77.                 local fuel_newType=export:getVehicleFuelType(fuel_type)
  78.                 local speed=math.floor(getElementSpeed(vehicle, 1)*1.025).."km/h"
  79.                 dxDrawText("Prędkość: "..speed.."\nPojemność: "..string.format("%.1f", engine).."dm³ "..cylinders.."\nSpalanie: "..string.format("%.1f", fuel_usage).."l/100km ("..fuel_newType..")", 0, 0, sw+1, sh+1, tocolor(0, 0, 0), 1, SPEEDO.font, "center", "bottom", false)
  80.                 dxDrawText("Prędkość: "..speed.."\nPojemność: "..string.format("%.1f", engine).."dm³ "..cylinders.."\nSpalanie: "..string.format("%.1f", fuel_usage).."l/100km ("..fuel_newType..")", 0, 0, sw, sh, tocolor(255, 0, 0), 1, SPEEDO.font, "center", "bottom", false)
  81.             end
  82.         end
  83.     else
  84.         removeEventHandler("onClientRender", root, SPEEDO.UI)
  85.     end
  86. end
  87.  
  88. -- distance, fuel, etc.
  89.  
  90. SPEEDO.pos = {}
  91. SPEEDO.posTick = getTickCount()
  92.  
  93. SPEEDO.preRender = function()
  94.     local vehicle = getPedOccupiedVehicle(localPlayer)
  95.     if(vehicle and getPedOccupiedVehicleSeat(localPlayer) == 0)then
  96.         local distance = getElementData(vehicle, "vehicle:distance") or 0
  97.         local fuel = getElementData(vehicle, "vehicle:fuel") or 25
  98.         local gas = getElementData(vehicle, "vehicle:gas") or 25
  99.         local actualType = getElementData(vehicle, "vehicle:actualType") or "Benzyna"
  100.  
  101.         if(((actualType == "Benzyna" or actualType == "Diesel") and fuel <= 0) or (actualType == "LPG" and gas <= 0) and getVehicleEngineState(vehicle))then
  102.             setVehicleEngineState(vehicle, false)
  103.         end
  104.  
  105.         if(#SPEEDO.pos < 3)then
  106.             SPEEDO.pos = {getElementPosition(vehicle)}
  107.             SPEEDO.posTick = getTickCount()
  108.         else
  109.             local x,y,z = getElementPosition(vehicle)
  110.             local dist = getDistanceBetweenPoints3D(SPEEDO.pos[1], SPEEDO.pos[2], SPEEDO.pos[3], x, y, z)
  111.             if(dist > 10)then
  112.                 local export=exports.si_engine_capacity
  113.                 if(export)then
  114.                     local engine=getElementData(vehicle, "vehicle:engine") or export:getVehicleEngineFromModel(getElementModel(vehicle))
  115.                     local fuel_usage=export:getFuelUsage(engine)
  116.                     local usage_10meters=fuel_usage/10000
  117.  
  118.                     setElementData(vehicle, "vehicle:distance", distance+0.01)
  119.  
  120.                     if(actualType == "Benzyna" or actualType == "Diesel")then
  121.                         setElementData(vehicle, "vehicle:fuel", fuel-usage_10meters)
  122.                     elseif(actualType == "LPG")then
  123.                         setElementData(vehicle, "vehicle:gas", gas-usage_10meters)
  124.                     end
  125.                 end
  126.                
  127.                 SPEEDO.pos = {getElementPosition(vehicle)}
  128.                 SPEEDO.posTick = getTickCount()
  129.             end
  130.         end
  131.     else
  132.         removeEventHandler("onClientPreRender", root, SPEEDO.preRender)
  133.     end
  134. end
  135.  
  136. addEventHandler("onClientVehicleEnter", root, function(player, seat)
  137.     if(player ~= localPlayer or getVehicleName(source) == "Bike" or getVehicleName(source) == "BMX" or getVehicleName(source) == "Mountain Bike")then return end
  138.  
  139.     addEventHandler("onClientRender", root, SPEEDO.UI)
  140.     addEventHandler("onClientPreRender", root, SPEEDO.preRender)
  141. end)
  142.  
  143. addEventHandler("onClientVehicleExit", root, function(player, seat)
  144.     if(player ~= localPlayer or getVehicleName(source) == "Bike" or getVehicleName(source) == "BMX" or getVehicleName(source) == "Mountain Bike")then return end
  145.  
  146.     removeEventHandler("onClientRender", root, SPEEDO.UI)
  147.     removeEventHandler("onClientPreRender", root, SPEEDO.preRender)
  148. end)
  149.  
  150. local veh = getPedOccupiedVehicle(localPlayer)
  151. if(veh and getVehicleName(veh) ~= "Bike" and getVehicleName(veh) ~= "BMX" and getVehicleName(veh) ~= "Mountain Bike")then
  152.     addEventHandler("onClientRender", root, SPEEDO.UI)
  153.     addEventHandler("onClientPreRender", root, SPEEDO.preRender)
  154. end
Advertisement
Add Comment
Please, Sign In to add comment