1
0
Fork 0
forked from Simnation/Main

lc_fuel update

This commit is contained in:
Nordi98 2025-06-17 17:17:59 +02:00
parent e9335eaf78
commit cae0aa5e6a
28 changed files with 6064 additions and 5968 deletions

View file

@ -15,7 +15,7 @@ isRecording = true
-- Local variables -- Local variables
local fuelDecor = "_FUEL_LEVEL" local fuelDecor = "_FUEL_LEVEL"
local currentConsumption = 0.0 local currentConsumption = 0.0
local fuelSynced = true local fuelSynced = false
local closestVehicleToPump = 0 local closestVehicleToPump = 0
local isNuiVariablesLoaded = false local isNuiVariablesLoaded = false
@ -137,7 +137,7 @@ function createDebugNozzleOffsetThread()
local vehCoords = GetEntityCoords(vehicle) local vehCoords = GetEntityCoords(vehicle)
-- Get vehicle's axis vectors -- Get vehicle's axis vectors
local forwardVector, rightVector, upVector = GetEntityMatrix(vehicle) local _, rightVector, _ = GetEntityMatrix(vehicle)
-- Direction from vehicle to hit point -- Direction from vehicle to hit point
local directionToHit = hitCoords - vehCoords local directionToHit = hitCoords - vehCoords
@ -155,21 +155,8 @@ function createDebugNozzleOffsetThread()
offset.right = offset.right - 0.07 offset.right = offset.right - 0.07
end end
local boneWorldPos = GetVehicleCapPos(vehicle)
-- local forwardVector, rightVector, upVector, _ = GetEntityMatrix(vehicle)
-- Scale vectors by the local offset
local forwardOffset = forwardVector * offset.forward
local rightOffset = rightVector * offset.right
local upOffset = upVector * offset.up
-- Final world position of the nozzle point -- Final world position of the nozzle point
local finalWorldPos = vector3( local finalWorldPos = getWorldPosFromOffset(vehicle, offset)
boneWorldPos.x + forwardOffset.x + rightOffset.x + upOffset.x,
boneWorldPos.y + forwardOffset.y + rightOffset.y + upOffset.y,
boneWorldPos.z + forwardOffset.z + rightOffset.z + upOffset.z
)
-- Draw a small marker at the computed position -- Draw a small marker at the computed position
DrawMarker(28, finalWorldPos.x, finalWorldPos.y, finalWorldPos.z + 0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03, 0.03, 0.03, 255, 0, 0, 180, false, true, 2, nil, nil, false) DrawMarker(28, finalWorldPos.x, finalWorldPos.y, finalWorldPos.z + 0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03, 0.03, 0.03, 255, 0, 0, 180, false, true, 2, nil, nil, false)
@ -375,6 +362,23 @@ AddEventHandler('__cfx_export_LegacyFuel_GetFuel', function(setCB)
setCB(GetFuel) setCB(GetFuel)
end) end)
function SetFuelType(vehicle, fuelType)
if not DoesEntityExist(vehicle) then
warn(("[SetFuelType] Vehicle entity does not exist. Received: %s. This is usually caused by a misconfiguration in the export."):format(tostring(vehicle)))
return
end
if not fuelType or fuelType == "nil" or fuelType == "" then
fuelType = dealWithDefaultFuelType(vehicle, "default")
end
TriggerServerEvent("lc_fuel:setVehicleFuelType", GetVehicleNumberPlateText(vehicle), fuelType)
end
exports('SetFuelType', SetFuelType)
function setFuelType(vehicle, fuelType)
return SetFuelType(vehicle, fuelType)
end
exports('setFuelType', setFuelType)
----------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------
-- Utils -- Utils
----------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------
@ -397,6 +401,8 @@ function dealWithDefaultFuelType(vehicle, fuelType)
if fuelType == "default" then if fuelType == "default" then
if IsVehicleDiesel(vehicle) then if IsVehicleDiesel(vehicle) then
fuelType = "diesel" fuelType = "diesel"
elseif IsVehicleElectric(vehicle) then
fuelType = "electric"
else else
fuelType = "regular" fuelType = "regular"
end end

