$(window).ready(function () {
window.addEventListener("message", function (event) {
let data = event.data;
if (data.showMenu) {
$("#container").css({ display: 'grid', opacity: 0 }).animate({ opacity: 1 }, 200);
$("#menu").show();
if (data.type === "impound") {
$("#header ul").hide();
} else {
$("#header ul").show();
}
if (data.vehiclesList != undefined) {
$("#container").data("spawnpoint", data.spawnPoint);
if (data.poundCost) $("#container").data("poundcost", data.poundCost);
if (data.poundCost != undefined) {
$(".content .vehicle-list").html(
getVehicles(data.locales, data.vehiclesList, data.poundCost)
);
} else {
$(".content .vehicle-list").html(
getVehicles(data.locales, data.vehiclesList)
);
}
$(".content h2").hide();
} else {
$(".content h2").show();
$(".content .vehicle-list").empty();
}
if (data.vehiclesImpoundedList != undefined) {
$(".impounded_content").data("poundName", data.poundName);
$(".impounded_content").data("poundSpawnPoint", data.poundSpawnPoint);
if (data.poundCost) $("#container").data("poundcost", data.poundCost);
$(".impounded_content .vehicle-list").html(
getImpoundedVehicles(data.locales, data.vehiclesImpoundedList)
);
$(".impounded_content h2").hide();
} else {
$(".impounded_content h2").show();
$(".impounded_content .vehicle-list").empty();
}
// Locales
// needs a rework
// $(".content h2").html(function (i, text) {
// return text.replace("No vehicle in this garage.", data.locales.no_veh_parking);
// });
// $(".impounded_content h2").html(function (i, text) {
// return text.replace("No vehicle impounded.", data.locales.no_veh_impounded);
// });
$(".vehicle-listing").html(function (i, text) {
return text.replace("Model", data.locales.veh_model);
});
$(".vehicle-listing").html(function (i, text) {
return text.replace("Plate", data.locales.veh_plate);
});
$(".vehicle-listing").html(function (i, text) {
return text.replace("Condition", data.locales.veh_condition);
});
} else if (data.hideAll) {
$("#container").stop(true, true).fadeOut(150, function(){
$(this).css('display','none');
});
}
});
$("#container").hide();
$(".close").click(function (event) {
$("#container").hide();
$.post("https://esx_garage/escape", "{}");
$(".impounded_content").hide();
$(".content").show();
$('li[data-page="garage"]').addClass("selected");
$('li[data-page="impounded"]').removeClass("selected");
});
document.onkeyup = function (data) {
if (data.which == 27) {
$.post("https://esx_garage/escape", "{}");
$(".impounded_content").hide();
$(".content").show();
$('li[data-page="garage"]').addClass("selected");
$('li[data-page="impounded"]').removeClass("selected");
}
};
function clamp(n, min, max){ return Math.max(min, Math.min(max, n)); }
function getVehicles(locale, vehicle, amount = null) {
let html = "";
let vehicleData = JSON.parse(vehicle);
let bodyHealth = 1000;
let engineHealth = 1000;
let tankHealth = 1000;
let vehicleDamagePercent = "";
for (let i = 0; i < vehicleData.length; i++) {
const p = vehicleData[i].props || {};
const b = typeof p.bodyHealth === 'number' ? p.bodyHealth : 1000;
const e = typeof p.engineHealth === 'number' ? p.engineHealth : 1000;
const t = typeof p.tankHealth === 'number' ? p.tankHealth : 1000;
bodyHealth = clamp((b / 1000) * 100, 0, 100);
engineHealth = clamp((e / 1000) * 100, 0, 100);
tankHealth = clamp((t / 1000) * 100, 0, 100);
const percentNumber = clamp(Math.round(((bodyHealth + engineHealth + tankHealth) / 300) * 100), 0, 100);
vehicleDamagePercent = percentNumber + "%";
const model = String(vehicleData[i].model || '').toLowerCase();
const plate = String(vehicleData[i].plate || '').toLowerCase();
html += "
";
html += "
Model: " + vehicleData[i].model + "
";
html += "
Plate: " + vehicleData[i].plate + "
";
html +=
"
Condition" + vehicleDamagePercent + " ";
html +=
"
";
html += "
";
}
return html;
}
function getImpoundedVehicles(locale, vehicle) {
let html = "";
let vehicleData = JSON.parse(vehicle);
let bodyHealth = 1000;
let engineHealth = 1000;
let tankHealth = 1000;
let vehicleDamagePercent = "";
for (let i = 0; i < vehicleData.length; i++) {
const p = vehicleData[i].props || {};
const b = typeof p.bodyHealth === 'number' ? p.bodyHealth : 1000;
const e = typeof p.engineHealth === 'number' ? p.engineHealth : 1000;
const t = typeof p.tankHealth === 'number' ? p.tankHealth : 1000;
bodyHealth = clamp((b / 1000) * 100, 0, 100);
engineHealth = clamp((e / 1000) * 100, 0, 100);
tankHealth = clamp((t / 1000) * 100, 0, 100);
const percentNumber = clamp(Math.round(((bodyHealth + engineHealth + tankHealth) / 300) * 100), 0, 100);
vehicleDamagePercent = percentNumber + "%";
const model = String(vehicleData[i].model || '').toLowerCase();
const plate = String(vehicleData[i].plate || '').toLowerCase();
html += "";
html += "
Model: " + vehicleData[i].model + "
";
html += "
Plate: " + vehicleData[i].plate + "
";
html +=
"
Condition" + vehicleDamagePercent + " ";
html +=
"
";
html += "
";
}
return html;
}
function applyFilter($container, query) {
const q = String(query || '').trim().toLowerCase();
const $cards = $container.find('.vehicle-listing');
if (!q) {
$cards.show();
return;
}
$cards.each(function () {
const model = String($(this).data('model') || '');
const plate = String($(this).data('plate') || '');
if (model.indexOf(q) !== -1 || plate.indexOf(q) !== -1) {
$(this).show();
} else {
$(this).hide();
}
});
}
$(document).on('input', '#search-garage', function () {
applyFilter($('.content .vehicle-list'), $(this).val());
});
$(document).on('input', '#search-impounded', function () {
applyFilter($('.impounded_content .vehicle-list'), $(this).val());
});
// Helpers (none for now)
$('li[data-page="garage"]').click(function (event) {
$(".impounded_content").hide();
$(".content").show();
$('li[data-page="garage"]').addClass("selected");
$('li[data-page="impounded"]').removeClass("selected");
});
$('li[data-page="impounded"]').click(function (event) {
$(".content").hide();
$(".impounded_content").show();
$('li[data-page="impounded"]').addClass("selected");
$('li[data-page="garage"]').removeClass("selected");
});
$(document).on(
"click",
"button[data-button='spawn'].vehicle-action",
function (event) {
let spawnPoint = $("#container").data("spawnpoint");
let poundCost = $("#container").data("poundcost");
let vehicleProps = $(this).data("vehprops");
// prevent empty cost
if (poundCost === undefined) poundCost = 0;
$.post(
"https://esx_garage/spawnVehicle",
JSON.stringify({
vehicleProps: vehicleProps,
spawnPoint: spawnPoint,
exitVehicleCost: poundCost,
})
);
$(".impounded_content").hide();
$(".content").show();
$('li[data-page="garage"]').addClass("selected");
$('li[data-page="impounded"]').removeClass("selected");
}
);
$(document).on(
"click",
"button[data-button='impounded'].vehicle-action",
function (event) {
let vehicleProps = $(this).data("vehprops");
let poundName = $(".impounded_content").data("poundName");
let poundSpawnPoint = $(".impounded_content").data("poundSpawnPoint");
$.post(
"https://esx_garage/impound",
JSON.stringify({
vehicleProps: vehicleProps,
poundName: poundName,
poundSpawnPoint: poundSpawnPoint,
})
);
$(".impounded_content").hide();
$(".content").show();
$('li[data-page="garage"]').addClass("selected");
$('li[data-page="impounded"]').removeClass("selected");
}
);
});