mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-17 05:56:01 +01:00
591 lines
23 KiB
Lua
591 lines
23 KiB
Lua
local FUEL_DECOR = "_ANDY_FUEL_DECORE_"
|
|
local nozzleDropped = false
|
|
local holdingNozzle = false
|
|
local nozzleInVehicle = false
|
|
local nozzle
|
|
local rope
|
|
local vehicleFueling
|
|
local usedPump
|
|
local pumpCoords
|
|
local wastingFuel = false
|
|
local usingCan = false
|
|
|
|
-- Nozzle Z position based on vehicle class.
|
|
local nozzleBasedOnClass = {
|
|
0.65, -- Compacts
|
|
0.65, -- Sedans
|
|
0.85, -- SUVs
|
|
0.6, -- Coupes
|
|
0.55, -- Muscle
|
|
0.6, -- Sports Classics
|
|
0.6, -- Sports
|
|
0.55, -- Super
|
|
0.12, -- Motorcycles
|
|
0.8, -- Off-road
|
|
0.7, -- Industrial
|
|
0.6, -- Utility
|
|
0.7, -- Vans
|
|
0.0, -- Cycles
|
|
0.0, -- Boats
|
|
0.0, -- Helicopters
|
|
0.0, -- Planes
|
|
0.6, -- Service
|
|
0.65, -- Emergency
|
|
0.65, -- Military
|
|
0.75, -- Commercial
|
|
0.0 -- Trains
|
|
}
|
|
|
|
-- ND Core object.
|
|
if not config.standalone then
|
|
NDCore = exports["ND_Core"]:GetCoreObject()
|
|
end
|
|
|
|
-- Setting the electric vehicle config keys to hashes.
|
|
for _, vehHash in pairs(config.electricVehicles) do
|
|
config.electricVehicles[vehHash] = vehHash
|
|
end
|
|
|
|
-- Get the fuel of a vehicle, which is set to an entity.
|
|
function GetFuel(vehicle)
|
|
if not DecorExistOn(vehicle, FUEL_DECOR) then
|
|
return GetVehicleFuelLevel(vehicle)
|
|
end
|
|
return DecorGetFloat(vehicle, FUEL_DECOR)
|
|
end
|
|
|
|
-- Setting the fuel to the vehicle entity using decor.
|
|
function SetFuel(vehicle, fuel)
|
|
if type(fuel) == "number" and fuel >= 0 and fuel <= 100 then
|
|
SetVehicleFuelLevel(vehicle, fuel)
|
|
DecorSetFloat(vehicle, FUEL_DECOR, GetVehicleFuelLevel(vehicle))
|
|
end
|
|
end
|
|
|
|
-- returns pump position if a player is near it.
|
|
function nearPump(coords)
|
|
local entity = nil
|
|
for hash in pairs(config.pumpModels) do
|
|
entity = GetClosestObjectOfType(coords.x, coords.y, coords.z, 0.8, hash, true, true, true)
|
|
if entity ~= 0 then break end
|
|
end
|
|
if config.pumpModels[GetEntityModel(entity)] then
|
|
return GetEntityCoords(entity), entity
|
|
end
|
|
end
|
|
|
|
-- Draws 3D text on coords.
|
|
function DrawText3D(x, y, z, text)
|
|
local onScreen, _x, _y = World3dToScreen2d(x, y, z)
|
|
local pX, pY, pZ = table.unpack(GetGameplayCamCoords())
|
|
SetTextScale(0.4, 0.4)
|
|
SetTextFont(4)
|
|
SetTextProportional(1)
|
|
SetTextEntry("STRING")
|
|
SetTextCentre(true)
|
|
SetTextColour(255, 255, 255, 255)
|
|
SetTextOutline()
|
|
AddTextComponentString(text)
|
|
DrawText(_x, _y)
|
|
end
|
|
|
|
-- used to load the filling manually animation.
|
|
function LoadAnimDict(dict)
|
|
if not HasAnimDictLoaded(dict) then
|
|
RequestAnimDict(dict)
|
|
while not HasAnimDictLoaded(dict) do
|
|
Wait(1)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Used to play the effect of pouring fuel from the nozzle.
|
|
function PlayEffect(pdict, pname)
|
|
CreateThread(function()
|
|
local position = GetOffsetFromEntityInWorldCoords(nozzle, 0.0, 0.28, 0.17)
|
|
UseParticleFxAssetNextCall(pdict)
|
|
local pfx = StartParticleFxLoopedAtCoord(pname, position.x, position.y, position.z, 0.0, 0.0, GetEntityHeading(nozzle), 1.0, false, false, false, false)
|
|
Wait(100)
|
|
StopParticleFxLooped(pfx, 0)
|
|
end)
|
|
end
|
|
|
|
-- Getting the vehicle infront if the player.
|
|
function vehicleInFront()
|
|
local entity = nil
|
|
local offset = GetOffsetFromEntityInWorldCoords(ped, 0.0, 2.0, 0.0)
|
|
local rayHandle = CastRayPointToPoint(pedCoords.x, pedCoords.y, pedCoords.z - 1.3, offset.x, offset.y, offset.z, 10, ped, 0)
|
|
local A, B, C, D, entity = GetRaycastResult(rayHandle)
|
|
if IsEntityAVehicle(entity) then
|
|
return entity
|
|
end
|
|
end
|
|
|
|
-- Create nozzle, rope and attach them to the player.
|
|
function grabNozzleFromPump()
|
|
LoadAnimDict("anim@am_hold_up@male")
|
|
TaskPlayAnim(ped, "anim@am_hold_up@male", "shoplift_high", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
Wait(300)
|
|
nozzle = CreateObject(`prop_cs_fuel_nozle`, 0, 0, 0, true, true, true)
|
|
AttachEntityToEntity(nozzle, ped, GetPedBoneIndex(ped, 0x49D9), 0.11, 0.02, 0.02, -80.0, -90.0, 15.0, true, true, false, true, 1, true)
|
|
RopeLoadTextures()
|
|
while not RopeAreTexturesLoaded() do
|
|
Wait(0)
|
|
end
|
|
RopeLoadTextures()
|
|
while not pump do
|
|
Wait(0)
|
|
end
|
|
rope = AddRope(pump.x, pump.y, pump.z, 0.0, 0.0, 0.0, 3.0, 1, 1000.0, 0.0, 1.0, false, false, false, 1.0, true)
|
|
while not rope do
|
|
Wait(0)
|
|
end
|
|
ActivatePhysics(rope)
|
|
local nozzlePos = GetEntityCoords(nozzle)
|
|
nozzlePos = GetOffsetFromEntityInWorldCoords(nozzle, 0.0, -0.033, -0.195)
|
|
AttachEntitiesToRope(rope, pumpHandle, nozzle, pump.x, pump.y, pump.z + 1.45, nozzlePos.x, nozzlePos.y, nozzlePos.z, 5.0, false, false, nil, nil)
|
|
nozzleDropped = false
|
|
holdingNozzle = true
|
|
nozzleInVehicle = false
|
|
vehicleFueling = false
|
|
usedPump = pumpHandle
|
|
SendNUIMessage({
|
|
type = "status",
|
|
status = true
|
|
})
|
|
SendNUIMessage({
|
|
type = "update",
|
|
fuelCost = "0.00",
|
|
fuelTank = "0.00"
|
|
})
|
|
end
|
|
|
|
-- attach the nozzle to the player.
|
|
function grabExistingNozzle()
|
|
AttachEntityToEntity(nozzle, ped, GetPedBoneIndex(ped, 0x49D9), 0.11, 0.02, 0.02, -80.0, -90.0, 15.0, true, true, false, true, 1, true)
|
|
nozzleDropped = false
|
|
holdingNozzle = true
|
|
nozzleInVehicle = false
|
|
vehicleFueling = false
|
|
end
|
|
|
|
-- attach nozzle to vehicle.
|
|
function putNozzleInVehicle(vehicle, ptankBone, isBike, dontClear)
|
|
if isBike then
|
|
AttachEntityToEntity(nozzle, vehicle, ptankBone, 0.0, -0.2, 0.2, -80.0, 0.0, 0.0, true, true, false, false, 1, true)
|
|
else
|
|
AttachEntityToEntity(nozzle, vehicle, ptankBone, -0.23, 0.0, 0.6, -125.0, -90.0, -90.0, true, true, false, false, 1, true)
|
|
end
|
|
if not dontClear and IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
ClearPedTasks(ped)
|
|
end
|
|
nozzleDropped = false
|
|
holdingNozzle = false
|
|
nozzleInVehicle = true
|
|
wastingFuel = false
|
|
vehicleFueling = vehicle
|
|
end
|
|
|
|
-- detach nozzle from everything and hide ui.
|
|
function dropNozzle()
|
|
DetachEntity(nozzle, true, true)
|
|
nozzleDropped = true
|
|
holdingNozzle = false
|
|
nozzleInVehicle = false
|
|
vehicleFueling = false
|
|
SendNUIMessage({
|
|
type = "status",
|
|
status = false
|
|
})
|
|
end
|
|
|
|
-- delete nozzle and rope, and hide ui.
|
|
function returnNozzleToPump()
|
|
DeleteEntity(nozzle)
|
|
RopeUnloadTextures()
|
|
DeleteRope(rope)
|
|
nozzleDropped = false
|
|
holdingNozzle = false
|
|
nozzleInVehicle = false
|
|
vehicleFueling = false
|
|
SendNUIMessage({
|
|
type = "status",
|
|
status = false
|
|
})
|
|
end
|
|
|
|
-- Get important information.
|
|
CreateThread(function()
|
|
while true do
|
|
ped = PlayerPedId()
|
|
pedCoords = GetEntityCoords(ped)
|
|
pump, pumpHandle = nearPump(pedCoords)
|
|
veh = GetVehiclePedIsIn(ped, true)
|
|
inveh = GetVehiclePedIsIn(ped, false)
|
|
Wait(500)
|
|
end
|
|
end)
|
|
|
|
-- Refuel the vehicle.
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(2000)
|
|
if vehicleFueling then
|
|
local classMultiplier = config.vehicleClasses[GetVehicleClass(vehicleFueling)]
|
|
if usingCan then
|
|
while usingCan do
|
|
local fuel = GetFuel(vehicleFueling)
|
|
if fuel < 97 then
|
|
SetFuel(vehicleFueling, fuel + (2.5 / classMultiplier))
|
|
else
|
|
fuel = 100.0
|
|
SetFuel(vehicleFueling, fuel)
|
|
vehicleFueling = false
|
|
end
|
|
Wait(500)
|
|
end
|
|
else
|
|
local cost = 0
|
|
while vehicleFueling do
|
|
local fuel = GetFuel(vehicleFueling)
|
|
if not DoesEntityExist(vehicleFueling) then
|
|
dropNozzle()
|
|
break
|
|
end
|
|
fuel = GetFuel(vehicleFueling)
|
|
cost = cost + ((2.0 / classMultiplier) * config.fuelCostMultiplier) - math.random(0, 100) / 100
|
|
if not config.standalone then
|
|
if NDCore.Functions.GetSelectedCharacter().bank < cost then
|
|
SendNUIMessage({
|
|
type = "warn"
|
|
})
|
|
vehicleFueling = false
|
|
break
|
|
end
|
|
end
|
|
if fuel < 97 then
|
|
SetFuel(vehicleFueling, fuel + ((2.0 / classMultiplier) - math.random(0, 100) / 100))
|
|
else
|
|
cost = 0
|
|
fuel = 100.0
|
|
SetFuel(vehicleFueling, fuel)
|
|
vehicleFueling = false
|
|
end
|
|
SendNUIMessage({
|
|
type = "update",
|
|
fuelCost = string.format("%.2f", cost),
|
|
fuelTank = string.format("%.2f", fuel)
|
|
})
|
|
Wait(600)
|
|
end
|
|
if not config.standalone and cost ~= 0 then
|
|
TriggerServerEvent("ND_Fuel:pay", cost)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- pumping fuel on the groud.
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(500)
|
|
if wastingFuel then
|
|
local cost = 0
|
|
while wastingFuel do
|
|
cost = cost + (2.0 * config.fuelCostMultiplier) - math.random(0, 100) / 100
|
|
SendNUIMessage({
|
|
type = "update",
|
|
fuelCost = string.format("%.2f", cost),
|
|
fuelTank = "0.0"
|
|
})
|
|
if not config.standalone then
|
|
if NDCore.Functions.GetSelectedCharacter().bank < cost then
|
|
SendNUIMessage({
|
|
type = "warn"
|
|
})
|
|
end
|
|
end
|
|
Wait(800)
|
|
end
|
|
if not config.standalone and cost ~= 0 then
|
|
TriggerServerEvent("ND_Fuel:pay", cost)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Grabbing and returning the nozzle from the pump.
|
|
CreateThread(function()
|
|
local wait = 500
|
|
while true do
|
|
Wait(wait)
|
|
if pump and inveh == 0 then
|
|
wait = 0
|
|
if not holdingNozzle and not nozzleInVehicle and not nozzleDropped then
|
|
local jerryCanText = ""
|
|
local ammo = GetAmmoInPedWeapon(ped, 883325847)
|
|
local weapon = HasPedGotWeapon(ped, 883325847)
|
|
local price = config.jerryCanPrice
|
|
if not weapon then
|
|
jerryCanText = " \n$" .. price .. " buy Jerry Can [G]"
|
|
elseif weapon and GetSelectedPedWeapon(ped) == 883325847 and ammo < 4500 then
|
|
price = math.floor(config.jerryCanrefillCost - (config.jerryCanrefillCost / (4500 / ammo)))
|
|
jerryCanText = " \n$" .. price .. " refill Jerry Can [G]"
|
|
end
|
|
DrawText3D(pump.x, pump.y, pump.z + 1.2, "Grab Nozzle [E]" .. jerryCanText)
|
|
if IsControlJustPressed(0, 51) then
|
|
grabNozzleFromPump()
|
|
Wait(1000)
|
|
ClearPedTasks(ped)
|
|
end
|
|
if IsControlJustPressed(0, 47) then
|
|
if not config.standalone then
|
|
if NDCore.Functions.GetSelectedCharacter().bank > price then
|
|
TriggerServerEvent("ND_Fuel:jerryCan", price)
|
|
if HasPedGotWeapon(ped, 883325847) then
|
|
SetPedAmmo(ped, 883325847, 4500)
|
|
else
|
|
GiveWeaponToPed(ped, 883325847, 4500, false, true)
|
|
end
|
|
end
|
|
else
|
|
if HasPedGotWeapon(ped, 883325847) then
|
|
SetPedAmmo(ped, 883325847, 4500)
|
|
else
|
|
GiveWeaponToPed(ped, 883325847, 4500, false, true)
|
|
end
|
|
end
|
|
end
|
|
elseif holdingNozzle and pumpHandle == usedPump then
|
|
DrawText3D(pump.x, pump.y, pump.z + 1.2, "Return Nozzle [E]")
|
|
if IsControlJustPressed(0, 51) then
|
|
LoadAnimDict("anim@am_hold_up@male")
|
|
TaskPlayAnim(ped, "anim@am_hold_up@male", "shoplift_high", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
Wait(300)
|
|
returnNozzleToPump()
|
|
Wait(1000)
|
|
ClearPedTasks(ped)
|
|
end
|
|
end
|
|
else
|
|
wait = 500
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Attaching and taking the nozzle form the vehicle, and dropping the nozzle form the player or vehicle.
|
|
CreateThread(function()
|
|
local wait = 500
|
|
while true do
|
|
Wait(wait)
|
|
if holdingNozzle or nozzleInVehicle or nozzleDropped then
|
|
wait = 0
|
|
|
|
-- drop the nozzle and remove it if it's far away from the pump.
|
|
if pump then
|
|
pumpCoords = GetEntityCoords(usedPump)
|
|
end
|
|
if nozzle and pumpCoords then
|
|
nozzleLocation = GetEntityCoords(nozzle)
|
|
if #(pumpCoords - pedCoords) < 3.0 then
|
|
SendNUIMessage({
|
|
type = "status",
|
|
status = true
|
|
})
|
|
else
|
|
SendNUIMessage({
|
|
type = "status",
|
|
status = false
|
|
})
|
|
end
|
|
if #(nozzleLocation - pumpCoords) > 6.0 then
|
|
dropNozzle()
|
|
elseif #(pumpCoords - pedCoords) > 100.0 then
|
|
returnNozzleToPump()
|
|
end
|
|
if nozzleDropped and #(nozzleLocation - pedCoords) < 1.5 then
|
|
DrawText3D(nozzleLocation.x, nozzleLocation.y, nozzleLocation.z, "Grab Nozzle [E]")
|
|
if IsControlJustPressed(0, 51) then
|
|
LoadAnimDict("anim@mp_snowball")
|
|
TaskPlayAnim(ped, "anim@mp_snowball", "pickup_snowball", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
Wait(700)
|
|
grabExistingNozzle()
|
|
ClearPedTasks(ped)
|
|
end
|
|
end
|
|
end
|
|
|
|
local veh = vehicleInFront(ped, pedCoords)
|
|
|
|
-- Animations for manually fueling and effect for sparying fuel.
|
|
if holdingNozzle and nozzle then
|
|
DisableControlAction(0, 25, true)
|
|
DisableControlAction(0, 24, true)
|
|
if IsDisabledControlPressed(0, 24) then
|
|
if veh and tankPosition and #(pedCoords - tankPosition) < 1.2 then
|
|
if not IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
LoadAnimDict("timetable@gardener@filling_can")
|
|
TaskPlayAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
end
|
|
wastingFuel = false
|
|
vehicleFueling = veh
|
|
else
|
|
if IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
vehicleFueling = false
|
|
ClearPedTasks(ped)
|
|
end
|
|
if nozzleLocation then
|
|
wastingFuel = true
|
|
PlayEffect("core", "veh_trailer_petrol_spray")
|
|
end
|
|
end
|
|
else
|
|
if IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
vehicleFueling = false
|
|
ClearPedTasks(ped)
|
|
end
|
|
wastingFuel = false
|
|
end
|
|
end
|
|
|
|
-- attaching and taking the nozzle from the vehicle.
|
|
if veh then
|
|
local vehClass = GetVehicleClass(veh)
|
|
local zPos = nozzleBasedOnClass[vehClass + 1]
|
|
local isBike = false
|
|
|
|
if vehClass == 8 and vehClass ~= 13 and not config.electricVehicles[GetHashKey(veh)] then
|
|
tankBone = GetEntityBoneIndexByName(veh, "petroltank")
|
|
if tankBone == -1 then
|
|
tankBone = GetEntityBoneIndexByName(veh, "engine")
|
|
end
|
|
isBike = true
|
|
elseif vehClass ~= 13 and not config.electricVehicles[GetHashKey(veh)] then
|
|
tankBone = GetEntityBoneIndexByName(veh, "petroltank_l")
|
|
if tankBone == -1 then
|
|
tankBone = GetEntityBoneIndexByName(veh, "hub_lr")
|
|
end
|
|
end
|
|
tankPosition = GetWorldPositionOfEntityBone(veh, tankBone)
|
|
if tankPosition and #(pedCoords - tankPosition) < 1.2 then
|
|
if not nozzleInVehicle and holdingNozzle then
|
|
DrawText3D(tankPosition.x, tankPosition.y, tankPosition.z + zPos, "Attach Nozzle [E]")
|
|
if IsControlJustPressed(0, 51) then
|
|
LoadAnimDict("timetable@gardener@filling_can")
|
|
TaskPlayAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
Wait(300)
|
|
putNozzleInVehicle(veh, tankBone, isBike, true)
|
|
Wait(300)
|
|
ClearPedTasks(ped)
|
|
end
|
|
elseif nozzleInVehicle then
|
|
DrawText3D(tankPosition.x, tankPosition.y, tankPosition.z + zPos, "Grab Nozzle [E]")
|
|
if IsControlJustPressed(0, 51) then
|
|
LoadAnimDict("timetable@gardener@filling_can")
|
|
TaskPlayAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
Wait(300)
|
|
grabExistingNozzle()
|
|
Wait(300)
|
|
ClearPedTasks(ped)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
wait = 500
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- refueling using jerry can.
|
|
CreateThread(function()
|
|
local wait = 500
|
|
while true do
|
|
Wait(wait)
|
|
if GetSelectedPedWeapon(ped) == 883325847 and not holdingNozzle and not nozzleInVehicle then
|
|
wait = 0
|
|
local veh = vehicleInFront(ped, pedCoords)
|
|
if veh then
|
|
local vehClass = GetVehicleClass(veh)
|
|
local zPos = nozzleBasedOnClass[vehClass + 1]
|
|
local can = GetAmmoInPedWeapon(ped, 883325847)
|
|
|
|
if vehClass == 8 and vehClass ~= 13 and not config.electricVehicles[GetHashKey(veh)] then
|
|
tankBone = GetEntityBoneIndexByName(veh, "petroltank")
|
|
if tankBone == -1 then
|
|
tankBone = GetEntityBoneIndexByName(veh, "engine")
|
|
end
|
|
elseif vehClass ~= 13 and not config.electricVehicles[GetHashKey(veh)] then
|
|
tankBone = GetEntityBoneIndexByName(veh, "petroltank_l")
|
|
if tankBone == -1 then
|
|
tankBone = GetEntityBoneIndexByName(veh, "hub_lr")
|
|
end
|
|
end
|
|
tankPosition = GetWorldPositionOfEntityBone(veh, tankBone)
|
|
if tankPosition and #(pedCoords - tankPosition) < 1.2 then
|
|
local fuel = GetFuel(veh)
|
|
DrawText3D(tankPosition.x, tankPosition.y, tankPosition.z + zPos, math.floor(fuel) .. "% refuel [E]")
|
|
local ammo = GetAmmoInPedWeapon(ped, 883325847)
|
|
if IsControlPressed(0, 51) and ammo > 0 then
|
|
if not IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
LoadAnimDict("timetable@gardener@filling_can")
|
|
TaskPlayAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 2.0, 8.0, -1, 50, 0, 0, 0, 0)
|
|
elseif can and DoesEntityExist(veh) then
|
|
SetPedAmmo(ped, 883325847, ammo - 3)
|
|
vehicleFueling = veh
|
|
usingCan = true
|
|
end
|
|
else
|
|
vehicleFueling = false
|
|
usingCan = false
|
|
if IsEntityPlayingAnim(ped, "timetable@gardener@filling_can", "gar_ig_5_filling_can", 3) then
|
|
ClearPedTasks(ped)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
wait = 500
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Create blips for each gas station location.
|
|
CreateThread(function()
|
|
for _, coords in pairs(config.blipLocations) do
|
|
local blip = AddBlipForCoord(coords)
|
|
SetBlipSprite(blip, 361)
|
|
SetBlipScale(blip, 0.9)
|
|
SetBlipColour(blip, 4)
|
|
SetBlipDisplay(blip, 4)
|
|
SetBlipAsShortRange(blip, true)
|
|
BeginTextCommandSetBlipName("STRING")
|
|
AddTextComponentString("Gas Station")
|
|
EndTextCommandSetBlipName(blip)
|
|
end
|
|
end)
|
|
|
|
-- vehicle fuel consumption.
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(3500)
|
|
local pedVeh = GetVehiclePedIsIn(ped)
|
|
if pedVeh ~= 0 then
|
|
local vehClass = GetVehicleClass(pedVeh)
|
|
local fuel = GetFuel(pedVeh)
|
|
if fuel < 5.0 and GetIsVehicleEngineRunning(pedVeh) then
|
|
DisableControlAction(0, 71)
|
|
SetVehicleEngineOn(pedVeh, false, true, true)
|
|
end
|
|
SetFuel(pedVeh, fuel - ((GetVehicleCurrentRpm(pedVeh) * config.vehicleClasses[vehClass]) / 1.7))
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- spawn pumps on the map.
|
|
CreateThread(function()
|
|
for _, pumps in pairs(config.addPumps) do
|
|
CreateObject(GetHashKey(pumps.hash), pumps.x, pumps.y, pumps.z - 1.0, true, true, true)
|
|
end
|
|
end) |