View file

@ -0,0 +1,10 @@
RegisterCommand(Config.FuelTypeCommand, function()
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if not DoesEntityExist(vehicle) then
exports['lc_utils']:notify("error", Utils.translate("vehicle_not_found"))
return
end
local fuelType = getVehicleFuelTypeFromServer(vehicle)
exports['lc_utils']:notify("info", Utils.translate("fuel_types.type_title"):format(Utils.translate("fuel_types."..fuelType)))
end, false)

View file

@ -256,10 +256,10 @@ function refuelLoop(isFromJerryCan)
while DoesEntityExist(fuelNozzle) or (isFromJerryCan and GetSelectedPedWeapon(ped) == JERRY_CAN_HASH) do while DoesEntityExist(fuelNozzle) or (isFromJerryCan and GetSelectedPedWeapon(ped) == JERRY_CAN_HASH) do
local waitTime = 200 local waitTime = 200
if closestCapPos then if closestCapPos then
distanceToCap = #(GetEntityCoords(ped) - vector3(closestCapPos.x,closestCapPos.y,closestCapPos.z + customVehicleParameters.nozzleOffset.up + 0.0)) distanceToCap = #(GetEntityCoords(ped) - vector3(closestCapPos.x,closestCapPos.y,closestCapPos.z))
if distanceToCap < customVehicleParameters.distance + 0.0 and (not vehicleAttachedToNozzle or (vehicleAttachedToNozzle and DoesEntityExist(vehicleAttachedToNozzle) and vehicleAttachedToNozzle == closestVehicle)) then if distanceToCap < customVehicleParameters.distance + 0.0 and (not vehicleAttachedToNozzle or (vehicleAttachedToNozzle and DoesEntityExist(vehicleAttachedToNozzle) and vehicleAttachedToNozzle == closestVehicle)) then
waitTime = 1 waitTime = 1
Utils.Markers.drawText3D(closestCapPos.x,closestCapPos.y,closestCapPos.z + customVehicleParameters.nozzleOffset.up + 0.0, cachedTranslations.interact_with_vehicle) Utils.Markers.drawText3D(closestCapPos.x,closestCapPos.y,closestCapPos.z, cachedTranslations.interact_with_vehicle)
if IsControlJustPressed(0, 38) and not inCooldown then if IsControlJustPressed(0, 38) and not inCooldown then
-- See which one the player is nearer. The fuel cap or fuel pump -- See which one the player is nearer. The fuel cap or fuel pump
if distanceToPump >= distanceToCap then if distanceToPump >= distanceToCap then
@ -363,7 +363,27 @@ function getClosestVehicleVariables()
if not closestCapPos then if not closestCapPos then
print("Cap not found for vehicle") print("Cap not found for vehicle")
end end
return closestVehicle, closestCapPos, closestVehicleHash, customVehicleParameters
local finalWorldPos = getWorldPosFromOffset(closestVehicle, customVehicleParameters.nozzleOffset)
return closestVehicle, finalWorldPos, closestVehicleHash, customVehicleParameters
end
function getWorldPosFromOffset(vehicle, offset)
local closestCapPos = GetVehicleCapPos(vehicle)
local forwardVector, rightVector, upVector, _ = GetEntityMatrix(vehicle)
-- Adjust the offsets
local forwardOffset = forwardVector * offset.forward
local rightoffset = rightVector * offset.right
local upOffset = upVector * offset.up
-- Final world position of the nozzle point
return vector3(
closestCapPos.x + forwardOffset.x + rightoffset.x + upOffset.x,
closestCapPos.y + forwardOffset.y + rightoffset.y + upOffset.y,
closestCapPos.z + forwardOffset.z + rightoffset.z + upOffset.z
)
end end
function terminateRefuelThread() function terminateRefuelThread()

View file

