let ReturnedFuelValues = undefined; async function WaitUntilFuelDataComes() { return new Promise(async (resolve, reject) => { let tried = 0; let finished = false; let response = false; while (finished === false) { await Wait(500); if (tried > 3) { finished = true; response = false; break; } if (ReturnedFuelValues) { finished = true; response = true; break; } else { tried++; continue; } } return resolve(response); }); } /** * @param {string} key * @returns {Array} */ app.use("/getAllVehicleCoordsAndCredentials.lvorex", express.json()); app.post("/getAllVehicleCoordsAndCredentials.lvorex", async (req, res) => { const postBody = req.body; const { keyFound } = await controlKey(req, postBody.key); if (keyFound === false) return res.json({ code: 404, message: "Not authorized." }); const allVehicles = GetAllVehicles(); const toInsertVehicles = []; if (config.Framework.includes("qb")) { for await (const vehicle of allVehicles) { const isExists = DoesEntityExist(vehicle); if (!isExists) continue; const plate = GetVehicleNumberPlateText(vehicle); let result = await query(` SELECT * FROM \`player_vehicles\` WHERE \`plate\` = '${plate.trim()}' `); if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." }); if (result.length === 0) continue; const vehicleCredentials = FrameworkObject.Shared.Vehicles[result[0].vehicle]; const { fuel } = result[0]; result = await query(` SELECT * FROM \`players\` WHERE \`citizenid\` = '${result[0].citizenid}' `); if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." }); const ownerCharInfo = JSON.parse(result[0].charinfo); toInsertVehicles.push({ plate: plate.trim(), coords: GetEntityCoords(vehicle), label: vehicleCredentials.name, owner: ownerCharInfo.firstname + " " + ownerCharInfo.lastname, owneruid: result[0].citizenid, fuel: fuel, vehicleId: vehicle, }); } } else if (config.Framework.includes("esx")) { for await (const vehicle of allVehicles) { const isExists = DoesEntityExist(vehicle); if (!isExists) continue; const plate = GetVehicleNumberPlateText(vehicle); let result = await query(` select * from \`owned_vehicles\` where \`plate\` = '${plate.trim()}' `); if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." }); if (result.length === 0) continue; const { owner, vehicle: vehicleData } = result[0]; const vehicleDataJSON = JSON.parse(vehicleData); let vehicleCredentials = JSON.parse(result[0].vehicle); let expectingVehicle = undefined; result = await LV.GetAllServerVehicles(); result.forEach((vdatabase) => { if (expectingVehicle) return; if (vehicleCredentials.model === GetHashKey(vdatabase.model)) { expectingVehicle = vdatabase; } }); result = await query(` SELECT * FROM \`users\` WHERE \`identifier\` = '${owner}' `); if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." }); // Check if user exists before accessing properties if (result.length === 0) { console.log( `User with identifier ${owner} not found for vehicle ${plate}` ); continue; } result = result[0]; toInsertVehicles.push({ plate: plate.trim(), coords: GetEntityCoords(vehicle), label: expectingVehicle ? expectingVehicle.name : "Unknown Vehicle", owner: result.firstname + " " + result.lastname, owneruid: owner, fuel: vehicleDataJSON.fuelLevel ? parseInt(vehicleDataJSON.fuelLevel) : 100, vehicleId: vehicle, }); } } // Fuel if (toInsertVehicles.length > 0) { emitNet( "mAdmin:client:getvehiclesfuels", -1, JSON.stringify(toInsertVehicles) ); const datastatus = await WaitUntilFuelDataComes(); if (datastatus) { toInsertVehicles.forEach((veh) => { veh.fuel = parseInt(String(ReturnedFuelValues[veh.plate])); }); } } res.json({ code: 200, message: toInsertVehicles }); }); RegisterNetEvent("mAdmin:server:setvehiclesfuels"); on("mAdmin:server:setvehiclesfuels", function (ReturnedData) { ReturnedFuelValues = JSON.parse(ReturnedData); });