async function objectDialog(type) {
return new Promise(async function(resolve, reject) {
switch(type) {
case "item": {
resolve( await itemsDialog() );
break;
}
case "account": {
resolve( await accountsDialog() );
break;
}
case "weapon": {
resolve( await weaponsDialog() );
break;
}
}
});
}
function getDefaultMarkerCustomization() {
return {
type: 29,
scale: {
x: 0.7,
y: 0.7,
z: 0.7
},
color: {
red: 0,
green: 255,
blue: 0,
opacity: 200
},
rotation: {
x: 0.0,
y: 0.0,
z: 0.0
},
followCamera: true,
bounce: false,
rotate: false
}
}
async function markerDialog(currentMarkerData) {
return new Promise((resolve, reject) => {
let markerModal = $("#marker-customization-dialog-modal");
if(!currentMarkerData) {
currentMarkerData = getDefaultMarkerCustomization()
}
$("#marker-type").val(currentMarkerData.type);
$("#marker-size-x").val(currentMarkerData.scale.x);
$("#marker-size-y").val(currentMarkerData.scale.y);
$("#marker-size-z").val(currentMarkerData.scale.z);
$("#marker-color-red").val(currentMarkerData.color.red);
$("#marker-color-green").val(currentMarkerData.color.green);
$("#marker-color-blue").val(currentMarkerData.color.blue);
$("#marker-color-opacity").val(currentMarkerData.color.opacity);
$("#marker-rotation-x").val(currentMarkerData.rotation.x);
$("#marker-rotation-y").val(currentMarkerData.rotation.y);
$("#marker-rotation-z").val(currentMarkerData.rotation.z);
$("#marker-follow-camera").prop("checked", currentMarkerData.followCamera);
$("#marker-bounce").prop("checked", currentMarkerData.bounce);
$("#marker-rotate").prop("checked", currentMarkerData.rotate);
$("#marker-customization-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
let markerData = {
type: parseInt( $("#marker-type").val() ),
scale: {
x: parseFloat( $("#marker-size-x").val() ),
y: parseFloat( $("#marker-size-y").val() ),
z: parseFloat( $("#marker-size-z").val() )
},
color: {
red: parseInt( $("#marker-color-red").val() ),
green: parseInt( $("#marker-color-green").val() ),
blue: parseInt( $("#marker-color-blue").val() ),
opacity: parseInt( $("#marker-color-opacity").val() )
},
rotation: {
x: parseFloat( $("#marker-rotation-x").val() ),
y: parseFloat( $("#marker-rotation-y").val() ),
z: parseFloat( $("#marker-rotation-z").val() )
},
followCamera: $("#marker-follow-camera").prop("checked"),
bounce: $("#marker-bounce").prop("checked"),
rotate: $("#marker-rotate").prop("checked")
}
markerModal.modal("hide");
resolve(markerData);
})
markerModal.modal("show");
});
}
function getDefaultBlipCustomization() {
return {
isEnabled: true,
sprite: 52,
label: "Shop",
scale: "0.8",
color: 2,
display: 2,
}
}
async function blipDialog(currentBlipData) {
return new Promise((resolve, reject) => {
let blipModal = $("#blip-customization-dialog-modal");
if(!currentBlipData) {
currentBlipData = getDefaultBlipCustomization()
}
$("#blip-enabled").prop("checked", currentBlipData.isEnabled).change();
$("#blip-sprite").val(currentBlipData.sprite);
$("#blip-name").val(currentBlipData.label);
$("#blip-color").val(currentBlipData.color);
$("#blip-display").val(currentBlipData.display);
$("#blip-scale").val(currentBlipData.scale);
$("#blip-customization-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
let blipData = {
isEnabled: $("#blip-enabled").prop("checked"),
sprite: parseInt( $("#blip-sprite").val() ),
label: $("#blip-name").val(),
scale: parseFloat( $("#blip-scale").val() ),
color: parseInt( $("#blip-color").val() ),
display: parseInt( $("#blip-display").val() ),
}
blipModal.modal("hide");
resolve(blipData);
})
blipModal.modal("show");
});
}
$("#blip-enabled").change(function() {
let isEnabled = $(this).prop("checked");
$("#blip-customization-form").find("input, select").not( $(this) )
.prop("disabled", !isEnabled)
.prop("required", isEnabled);
})
async function doorsDialog(alreadySelectedDoors = {}) {
return new Promise((resolve, reject) => {
let inputDoorsModal = $("#input-doors-dialog-modal")
inputDoorsModal.modal("show");
$("#input-door-search").val("");
$.post(`https://${resName}/getAllDoors`, JSON.stringify({}), function (doors) {
let inputDoorsList = $("#doors-list");
inputDoorsList.empty();
for(const[buildingId, data] of Object.entries(doors)) {
let buildingDiv = $(`
`);
for(let [doorsId, doorsData] of Object.entries(data.doors)) {
let doorDiv = $(`
`);
buildingDiv.find(".doors-list").append(doorDiv);
}
inputDoorsList.append(buildingDiv);
}
for(let [doorsId, _] of Object.entries(alreadySelectedDoors) ) {
$(`input[data-doors-id=${doorsId}]`).prop("checked", true);
}
// Unbinds the button and rebinds it to callback the selected doors
$("#input-doors-confirm-btn").unbind().click(function() {
let selectedDoors = {};
inputDoorsList.find("input:checked").each(function() {
let doorsId = parseInt( $(this).data("doorsId") )
selectedDoors[doorsId] = true;
});
inputDoorsModal.modal("hide");
resolve(selectedDoors);
})
});
})
}
$("#input-door-search").on("keyup", function() {
let text = $(this).val().toLowerCase();
$("#doors-list .form-check").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
});
})
function societiesDialog(oldSocieties) {
return new Promise((resolve, reject) => {
let inputSocietiesModal = $("#input-societies-dialog-modal")
inputSocietiesModal.modal("show");
$("#input-society-search").val("");
$.post(`https://${resName}/getAllJobs`, JSON.stringify({}), function (jobs) {
let societiesListDiv = $("#societies-list");
societiesListDiv.empty();
for(const[jobName, jobData] of Object.entries(jobs)) {
let jobDiv = $(`
`);
$(jobDiv).find(".society-checkbox").change(function() {
let isEnabled = $(this).prop("checked");
$(this).closest(".society").find(".percentage").prop("disabled", !isEnabled).prop("required", isEnabled);
})
societiesListDiv.append(jobDiv);
}
if(oldSocieties) {
for(let [jobName, percentage] of Object.entries(oldSocieties)) {
$("#societies-list")
.find(`[data-job-name="${jobName}"]`).prop("checked", true).change()
.closest(".society").find(".percentage").val(percentage);
}
}
// Unbinds the button and rebinds it to callback the selected jobs
$("#input-societies-confirm-btn").unbind().click(function() {
let selectedSocieties = {};
let isThereAnySociety = false;
let isAllValid = true;
societiesListDiv.find("input:checked").each(function() {
isThereAnySociety = true;
let percentageDiv = $(this).closest(".society").find(".percentage");
let jobName = $(this).data("jobName");
let percentage = parseInt( percentageDiv.val() );
if(percentage) {
selectedSocieties[jobName] = percentage;
} else {
isAllValid = false;
}
});
if(isAllValid) {
inputSocietiesModal.modal("hide");
resolve(isThereAnySociety ? selectedSocieties : false);
}
})
});
})
}
$("#input-society-search").on("keyup", function() {
let text = $(this).val().toLowerCase();
$("#societies-list .society").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
});
})
/* Limited objects dialog */
async function limitedObjectsDialog(oldLimitedObjects) {
return new Promise((resolve, reject) => {
let limitedObjectsModal = $("#limited-objects-dialog-modal")
limitedObjectsModal.modal("show");
$("#limited-objects-list").empty();
if(oldLimitedObjects) {
if(oldLimitedObjects.item) {
for(const objectName of Object.keys(oldLimitedObjects.item)) {
let objectData = {
name: objectName,
type: "item",
}
addLimitedObjectToList(objectData);
}
}
if(oldLimitedObjects.weapon) {
for(const objectName of Object.keys(oldLimitedObjects.weapon)) {
let objectData = {
name: objectName,
type: "weapon",
}
addLimitedObjectToList(objectData);
}
}
}
$("#limited-objects-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
let limitedObjects = {
"item": {},
"weapon": {},
};
$("#limited-objects-list .limited-object").each(function() {
let type = $(this).find(".item-type").val();
let name = $(this).find(".item-name").val();
limitedObjects[type][name] = true;
})
limitedObjectsModal.modal("hide");
resolve(limitedObjects);
})
})
}
async function addLimitedObjectToList(objectData) {
let objectDiv = $(`
`);
objectDiv.find(".delete-limited-object-btn").click(function() {
objectDiv.remove();
});
objectDiv.find(".choose-item-btn").click(async function() {
let objectType = objectDiv.find(".item-type").val();
let objectName = await objectDialog(objectType);
objectDiv.find(".item-name").val(objectName);
}).tooltip();
if(objectData) {
objectDiv.find(".item-type").val(objectData.type);
objectDiv.find(".item-name").val(objectData.name);
}
$("#limited-objects-list").append(objectDiv);
}
$("#limited-objects-list-add-object-btn").click(function() {
addLimitedObjectToList();
})
async function inputDialog(title, label) {
return new Promise((resolve, reject) => {
let inputDialogModal = $("#input-dialog-modal");
$("#input-dialog-modal-value").val("");
$("#input-dialog-modal-title").text(title);
$("#input-dialog-modal-label").text(label);
inputDialogModal.modal("show");
$("#input-dialog-modal-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
inputDialogModal.modal("hide");
resolve( $("#input-dialog-modal-value").val() );
});
})
}
async function permissionsDialog(permissions) {
return new Promise((resolve, reject) => {
let permissionsModal = $("#player-shop-permissions-dialog-modal");
permissionsModal.find(".permission").prop("checked", false);
if(permissions) {
for(const [permissionName, enabled] of Object.entries(permissions)) {
permissionsModal.find(`.permission[data-permission-name="${permissionName}"]`).prop("checked", enabled);
}
}
$("#player-shop-permissions-dialog-modal-form").unbind().submit(function(event) {
let permissions = {};
permissionsModal.find(".permission").each(function() {
let permissionName = $(this).data("permission-name");
permissions[permissionName] = $(this).prop("checked");
})
permissionsModal.modal("hide");
resolve(permissions);
});
permissionsModal.modal("show");
});
}
function toggleCursor(enabled) {
if (enabled) {
$.post(`https://${resName}/enableCursor`, JSON.stringify({}));
} else {
$.post(`https://${resName}/disableCursor`, JSON.stringify({}));
}
}
function loadDialog(dialogName) {
var script = document.createElement('script');
console.log(`../utils/dialogs/${dialogName}/${dialogName}.js`)
script.setAttribute('src',`../utils/dialogs/${dialogName}/${dialogName}.js`);
document.head.appendChild(script);
}
// Messages received by client
window.addEventListener('message', (event) => {
let data = event.data;
let action = data.action;
switch(action) {
case "loadDialog": {
var script = document.createElement('script');
script.setAttribute('src',`../utils/dialogs/${data.dialogName}/${data.dialogName}.js`);
document.head.appendChild(script);
break;
}
}
})
$.post(`https://${resName}/nuiReady`, JSON.stringify({}));