@ -17,6 +17,7 @@ client_scripts {
"client/client_electric.lua", "client/client_electric.lua",
"client/client_refuel.lua", "client/client_refuel.lua",
"client/client_fuel_chart.lua", "client/client_fuel_chart.lua",
"client/client_fuel_type.lua",
} }
server_scripts { server_scripts {

View file

@ -37,5 +37,13 @@ Lang['de'] = {
['balance_electric'] = "Elektrische Ladung verkauft (%s kWh)", ['balance_electric'] = "Elektrische Ladung verkauft (%s kWh)",
['refund_fuel'] = "Kraftstoff erstattet (%s Liter)", ['refund_fuel'] = "Kraftstoff erstattet (%s Liter)",
['refund_electric'] = "Stromladung erstattet (%s kWh)", ['refund_electric'] = "Stromladung erstattet (%s kWh)",
} },
['fuel_types'] = {
['type_title'] = "Kraftstoffart: %s",
['electric'] = "Elektrisch",
['regular'] = "Regulär",
['plus'] = "Plus",
['premium'] = "Premium",
['diesel'] = "Diesel",
},
} }

View file

@ -37,5 +37,13 @@ Lang['en'] = {
['balance_electric'] = "Electric charge sold (%s kWh)", ['balance_electric'] = "Electric charge sold (%s kWh)",
['refund_fuel'] = "Fuel refunded (%s Liters)", ['refund_fuel'] = "Fuel refunded (%s Liters)",
['refund_electric'] = "Electric charge refunded (%s kWh)", ['refund_electric'] = "Electric charge refunded (%s kWh)",
} },
['fuel_types'] = {
['type_title'] = "Fuel Type: %s",
['electric'] = "Electric",
['regular'] = "Regular",
['plus'] = "Plus",
['premium'] = "Premium",
['diesel'] = "Diesel",
},
} }

View file

@ -37,5 +37,13 @@ Lang['es'] = {
['balance_electric'] = "Carga eléctrica vendida (%s kWh)", ['balance_electric'] = "Carga eléctrica vendida (%s kWh)",
['refund_fuel'] = "Combustible reembolsado (%s litros)", ['refund_fuel'] = "Combustible reembolsado (%s litros)",
['refund_electric'] = "Carga eléctrica reembolsada (%s kWh)", ['refund_electric'] = "Carga eléctrica reembolsada (%s kWh)",
} },
['fuel_types'] = {
['type_title'] = "Tipo de combustible: %s",
['electric'] = "Eléctrico",
['regular'] = "Sin plomo",
['plus'] = "Plus",
['premium'] = "Premium",
['diesel'] = "Diésel",
},
} }

View file

@ -37,5 +37,13 @@ Lang['fr'] = {
['balance_electric'] = "Charge électrique vendue (%s kWh)", ['balance_electric'] = "Charge électrique vendue (%s kWh)",
['refund_fuel'] = "Carburant remboursé (%s litres)", ['refund_fuel'] = "Carburant remboursé (%s litres)",
['refund_electric'] = "Recharge électrique remboursée (%s kWh)", ['refund_electric'] = "Recharge électrique remboursée (%s kWh)",
} },
['fuel_types'] = {
['type_title'] = "Type de carburant : %s",
['electric'] = "Électrique",
['regular'] = "Ordinaire",
['plus'] = "Plus",
['premium'] = "Premium",
['diesel'] = "Diesel",
},
} }

View file

@ -37,5 +37,13 @@ Lang['ja'] = {
['balance_electric'] = "電気充電販売 (%s kWh)", ['balance_electric'] = "電気充電販売 (%s kWh)",
['refund_fuel'] = "燃料が返金されました(%sリットル", ['refund_fuel'] = "燃料が返金されました(%sリットル",
['refund_electric'] = "電気充電が返金されました(%s kWh", ['refund_electric'] = "電気充電が返金されました(%s kWh",
} },
['fuel_types'] = {
['type_title'] = "燃料の種類: %s",
['electric'] = "電気",
['regular'] = "レギュラー",
['plus'] = "プラス",
['premium'] = "プレミアム",
['diesel'] = "ディーゼル",
},
} }

