2026-04-14 17:41:39 +02:00

156 lines
4.4 KiB
JavaScript

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);
});