var LogsBox = { props: ["logtype", "logid", "logdesc", "logstaff", "logcount", "logdate", "isactive", "iscountable"], methods: { logsViewMoreOrLess: function(a, b, c, d) { app.logsViewMoreOrLess(a, b, c, d) }, unBanOrJail: function(a, b) { app.unBanOrJail(a, b) } }, template: `
{{ logtype+' #'+logid }}
{{ logtype === 'Ban' ? 'Unban' : 'Unjail' }}
logsIconn Description
View More
dotby {{ 'by '+logstaff }}
dotby {{ logdate.split(' ')[0] }}
dotby {{ logcount }}
` } var app = new Vue({ el : "#app", data: { darkMode: false, framework: "", userUsername: "Lvorex", userRank: { title: "Admin", color: "#F34240" }, userIcon: "", notifyMenu: false, newNotify: false, leftNaviSelection: "info", showingVehicleInfo: false, showingVehiclePlate: "", showingVehicleLeftInputs: [], showingVehicleRightInputs: [], selectedVehicle: {}, leftNaviItems: [ { icon: "BookIcon", id: "info" }, { icon: "HearthIcon", id: "hearth" }, { icon: "MoneyIcon", id: "money" }, { icon: "CarIcon", id: "car" }, { icon: "BagIcon", id: "inventory" }, { icon: "KlavuzIcon", id: "logs" }, ], searchValue: "", selectedPlayer: {}, vip: true, permaBanned: false, rightInputs: [], leftDownInputs: {}, hearthLeftInputs: [], hearthLogSearchValue: "", hearthLogs: [], hearthToShowLogs: [], moneyLeftInputs: [], moneyLogsSearchValue: "", moneyLogs: [], moneyToShowLogs: [], generalLogsSearch: "", generalLogs: [], generalLogsShow: [], playerVehicles: [], carAddingNewCar: false, toShowPlayers: [], playerActionsPopUp: undefined, playerInGameActions: [], playerOtherActions: [], draggedItem: null, inventoryCountInput: null, invPopup: false, inventoryDeletePopup: null, inventoryAddInputSelectMenu: false, inventoryItemsAddItemInput: "", inventoryItemsAddItemAmount: 0, inventoryItemsAddItemIcon: "", serverItemsData: [], serverItemsShow: [], inventoryItems: [], logsNavbarBoxBg: "img/LogsGeneralBg.png", logsNavbarItems: [ { id: 0, name: "General", button: "img/LogsGeneralButtonBg.png", notActiveButton: "rgba(255, 255, 255, 0.18)", background: "img/LogsGeneralBg.png", count: -1, active: true }, { id: 1, name: "Warns", button: "img/LogsWarnsButtonBg.png", notActiveButton: "rgba(255, 144, 111, 0.18)", background: "img/LogsWarnsBg.png", count: 0, active: false }, { id: 2, name: "Kicks", button: "img/LogsKicksButtonBg.png", notActiveButton: "rgba(255, 175, 101, 0.18)", background: "img/LogsKicksBg.png", count: 0, active: false }, { id: 3, name: "A.Jails", button: "img/LogsAJailsButtonBg.png", notActiveButton: "rgba(73, 255, 211, 0.18)", background: "img/LogsAJailsBg.png", count: 0, active: false }, { id: 4, name: "Bans", button: "img/LogsBansButtonBg.png", notActiveButton: "rgba(255, 73, 73, 0.18)", background: "img/LogsBansBg.png", count: 0, active: false }, ], warnsLogs: [], kicksLogs: [], adminjailsLogs: [], bansLogs: [] }, components : { "m-navbar": navbarComp, "left-navbar": leftNavbarComp, "draggable": window["vuedraggable"], "logsbox": LogsBox }, watch: { hearthLogSearchValue: function(newValue) { this.hearthToShowLogs = this.hearthLogs this.hearthToShowLogs = this.hearthToShowLogs.filter(w => w.author.toLowerCase().includes(newValue.toLowerCase()) || w.date.startsWith(newValue)) }, moneyLogsSearchValue: function(newValue) { this.moneyToShowLogs = this.moneyLogs this.moneyToShowLogs = this.moneyToShowLogs.filter(w => w.author.toLowerCase().includes(newValue.toLowerCase()) || w.date.startsWith(newValue)) }, inventoryItemsAddItemInput: function(newValue) { this.serverItemsShow = this.serverItemsData this.serverItemsShow = this.serverItemsShow.filter(w => w.name.toLowerCase().includes(newValue.toLowerCase())) } }, methods: { resetSelectMenu: function(e) { if (this.inventoryAddInputSelectMenu !== false && e.target.id !== "inv-popup-input") { this.inventoryAddInputSelectMenu = false } }, searchGeneralLogs: function(newValue) { this.generalLogsShow = this.generalLogs this.generalLogsShow = this.generalLogsShow.filter(w => w.author.toLowerCase().startsWith(newValue.toLowerCase()) || w.date.startsWith(newValue) || w.message.includes(newValue.toLowerCase())) }, logsViewMoreOrLess: function(inputId, logId, type, event) { if (this[type.toLowerCase()+"sLogs"][Number(logId) - 1].more) { event.target.innerHTML = "View More" document.getElementById(inputId).style.height = "" this[type.toLowerCase()+"sLogs"][Number(logId) - 1].more = false } else { event.target.innerHTML = "View Less" document.getElementById(inputId).style.height = "11.3889vh" this[type.toLowerCase()+"sLogs"][Number(logId) - 1].more = true } }, unBanOrJail: async function(logId, type) { const logIdentifier = this[type.toLowerCase()+"sLogs"][Number(logId) - 1].id if (type.toLowerCase() === 'ban') { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/unbanPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, license: this.selectedPlayer.rockstarLicense, logIdentifier: logIdentifier, temp: true }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) } else { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/unjailPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, logIdentifier: logIdentifier }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) } this[type.toLowerCase()+"sLogs"][Number(logId) - 1].active = false }, logsChangeCategory: async function(id) { this.logsNavbarItems.forEach(item => { item.active = false }) this.logsNavbarBoxBg = this.logsNavbarItems[id].background this.logsNavbarItems[id].active = true }, clearInventory: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/clearInventory.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) return this.inventoryItems.forEach(item => { item.name = "" item.icon = "" item.count = 0 }) this.inventoryClearPopup = null this.invPopup = false }, inventoryOnDragStart: function(slot) { this.draggedItem = this.inventoryItems.find(w => w.slot === slot) }, iventoryTrashDrag: function() { const index = this.inventoryItems.indexOf(this.draggedItem) if (index !== -1) { const draggedItem = this.inventoryItems[index] if (draggedItem.name === "") return this.inventoryDeletePopup = { name: draggedItem.name, amount: Number(this.inventoryCountInput) === 0 || this.inventoryCountInput === null ? draggedItem.count : this.inventoryCountInput, icon: draggedItem.icon } this.invPopup = "deleteItem" } }, inventoryPlusDrag: async function() { const index = this.inventoryItems.indexOf(this.draggedItem) if (index === -1) return const draggedItem = this.inventoryItems[index] let amount = Number(this.inventoryCountInput) if (!amount) amount = 1 let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/addItemToInventory.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, item: draggedItem.name, addingCount: amount, slot: draggedItem.slot }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) this.inventoryItems[index].count = amount + Number(draggedItem.count) }, inventoryAddItem: async function() { if ( !this.inventoryItemsAddItemInput || !this.inventoryItemsAddItemAmount ) return const emptySlot = this.inventoryItems.find(item => item.name === "") if (!emptySlot) return let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/addNewItemToInventory.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, item: this.inventoryItemsAddItemInput, amount: Number(this.inventoryItemsAddItemAmount) }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) emptySlot.name = this.inventoryItemsAddItemInput emptySlot.count = this.inventoryItemsAddItemAmount emptySlot.icon = this.inventoryItemsAddItemIcon this.invPopup = false }, inventoryDeleteItem: async function() { const index = this.inventoryItems.indexOf(this.draggedItem) if (index !== -1) { if (this.inventoryItems[index].name === "") return let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/removeItemFromInventory.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, slot: this.inventoryItems[index].slot, itemName: this.inventoryItems[index].name, amount: this.inventoryCountInput }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) if ( Number(this.inventoryCountInput) === 0 || this.inventoryItems[index].count - Number(this.inventoryCountInput) <= 0 || !this.inventoryCountInput ) { this.inventoryItems[index].name = "" this.inventoryItems[index].icon = "" this.inventoryItems[index].count = 0 } else { this.inventoryItems[index].count = this.inventoryItems[index].count - Number(this.inventoryCountInput) } } this.invPopup = false this.draggedItem = null; }, backToPlayers: function() { location.href = "/Panel/Players/" }, changePage: async function(changeto) { this.leftNaviSelection = changeto if (changeto === "car") { result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getPlayerVehicles.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) { console.log(result.message) return } this.playerVehicles = result.message } else if (changeto === "hearth") { let hearthLogsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getSpecificLog.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), type: "status", uid: this.selectedPlayer.uid }) }) hearthLogsResult = await hearthLogsResult.json() if (hearthLogsResult.code === 200) { this.hearthLogs = hearthLogsResult.message.reverse() this.hearthToShowLogs = this.hearthLogs } if (this.selectedPlayer.status === "Online") { let statusResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getPlayerMetadata.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), playerId: this.selectedPlayer.id }) }) statusResult = await statusResult.json() console.log(statusResult) if (statusResult.code === 404) { console.log(statusResult.message) return } this.hearthLeftInputs = [ { title: "Health", class: "healthInput", value: statusResult.health, color: "rgba(255, 72, 72, 0.20)", realValue: statusResult.health }, { title: "Armor", class: "armorInput", value: statusResult.armor, color: "rgba(72, 112, 255, 0.20)", realValue: statusResult.armor }, { title: "Hunger", class: "hungerInput", value: statusResult.hunger, color: "rgba(255, 160, 72, 0.20)", realValue: statusResult.hunger }, { title: "Thirst", class: "thirstInput", value: statusResult.thirst, color: "rgba(72, 255, 244, 0.20)", realValue: statusResult.thirst }, { title: "Stress", class: "stressInput", value: statusResult.stress, color: "rgba(255, 72, 248, 0.20)", realValue: statusResult.stress }, ] } } else if (changeto === "money") { let moneyLogsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getSpecificLog.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), type: "money", uid: this.selectedPlayer.uid }) }) moneyLogsResult = await moneyLogsResult.json() if (moneyLogsResult.code !== 200) { this.moneyLogs = [] this.moneyToShowLogs = [] } else { this.moneyLogs = moneyLogsResult.message.reverse() this.moneyToShowLogs = this.moneyLogs } this.moneyLeftInputs = [ { title: "Cash", class: "CashInput", value: parseInt(this.selectedPlayer.money.cash).toLocaleString()+"$", color: "rgba(180, 255, 144, 0.20)", realValue: parseInt(this.selectedPlayer.money.cash), editing: false }, { title: "Bank", class: "BankInput", value: parseInt(this.selectedPlayer.money.bank).toLocaleString()+"$", color: "rgba(255, 255, 255, 0.20)", realValue: parseInt(this.selectedPlayer.money.bank), editing: false }, { title: "Black Money", class: "BlackMoneyInput", value: parseInt(this.selectedPlayer.blackMoneyCount).toLocaleString()+"$", color: "rgba(255, 144 144, 0.20)", realValue: parseInt(this.selectedPlayer.blackMoneyCount), editing: false }, { title: "Crypto", class: "CryptoInput", value: this.framework.includes("qb") ? parseInt(this.selectedPlayer.money.crypto).toLocaleString() : 'Not found.', color: "rgba(255, 231, 144, 0.20)", realValue: parseInt(this.selectedPlayer.money.crypto), editing: false }, { title: `Society - ${this.selectedPlayer.job.split("-")[0]}`, class: "SocietyInput", value: parseInt(this.selectedPlayer.societyMoney).toLocaleString()+"$", color: "rgba(255, 144, 244, 0.20)", realValue: parseInt(this.selectedPlayer.societyMoney), editing: false }, ] } else if (changeto === "inventory") { let invItemsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getInventoryItems.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) invItemsResult = await invItemsResult.json() if (invItemsResult.code !== 200) return console.log(invItemsResult.message) this.inventoryItems = JSON.parse(invItemsResult.message) invItemsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getAllItems.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")) }) }) invItemsResult = await invItemsResult.json() if (invItemsResult.code !== 200) return console.log(invItemsResult.message) this.serverItemsData = JSON.parse(invItemsResult.message) this.serverItemsShow = this.serverItemsData } else if (changeto === "logs") { let moneyLogsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getSpecificLog.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), type: "money", uid: this.selectedPlayer.uid }) }) moneyLogsResult = await moneyLogsResult.json() if (moneyLogsResult.code !== 200) { this.moneyLogs = [] this.moneyToShowLogs = [] } else { this.moneyLogs = moneyLogsResult.message.reverse() this.moneyToShowLogs = this.moneyLogs } let hearthLogsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getSpecificLog.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), type: "status", uid: this.selectedPlayer.uid }) }) hearthLogsResult = await hearthLogsResult.json() if (hearthLogsResult.length > 0) { this.hearthLogs = hearthLogsResult.message.reverse() this.hearthToShowLogs = this.hearthLogs } if ( this.moneyLogs.length === 0 && this.hearthLogs.length !== 0 ) { this.generalLogs = [...this.hearthLogs] } else if ( this.moneyLogs.length !== 0 && this.hearthLogs.length === 0 ) { this.generalLogs = [...this.moneyLogs] } else { this.generalLogs = [...this.moneyLogs, ...this.hearthLogs] } this.generalLogs.sort((a,b) => moment(b.date, "DD.MM.YYYY HH:ss") - moment(a.date, "DD.MM.YYYY HH:ss")) this.generalLogsShow = this.generalLogs let actionLogsResult = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getPlayerActionLogs.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) actionLogsResult = await actionLogsResult.json() if (actionLogsResult.code !== 200) return console.log(actionLogsResult.message) this.warnsLogs = actionLogsResult.message.warn this.kicksLogs = actionLogsResult.message.kick this.adminjailsLogs = actionLogsResult.message.adminjail this.bansLogs = actionLogsResult.message.ban this.logsNavbarItems[1].count = this.warnsLogs.length this.logsNavbarItems[2].count = this.kicksLogs.length this.logsNavbarItems[3].count = this.adminjailsLogs.length this.logsNavbarItems[4].count = this.bansLogs.length } }, copyToClipboard: function(id) { const inputValue = document.getElementById(id) inputValue.parentElement.style.pointerEvents = "none" inputValue.select() inputValue.setSelectionRange(0, 99999) const oldValue = inputValue.value navigator.clipboard.writeText(inputValue.value) inputValue.value = "Copied!" setTimeout(() => { inputValue.parentElement.style.pointerEvents = "" inputValue.value = oldValue }, 2000) }, changeEditStatus: async function(id, right) { if (!right) { const index = this.leftDownInputs.findIndex(w => w.class === id) if (this.leftDownInputs[index].editing === true && !right) { const newValue = document.getElementById("input"+id) if (id === "job") { if (newValue.value.split("-").length < 2) { this.newNotify = { desc: "Please use right syntax.", author: "System" } return } let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeJob.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), job: newValue.value.split("-")[0], grade: Number(newValue.value.split("-")[1]), playerId: Number(this.selectedPlayer.id), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code === 404) { this.leftDownInputs[index].value = result.message setTimeout(() => { this.leftDownInputs[index].value = this.selectedPlayer.job }, 1000) } else { this.leftDownInputs[index].value = result.message.label + " - " + result.message.grade.name this.selectedPlayer.job = result.message.label + " - " + result.message.grade.name this.selectedPlayer.jobNameAndGrade = newValue.value } } else if (id === "faction") { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeGang.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), gang: newValue.value.split("-")[0], grade: Number(newValue.value.split("-")[1]), playerId: Number(this.selectedPlayer.id), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code === 404) { this.leftDownInputs[index].value = result.message setTimeout(() => { this.leftDownInputs[index].value = this.selectedPlayer.faction }, 1000) } else { this.leftDownInputs[index].value = result.message.label + " - " + result.message.grade.name this.selectedPlayer.faction = result.message.label + " - " + result.message.grade.name this.selectedPlayer.factionNameAndGrade = newValue.value } } else { this.leftDownInputs[index].value = newValue.value } } else { if (id === "job") { this.leftDownInputs[index].value = this.selectedPlayer.jobNameAndGrade } else if (id === "faction") { this.leftDownInputs[index].value = this.selectedPlayer.factionNameAndGrade } } this.leftDownInputs[index].editing = !this.leftDownInputs[index].editing } else { const index = this.rightInputs.findIndex(w => w.class === id) if (this.rightInputs[index].editing === true) { const newValue = document.getElementById(id) let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeCharacterCredentials.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), type: id, newValue: newValue.value, uid: this.selectedPlayer.uid, playerId: Number(this.selectedPlayer.id) }) }) result = await result.json() if (result.code === 404) { const oldValue = this.rightInputs[index].value this.rightInputs[index].value = result.message setTimeout(() => { this.rightInputs[index].value = oldValue }, 1000) } else { this.rightInputs[index].value = newValue.value } } this.rightInputs[index].editing = !this.rightInputs[index].editing } }, takeOrGiveVIP: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeUserVIPStatus.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uid: this.selectedPlayer.uid, key: sha1(sessionStorage.getItem("uid-key")) }) }) result = await result.json() if (result.code === 404) { console.error(result.message) return } this.vip = !this.vip }, hearthSetValue: async function(id, type) { const index = this.hearthLeftInputs.findIndex(w => w.class === id) if (index === -1) return let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/setPlayerMetadata.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), playerId: this.selectedPlayer.id, uid: this.selectedPlayer.uid, type: id, action: type }) }) result = await result.json() if (result.code !== 200) { this.hearthLeftInputs[index].value = result.message setTimeout(() => { this.hearthLeftInputs[index].value = this.hearthLeftInputs[index].realValue }, 1000) } const metadataName = id.split("Input")[0] this.hearthLogs.push({ date: moment(Date.now()).format("DD.MM.YYYY HH:mm"), author: this.userUsername, message: `${type}ed the ${metadataName}` }) this.hearthToShowLogs = this.hearthLogs if (type === 'fill') { this.hearthLeftInputs[index].value = 100 } else if (type === "drain") { this.hearthLeftInputs[index].value = 0 } else { this.hearthLeftInputs[index].value = "An error appeared." setTimeout(() => { this.hearthLeftInputs[index].value = this.hearthLeftInputs[index].realValue }, 1000) } }, moneyEditValues: async function(id, event) { const findIndex = this.moneyLeftInputs.findIndex(w => w.class === id) if (findIndex === -1) return console.log("Not found.") if (this.moneyLeftInputs[findIndex].editing === false) { this.moneyLeftInputs[findIndex].value = this.moneyLeftInputs[findIndex].realValue } else { const newValue = document.getElementById("Money"+id) if (String(newValue.value) === String(this.moneyLeftInputs[findIndex].value)) { this.moneyLeftInputs[findIndex].value = parseInt(newValue.value).toLocaleString() + `${id.includes("Crypto") ? "" : "$"}` this.moneyLeftInputs[findIndex].realValue = parseInt(newValue.value) this.moneyLeftInputs[findIndex].editing = !this.moneyLeftInputs[findIndex].editing return } const CashType = id.split("Input")[0] let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changePlayerMoneys.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), newValue: newValue.value, playerId: this.selectedPlayer.id, type: CashType, job: this.selectedPlayer.jobNameAndGrade.split(" - ")[0], uid: this.selectedPlayer.uid, oldValue: this.moneyLeftInputs[findIndex].realValue }) }) result = await result.json() if (result.code !== 200) { const editButton = event.target console.log(editButton.style) editButton.style.pointerEvents = "none" this.moneyLeftInputs[findIndex].value = result.message this.moneyLeftInputs[findIndex].editing = !this.moneyLeftInputs[findIndex].editing setTimeout(() => { this.moneyLeftInputs[findIndex].value = this.moneyLeftInputs[findIndex].realValue.toLocaleString()+"$" editButton.style.pointerEvents = "" }, 1000) return } if (CashType.toLowerCase() === "bank" || CashType.toLowerCase() === "cash" || CashType.toLowerCase() === "crypto") { this.selectedPlayer.money[CashType.toLowerCase()] = Number(newValue.value) } else if (CashType.toLowerCase() === "blackmoney") { this.selectedPlayer.blackMoneyCount = Number(newValue.value) } else if (CashType.toLowerCase() === "society") { this.selectedPlayer.societyMoney = Number(newValue.value) } let logMessage = "" if (Number(newValue.value) > Number(this.moneyLeftInputs[findIndex].realValue)) { logMessage = `added ${Number(newValue.value) - Number(this.moneyLeftInputs[findIndex].realValue)}${id.split("Input")[0].toLowerCase() !== "crypto" ? "$" : ""} as ${id.split("Input")[0].toLowerCase()}` } else if (Number(newValue.value) < Number(this.moneyLeftInputs[findIndex].realValue)) { logMessage = `removed ${Number(this.moneyLeftInputs[findIndex].realValue) - Number(newValue.value)}${id.split("Input")[0].toLowerCase() !== "crypto" ? "$" : ""} as ${id.split("Input")[0].toLowerCase()}` } this.moneyLogs.unshift({ date: moment(Date.now()).format("DD.MM.YYYY HH:mm"), author: this.userUsername, message: logMessage }) this.moneyLeftInputs[findIndex].value = parseInt(newValue.value).toLocaleString() + `${id.includes("Crypto") ? "" : "$"}` this.moneyLeftInputs[findIndex].realValue = parseInt(newValue.value) } this.moneyLeftInputs[findIndex].editing = !this.moneyLeftInputs[findIndex].editing }, addVehicleToPlayer: async function() { const [ hashInput, plateInput, garageInput ] = [ document.getElementById("newCarHashInput"), document.getElementById("newCarPlateInput"), document.getElementById("newCarGarageInput") ] if (hashInput.value === "") { hashInput.value = "Please fill blanks." hashInput.style.pointerEvents = "none" setTimeout(() => { hashInput.value = "" hashInput.style.pointerEvents = "" }, 1500) } let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/giveVehicleToPlayer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), license: this.selectedPlayer.rockstarLicense, uid: this.selectedPlayer.uid, modelName: hashInput.value, plate: plateInput.value, garage: garageInput.value }) }) result = await result.json() if (result.code !== 200) { const oldValue = hashInput.value hashInput.value = result.message hashInput.style.pointerEvents = "none" setTimeout(() => { hashInput.value = oldValue hashInput.style.pointerEvents = "" }, 1500) } else { this.playerVehicles.splice(0, 0, result.message) this.carAddingNewCar = false this.changePage("car") } }, changeVehicleHash: async function() { const inputCredits = this.showingVehicleLeftInputs.find(w => w.class === "hash") if (inputCredits.editing === false) { if (this.selectedVehicle.status === 0) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = inputCredits.value inputCredits.value = "Vehicle need to be in garage." setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehicleHash.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), modelName: newValue, plate: this.selectedVehicle.plate }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedVehicle.name inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } [ this.selectedVehicle.brand, this.selectedVehicle.label, this.selectedVehicle.price, this.selectedVehicle.name, this.selectedVehicle.bought ] = [ result.message.brand, result.message.label, result.message.price, result.message.name, result.message.bought ] this.showingVehicleLeftInputs[2].value = result.message.brand + " " + result.message.label this.showingVehicleLeftInputs[6].value = "$ "+parseInt(result.message.price).toLocaleString() this.showingVehicleLeftInputs[4].value = result.message.bought } }, changeVehiclePlate: async function () { const inputCredits = this.showingVehicleLeftInputs.find(w => w.class === "plate") if (inputCredits.editing === false) { if (this.selectedVehicle.status === 0) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = inputCredits.value inputCredits.value = "Vehicle need to be in garage." setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehiclePlate.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), newPlate: newValue, plate: this.selectedVehicle.plate }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedVehicle.plate inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } this.selectedVehicle.plate = newValue } }, changeVehicleOwner: async function() { const inputCredits = this.showingVehicleRightInputs.find(w => w.class === "changeowner") if (inputCredits.editing === false) { if (this.selectedVehicle.status === 0) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = inputCredits.value inputCredits.value = "Vehicle need to be in garage." setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehicleOwner.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), newUid: newValue, plate: this.selectedVehicle.plate }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedPlayer.uid inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } const selectedVehicleIndex = this.playerVehicles.findIndex(w => w.plate === this.selectedVehicle.plate) this.playerVehicles.splice(selectedVehicleIndex, 1) } }, repairVehicle: async function() { console.log("Reapir") let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/repairVehicle.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) this.showingVehicleRightInputs[4].value = "100%" this.showingVehicleRightInputs[5].value = "100%" }, despawnVehicle: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/despawnVehicle.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate }) }) result = await result.json() }, changeFuelLevel: async function() { const inputCredits = this.showingVehicleRightInputs.find(w => w.class === "fuel") if (inputCredits.editing === false) { const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehicleFuelLevel.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate, newLevel: newValue, playerId: this.selectedPlayer.id }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedPlayer.uid inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } inputCredits.value = newValue + "%" } else { inputCredits.value = inputCredits.value.split("%")[0] } }, changeVehicleEngineHealth: async function() { const inputCredits = this.showingVehicleRightInputs.find(w => w.class === "engine") if (inputCredits.editing === false) { const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehicleHealth.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate, newLevel: Number(newValue) * 10, type: "Engine" }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedPlayer.uid inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } inputCredits.value = newValue + "%" } else { inputCredits.value = inputCredits.value.split("%")[0] } }, changeVehicleBodyHealth: async function() { const inputCredits = this.showingVehicleRightInputs.find(w => w.class === "body") if (inputCredits.editing === false) { const newValue = inputCredits.value let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/changeVehicleHealth.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate, newLevel: Number(newValue) * 10, type: "Body" }) }) result = await result.json() if (result.code !== 200) { document.getElementById("cinfo-input-content").style.pointerEvents = "none" const oldValue = this.selectedPlayer.uid inputCredits.value = result.message setTimeout(() => { inputCredits.value = oldValue document.getElementById("cinfo-input-content").style.pointerEvents = "" }, 1000) return } inputCredits.value = newValue + "%" } else { inputCredits.value = inputCredits.value.split("%")[0] } }, deleteVehicle: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/deleteVehicle.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), plate: this.selectedVehicle.plate }) }) result = await result.json() if (result.code === 200) { const vehicleIndex = this.playerVehicles.findIndex(w => w.plate === this.selectedVehicle.plate) this.playerVehicles.splice(vehicleIndex, 1) this.selectedVehicle = undefined this.showingVehicleInfo = false return } }, selectVehicle: async function(plate) { this.showingVehiclePlate = plate const selectedVehicle = this.playerVehicles.find(w => w.plate === plate) if (!selectedVehicle) return this.selectedVehicle = selectedVehicle this.showingVehicleLeftInputs = [ { title: "Vehicle Hash", class: 'hash', value: selectedVehicle.name, background: "CInfoHashInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeVehicleHash }, { title: "Vehicle Plate", class: 'plate', value: selectedVehicle.plate, background: "CInfoPlateInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeVehiclePlate }, { title: "Vehicle Model", class: 'model', value: selectedVehicle.brand + " " + selectedVehicle.label, background: "CInfoModelInputBg.png", editingValue: "", editing: false, editable: false }, { title: "Vehicle Location", class: 'location', value: selectedVehicle.storedIn, background: "CInfoLocationInputBg.png", editingValue: "", editing: false, editable: false }, { title: "Granted From", class: 'granted', value: selectedVehicle.bought, background: "CInfoGrantedInputBg.png", editingValue: "", editing: false, editable: false }, { title: "KM Spent", class: 'km', value: parseInt((Number(selectedVehicle.km) / 1000)).toLocaleString() + " km", background: "CInfoKMInputBg.png", editingValue: "", editing: false, editable: false }, { title: "Price", class: 'price', value: "$ "+Number(selectedVehicle.price).toLocaleString(), background: "CInfoPriceInputBg.png", editingValue: "", editing: false, editable: false }, ] this.showingVehicleRightInputs = [ { title: "Change Owner", class: "changeowner", value: this.selectedPlayer.uid, background: "CInfoChangeOwnerInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeVehicleOwner }, { title: "Repair Vehicle", class: "repair", value: "Repair Vehicle", background: "CInfoRepairVehicleInputBg.png", editingValue: "", editing: false, editable: false, onclicked: this.repairVehicle /* function without paranteses */ }, { title: "Despawn Vehicle", class: "despawn", value: "Despawn Vehicle", background: "CInfoDespawnInputBg.png", editingValue: "", editing: false, editable: false, onclicked: this.despawnVehicle /* function */ }, { title: "Vehicle Fuel", class: "fuel", value: `${selectedVehicle.fuelLevel}%`, background: "CInfoFuelInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeFuelLevel }, { title: "Vehicle Engine Health", class: "engine", value: `${selectedVehicle.engineHealth}%`, background: "CInfoEngineInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeVehicleEngineHealth }, { title: "Vehicle Body Health", class: "body", value: `${selectedVehicle.bodyHealth}%`, background: "CInfoBodyHealthInputBg.png", editingValue: "", editing: false, editable: true, onclicked: this.changeVehicleBodyHealth }, { title: "Delete Vehicle", class: "deleteveh", value: "Delete Vehicle", background: "CInfoDeleteVehicleInputBg.png", editingValue: "", editing: false, editable: false, onclicked: this.deleteVehicle } ] this.showingVehicleInfo = true }, cinfoEditValue: async function(id, event, position) { if (position === "right") { this.showingVehicleRightInputs.find(w => w.class === id).editing = !this.showingVehicleRightInputs.find(w => w.class === id).editing } else { this.showingVehicleLeftInputs.find(w => w.class === id).editing = !this.showingVehicleLeftInputs.find(w => w.class === id).editing } }, reviveOrHealPlayer: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/reviveOrHealPlayer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) { this.newNotify = { desc: result.message, author: "System" } return } }, killPlayer: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/killPlayer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) { this.newNotify = { desc: result.message, author: "System" } return } }, openPedMenu: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/openPedMenu.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) { this.newNotify = { desc: result.message, author: "System" } return } }, freezePlayer: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/freezePlayer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid }) }) result = await result.json() if (result.code !== 200) { this.newNotify = { desc: result.message, author: "System" } return } }, PMPopupFunction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/sendPMToPlayer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, message: this.playerActionsPopUp.inputValue }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.playerActionsPopUp = undefined }, openPMPopup: function() { this.playerActionsPopUp = { title: "Send PM", inputPlaceHolder: "Your message to player...", inputValue: "", isInputSingle: true, background: "PActionsPopupSendPMBg", buttonName: "Send", buttonColor: "#9210FA", buttonFunction: this.PMPopupFunction } }, WarnPopupFunction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/warnPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, message: this.playerActionsPopUp.inputValue, staff: this.userRank.title+" - "+this.userUsername }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.playerActionsPopUp = undefined }, openWarnPopup: function() { this.playerActionsPopUp = { title: "Warn Player", inputPlaceHolder: "Description...", inputValue: "", isInputSingle: true, background: "PActionsPopupWarnBg", buttonName: "Warn", buttonColor: "#FF906F", buttonFunction: this.WarnPopupFunction, } }, KickPopupFunction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/kickPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, message: this.playerActionsPopUp.inputValue, staff: this.userRank.title+" - "+this.userUsername }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.playerActionsPopUp = undefined }, openKickPopup: function() { this.playerActionsPopUp = { title: "Kick Player", inputPlaceHolder: "Description...", inputValue: "", isInputSingle: true, background: "PActionsPopupKickBg", buttonName: "Kick", buttonColor: "#FFAF65", buttonFunction: this.KickPopupFunction, } }, AdminJailPopupFunction: async function() { let selectedTimeButton = this.playerActionsPopUp.timeSelectors.find(s => s.active === true) if (!selectedTimeButton) { this.playerActionsPopUp.timeInputs.forEach(i => { let carpan = 0 if (i.value === "") return if (i.title === "Day") carpan = 60*24 if (i.title === "Hour") carpan = 60 if (i.title === "Min") carpan = 1 if (!selectedTimeButton) { selectedTimeButton = parseInt(i.value) * carpan } else { selectedTimeButton = parseInt(i.value) * carpan + selectedTimeButton } }) } else { selectedTimeButton = selectedTimeButton.value / 1000 / 60 } let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/jailPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, jailTime: selectedTimeButton, reason: this.playerActionsPopUp.inputValue, staff: this.userRank.title+" - "+this.userUsername }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.playerActionsPopUp = undefined }, openAdminJailPopup: function() { this.playerActionsPopUp = { title: "Admin Jail Player", inputPlaceHolder: "Description...", inputValue: "", isInputSingle: false, background: "PActionsPopupAdminJailBg", buttonName: "Admin Jail", buttonColor: "#2E8C75", buttonFunction: this.AdminJailPopupFunction, timeSelectorActiveColor: "rgba(46, 140, 117, 0.40)", timeSelectors: [ { title: "10mn", value: 10*1000*60, hovering: false, active: false }, { title: "30mn", value: 30*1000*60, hovering: false, active: false }, { title: "40mn", value: 40*1000*60, hovering: false, active: false }, { title: "1hr", value: 1*1000*60*60, hovering: false, active: false }, { title: "12hr", value: 12*1000*60*60, hovering: false, active: false }, { title: "24hr", value: 24*1000*60*60, hovering: false, active: false }, ], timeInputs: [ { title: "Day", clicked: false, value: "" }, { title: "Hour", clicked: false, value: "" }, { title: "Min", clicked: false, value: "" } ] } }, BanPopupFunction: async function() { let selectedTimeButton = this.playerActionsPopUp.timeSelectors.find(s => s.active === true) if (!selectedTimeButton) { this.playerActionsPopUp.timeInputs.forEach(i => { let carpan = 0 if (i.value === "") return if (i.title === "Day") carpan = 1000*60*60*24 if (i.title === "Hour") carpan = 1000*60*60 if (i.title === "Min") carpan = 1000*60 if (!selectedTimeButton) { selectedTimeButton = parseInt(i.value) * carpan } else { selectedTimeButton = parseInt(i.value) * carpan + selectedTimeButton } }) } else { selectedTimeButton = selectedTimeButton.value } let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/banPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, message: this.playerActionsPopUp.inputValue, banTime: selectedTimeButton, type: "temp", license: this.selectedPlayer.rockstarLicense === 'Not Found.' ? 'undefined' : this.selectedPlayer.rockstarLicense, discord: this.selectedPlayer.discordId === 'Not Found.' ? 'undefined' : this.selectedPlayer.discordId, steam: this.selectedPlayer.steamId === 'Not Found.' ? 'undefined' : this.selectedPlayer.steamId, name: this.selectedPlayer.name, bannedBy: this.userRank.title+" - "+this.userUsername }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.playerActionsPopUp = undefined }, openBanPopup: function() { this.playerActionsPopUp = { title: "Ban Player", inputPlaceHolder: "Description...", inputValue: "", isInputSingle: false, background: "PActionsPopupBanBg", buttonName: "Ban", buttonColor: "#FF4949", buttonFunction: this.BanPopupFunction, timeSelectorActiveColor: "rgba(255, 73, 73, 0.40)", timeSelectors: [ { title: "10mn", value: 10*1000*60, hovering: false, active: false }, { title: "30mn", value: 30*1000*60, hovering: false, active: false }, { title: "40mn", value: 40*1000*60, hovering: false, active: false }, { title: "1hr", value: 1*1000*60*60, hovering: false, active: false }, { title: "12hr", value: 12*1000*60*60, hovering: false, active: false }, { title: "24hr", value: 24*1000*60*60, hovering: false, active: false }, ], timeInputs: [ { title: "Day", clicked: false, value: "" }, { title: "Hour", clicked: false, value: "" }, { title: "Min", clicked: false, value: "" } ] } }, PermaBanPopupFunction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/banPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, message: this.playerActionsPopUp.inputValue, banTime: 0, type: "perma", license: this.selectedPlayer.rockstarLicense === 'Not Found.' ? 'undefined' : this.selectedPlayer.rockstarLicense, discord: this.selectedPlayer.discordId === 'Not Found.' ? 'undefined' : this.selectedPlayer.discordId, steam: this.selectedPlayer.steamId === 'Not Found.' ? 'undefined' : this.selectedPlayer.steamId, name: this.selectedPlayer.name, bannedBy: this.userRank.title+" - "+this.userUsername }) }) result = await result.json() if (result.code !== 200) { this.playerActionsPopUp.inputValue = result.message setTimeout(() => { this.playerActionsPopUp.inputValue = "" }, 1000) return } this.permaBanned = { bannedAt: moment(Date.now()).format("DD/MM/YYYY"), bannedBy: this.userRank.title+" - "+this.userUsername } this.playerActionsPopUp = undefined }, openPermaBanPopup: function() { this.playerActionsPopUp = { title: "Perma Ban Player", inputPlaceHolder: "Description...", inputValue: "", isInputSingle: true, background: "PActionsPopupPermaBanBg", buttonName: "Perma Ban", buttonColor: "#FD0B09", buttonFunction: this.PermaBanPopupFunction, } }, unPermaBanPlayerAction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/unbanPlayerAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), license: this.selectedPlayer.rockstarLicense }) }) result = await result.json() if (result.code !== 200) return console.log(result.message) this.permaBanned = false }, DeleteCharPopupFunction: async function() { let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/deleteCharAction.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: this.selectedPlayer.uid, license: this.selectedPlayer.rockstarLicense === 'Not Found.' ? 'undefined' : this.selectedPlayer.rockstarLicense, discord: this.selectedPlayer.discordId === 'Not Found.' ? 'undefined' : this.selectedPlayer.discordId, steam: this.selectedPlayer.steamId === 'Not Found.' ? 'undefined' : this.selectedPlayer.steamId, vip: this.vip }) }) result = await result.json() if (result.code !== 200) { this.newNotify = { desc: result.message, author: "System" } return } else { location.href = `${location.protocol}//${location.hostname}:${location.port}/Panel/Players` } } }, mounted: async function() { if (!sessionStorage.getItem("uid-key")) { location.href = "/" return } const fragment = new URLSearchParams(window.location.hash.slice(1)) const playerId = fragment.get("uid") if (!playerId) return let result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/controlKeyWithServer.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")) }) }) result = await result.json() if (result.code === 404) { location.href = "/" return } const userDetails = JSON.parse(result.message) if (userDetails.permissions["Players"][1] === false) { location.href = "/Panel/Players" return } const PlayersPermissions = userDetails.permissions["Players"] if (PlayersPermissions[8] === false) { const uid = this.leftNaviItems.findIndex(i => i.id === "hearth") if (uid !== -1) { this.leftNaviItems.splice(uid, 1) } } if (PlayersPermissions[10] === false) { const uid = this.leftNaviItems.findIndex(i => i.id === "money") if (uid !== -1) { this.leftNaviItems.splice(uid, 1) } } if (PlayersPermissions[12] === false) { const uid = this.leftNaviItems.findIndex(i => i.id === "car") if (uid !== -1) { this.leftNaviItems.splice(uid, 1) } } if (PlayersPermissions[16] === false) { const uid = this.leftNaviItems.findIndex(i => i.id === "inventory") if (uid !== -1) { this.leftNaviItems.splice(uid, 1) } } if (PlayersPermissions[19] === false) { const uid = this.leftNaviItems.findIndex(i => i.id === "logs") if (uid !== -1) { this.leftNaviItems.splice(uid, 1) } } this.darkMode = userDetails.darkMode === 1 ? true : false this.userUsername = userDetails.username this.userRank.title = userDetails.rank this.userRank.color = "#F34240" this.userIcon = userDetails.avatar this.accountType = userDetails.accountType this.userPermissions = userDetails.permissions result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getSpecificCharacter.lvorex`, { method: "POST", headers: { 'Content-Type': "application/json" }, body: JSON.stringify({ uid: playerId, key: sha1(sessionStorage.getItem("uid-key")) }) }) result = await result.json() if (result.code === 404) { location.href = "/Panel/Players" return } if (JSON.parse(result.message).identifier === "citizenid") { this.framework = "qb" } else { this.framework = "esx" } const GeneralInformationGranted = userDetails.permissions["Players"][4] const player = JSON.parse(result.message).player let UserUID = player[JSON.parse(result.message).identifier] let UserRockstarLicense = player.licenseId === "undefined" || !player.licenseId ? "Not Found." : player.licenseId if (GeneralInformationGranted) { let playerCharinfo = undefined let playerJob = undefined let playerGang = undefined let playerMoney = undefined if (this.framework.includes("qb")) { playerCharinfo = player.playerStatus === "Online" ? player.charinfo : JSON.parse(player.charinfo) playerJob = player.playerStatus === "Online" ? player.job : JSON.parse(player.job) playerGang = player.playerStatus === "Online" ? player.gang : JSON.parse(player.gang) playerMoney = player.playerStatus === "Online" ? player.money : JSON.parse(player.money) } let esxMoney if (this.framework.includes("esx")) { if (player.playerStatus === "Online") { player.accounts.cash = player.accounts.find(a => a.name === "money").money player.accounts.bank = player.accounts.find(a => a.name === "bank").money esxMoney = player.accounts } else { const oldAccs = JSON.parse(player.accounts) player.accounts = { cash: oldAccs.money, bank: oldAccs.bank } esxMoney = player.accounts } } let newUser = {} // { id: 1, inGameName: "Lvorex Lvorex", name: "Lvorex", job: "police", grade: "LSPD - Officer I", date: "14.06.2023", time: "260h 38mn", male: "Female", status: "Online", icon: "https://cdn.discordapp.com/icons/790686655430393868/a_3199ef6663eb0a46c022f8dc99584238?size=128", admin: 1 }, newUser.id = player.playerId newUser.steamId = player.steamId === "undefined" || !player.steamId ? "Not Found." : player.steamId newUser.discordId = player.discordId === "undefined" || !player.discordId ? "Not Found." : player.discordId newUser.rockstarLicense = player.licenseId === "undefined" || !player.licenseId ? "Not Found." : player.licenseId newUser.inGameName = JSON.parse(result.message).identifier === "citizenid" ? `${playerCharinfo.firstname} ${playerCharinfo.lastname}` : `${player.firstname} ${player.lastname}` newUser.name = JSON.parse(result.message).identifier === "citizenid" ? player.name : `${player.firstname} ${player.lastname}` newUser.job = JSON.parse(result.message).identifier === "citizenid" ? playerJob.label+" - "+playerJob.grade.name : player.job.label+" - "+player.job.grade_label newUser.jobNameAndGrade = JSON.parse(result.message).identifier === "citizenid" ? playerJob.name+" - "+playerJob.grade.level : player.job.name+" - "+player.job.grade newUser.grade = JSON.parse(result.message).identifier === "citizenid" ? playerJob.label + " - " + playerJob.grade.name : player.job.name + " - " + player.job.grade newUser.date = JSON.parse(result.message).identifier === "citizenid" ? moment(playerCharinfo.birthdate).format("DD.MM.YYYY") : moment(player.dateofbirth).format("DD.MM.YYYY") newUser.time = player.onlineTime ?? "Not detected." newUser.male = JSON.parse(result.message).identifier === "citizenid" ? playerCharinfo.gender === 0 ? "Male" : "Female" : player.sex === "m" ? "Male" : "Female" newUser.status = player.playerStatus newUser.admin = player.admin !== 0 ? 1 : 0 newUser.icon = player.playerAvatar ?? "img/DefaultIcon.png" newUser.faction = JSON.parse(result.message).identifier === "citizenid" ? playerGang.label + " - " + playerGang.grade.name : "Faction Disabled" newUser.factionNameAndGrade = JSON.parse(result.message).identifier === "citizenid" ? playerGang.name + " - " + playerGang.grade.level : "Faction Disabled" newUser.nationality = JSON.parse(result.message).identifier === "citizenid" ? playerCharinfo.nationality : "Not Selected" newUser.created_at = JSON.parse(result.message).identifier === "citizenid" ? moment(player.last_updated).format("DD.MM.YYYY") : moment(player.created_at).format("DD.MM.YYYY") newUser.phone = JSON.parse(result.message).identifier === "citizenid" ? playerCharinfo.phone : player.phone_number ?? "Not Found." newUser.uid = player[JSON.parse(result.message).identifier] newUser.money = JSON.parse(result.message).identifier === "citizenid" ? playerMoney : esxMoney newUser.blackMoneyCount = player.blackMoneyCount console.log(player.societyMoney) newUser.societyMoney = player.societyMoney this.selectedPlayer = newUser } else { this.selectedPlayer = { id: player.playerId, rockstarLicense: player.licenseId === "undefined" || !player.licenseId ? "Not Found." : player.licenseId, inGameName: player.fullName, admin: player.admin !== 0 ? 1 : 0, icon: player.playerAvatar ?? "img/DefaultIcon.png", uid: player[JSON.parse(result.message).identifier], status: player.playerStatus, authorized: false } } /* Player Actions Start */ this.playerInGameActions = [ { title: "Revive", background: "PActionsReviveBg", function: this.reviveOrHealPlayer }, { title: "Heal", background: "PActionsHealBg", function: this.reviveOrHealPlayer }, { title: "Kill", background: "PActionsKillBg", function: this.killPlayer }, { title: "Freeze", background: "PActionsFreezeBg", function: this.freezePlayer }, { title: "PM", background: "PActionsPMBg", function: this.openPMPopup }, { title: "PED Menu", background: "PActionsPedMenuBg", function: this.openPedMenu }, ] this.playerOtherActions = [ { title: "Warn", background: "PActionsWarnBg", function: this.openWarnPopup }, { title: "Kick", background: "PActionsKickBg", function: this.openKickPopup }, { title: "Admin Jail", background: "PActionsAdminJailBg", function: this.openAdminJailPopup }, { title: "Ban", background: "PActionsBanBg", function: this.openBanPopup }, { title: "Perma Ban", background: "PActionsPermaBanBg", function: this.openPermaBanPopup }, { title: "Delete Char", background: "PActionsDeleteCharBg", function: this.DeleteCharPopupFunction }, ] /* Player Actions End */ if (GeneralInformationGranted) { this.rightInputs = [ { title: "Character ID", value: this.selectedPlayer.id, class: "characterId", editing: false, editable: false }, { title: "Character Name", value: this.selectedPlayer.inGameName, class: "characterName", editing: false, editable: true }, { title: "Gender", value: this.selectedPlayer.male, class: "genderInput", editing: false, editable: true }, { title: "Birthday", value: this.selectedPlayer.date, class: "birthdayInput", editing: false, editable: true }, { title: "Nationality", value: this.selectedPlayer.nationality, class: "nationalityInput", editing: false, editable: true }, { title: "Phone Number", value: this.selectedPlayer.phone, class: "phoneInput", editing: false, editable: true }, ] this.leftDownInputs = [ { title: "Job", editing: false, value: this.selectedPlayer.job, class: "job" }, { title: "Faction", editing: false, value: this.selectedPlayer.faction, class: "faction" } ] } result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/getPlayerBanStatus.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: sha1(sessionStorage.getItem("uid-key")), uid: UserUID, license: UserRockstarLicense.split(":")[1] }) }) result = await result.json() if (result.code === 404) { this.banned = false } if (!result.message) { this.banned = false } if (result.message && result.code === 200) { this.permaBanned = { bannedAt: result.message.bannedAt, bannedBy: result.message.bannedBy } } result = await fetch(`${location.protocol}//${location.hostname}:${location.port}/controlUserVIPStatus.lvorex`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uid: UserUID, key: sha1(sessionStorage.getItem("uid-key")) }) }) result = await result.json() if (result.code === 404) { this.vip = false } else { this.vip = true } const SearchParamQuery = new URLSearchParams(window.location.search) const vehiclePlate = SearchParamQuery.get("vehicle") if (vehiclePlate) { await this.changePage("car") await this.selectVehicle(vehiclePlate) } setTimeout(() => { document.getElementById("loading-container").style.opacity = 0 }, 300) document.getElementById("panel-content").style.backgroundImage = `url(../../../img/panel${this.darkMode === true ? "Dark" : "Light"}ModePlayers.png)` }, })