View file

@ -37,5 +37,13 @@ Lang['tr'] = {
['balance_electric'] = "Elektrik şarjı satıldı (%s kWh)", ['balance_electric'] = "Elektrik şarjı satıldı (%s kWh)",
['refund_fuel'] = "Yakıt iade edildi (%s litre)", ['refund_fuel'] = "Yakıt iade edildi (%s litre)",
['refund_electric'] = "Elektrik şarjı iade edildi (%s kWh)", ['refund_electric'] = "Elektrik şarjı iade edildi (%s kWh)",
} },
['fuel_types'] = {
['type_title'] = "Yakıt Türü: %s",
['electric'] = "Elektrikli",
['regular'] = "Normal",
['plus'] = "Plus",
['premium'] = "Premium",
['diesel'] = "Dizel",
},
} }

View file

@ -37,5 +37,13 @@ Lang['zh-cn'] = {
['balance_electric'] = "电能销售收入 (%s 千瓦时)", ['balance_electric'] = "电能销售收入 (%s 千瓦时)",
['refund_fuel'] = "燃料已退款(%s 升)", ['refund_fuel'] = "燃料已退款(%s 升)",
['refund_electric'] = "电力已退款(%s 千瓦时)", ['refund_electric'] = "电力已退款(%s 千瓦时)",
} },
['fuel_types'] = {
['type_title'] = "燃料类型:%s",
['electric'] = "电动",
['regular'] = "92号燃油",
['plus'] = "95号燃油",
['premium'] = "98号燃油",
['diesel'] = "柴油",
},
} }

View file

@ -469,11 +469,13 @@ end
function setVehicleFuelType(plate, fuelType) function setVehicleFuelType(plate, fuelType)
if not isFuelTypeValid(fuelType) then if not isFuelTypeValid(fuelType) then
fuelType = "regular"
print("Invalid fuel type ("..fuelType..") set to vehicle ("..plate..")") print("Invalid fuel type ("..fuelType..") set to vehicle ("..plate..")")
fuelType = "regular"
end end
playerVehiclesFuelType[plate] = fuelType playerVehiclesFuelType[plate] = fuelType
-- Only store in database if the vehicle is in player vehicles table
if Config.SaveAllVehicleFuelTypes == true or (Utils.Framework.getVehicleOwner(Utils.Math.trim(plate)) ~= false or Utils.Framework.getVehicleOwner(plate) ~= false) then
local sql = [[ local sql = [[
INSERT INTO `player_vehicles_fuel_type` (plate, fuelType) INSERT INTO `player_vehicles_fuel_type` (plate, fuelType)
VALUES (@plate, @fuelType) VALUES (@plate, @fuelType)
@ -481,6 +483,7 @@ function setVehicleFuelType(plate, fuelType)
]]; ]];
Utils.Database.execute(sql, {['@plate'] = plate, ['@fuelType'] = fuelType}) Utils.Database.execute(sql, {['@plate'] = plate, ['@fuelType'] = fuelType})
end end
end
function cacheplayerVehiclesFuelTypeType() function cacheplayerVehiclesFuelTypeType()
local sql = "SELECT * FROM player_vehicles_fuel_type"; local sql = "SELECT * FROM player_vehicles_fuel_type";
@ -488,7 +491,7 @@ function cacheplayerVehiclesFuelTypeType()
for _, value in pairs(queryData) do for _, value in pairs(queryData) do
playerVehiclesFuelType[value.plate] = value.fuelType playerVehiclesFuelType[value.plate] = value.fuelType
end end
print("^2[lc_fuel] Fuel types successfully fetched from database^7") print("^2[lc_fuel] #"..#queryData.." Fuel types successfully fetched from database^7")
end end
function Wrapper(source,cb) function Wrapper(source,cb)

View file

@ -1 +1 @@
1.2.2 1.2.3