637 lines
		
	
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			637 lines
		
	
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| BGBlur = true
 | |
| ActionsOpen = false
 | |
| ChangedKeys = []
 | |
| DoorNotify = false
 | |
| CurrentKeyPage = 1
 | |
| 
 | |
| let translations = {};
 | |
| 
 | |
| async function loadTranslations(lang) {
 | |
|     try {
 | |
|         const response = await fetch(`../locales/${lang}.json`);
 | |
|         translations = await response.json();
 | |
|         updateText()
 | |
|     } catch (error) {
 | |
|         console.error("Error loading translation:", error);
 | |
|     }
 | |
| }
 | |
| 
 | |
| function updateText() {
 | |
|     document.querySelectorAll("[data-i18n]").forEach(element => {
 | |
|         const key = element.getAttribute("data-i18n");
 | |
| 
 | |
|         if (element.hasAttribute("placeholder")) {
 | |
|             element.setAttribute("placeholder", translations[key]);
 | |
|         } else {
 | |
|             element.innerHTML = translations[key]; 
 | |
|         }
 | |
|     });
 | |
| }
 | |
| 
 | |
| function t(key) {
 | |
|     return translations[key] || key; 
 | |
| }
 | |
| 
 | |
| window.addEventListener('message', function(event) {
 | |
|     let data = event.data
 | |
| 
 | |
|     if (data.action == "NUILanguage") {
 | |
|         loadTranslations(data.language);
 | |
|     }
 | |
|     else if (data.action === "OpenKeysMenu") {
 | |
|         MyKeys = data.mykeys
 | |
|         CreateKeyMenu()
 | |
|         BackgroundBlur("plugin_1", 'key_panel')
 | |
|         if (ActionsOpen){
 | |
|             BackgroundBlur("plugin_1", 'key_panel', true)
 | |
|             MakeKeysDraggable()
 | |
|         }
 | |
|         else{
 | |
|             BackgroundBlur("plugin_1", 'key_panel')
 | |
|         }
 | |
|         ChangedKeys = []
 | |
|     } 
 | |
|     if (data.action === "OpenLostKeyMenu") {
 | |
|         MyVehicles = data.myvehicles
 | |
|         VehicleKeyPrice = data.price
 | |
|         Currency = data.currencyform
 | |
|         CreateKeyPurchaseMenu()
 | |
|         show('key_purchase_menu')
 | |
|         BackgroundBlur("plugin_2", 'key_purchase_panel')
 | |
|     }
 | |
|     if (data.action === "DoorState") {
 | |
|         DoorState = data.status
 | |
|         if (DoorState == 'unlocked'){
 | |
|             $(".key_notify .text").html(t('doors_unlocked'))
 | |
|             document.getElementById('line').classList.remove("red")
 | |
|         }
 | |
|         else{
 | |
|             $(".key_notify .text").html(t('doors_locked'))
 | |
|             document.getElementById('line').classList.add("red")
 | |
|         }
 | |
|         $('.key_notify').css('display', 'block')
 | |
|         $('.key_notify .container').css('animation', 'container 1s ease both')
 | |
|         if (DoorNotify){
 | |
|             clearTimeout(DoorNotify)
 | |
|         }
 | |
|         DoorNotify = setTimeout(() => {
 | |
|             $('.key_notify .container').css('animation', 'reverse_container 1s ease both')
 | |
|             setTimeout(() => {
 | |
|                 $('.key_notify').css('display', 'none')
 | |
|                 DoorNotify = false
 | |
|             }, 800);
 | |
|         }, 4000);
 | |
|     }
 | |
|     else if (data.action === "close") {
 | |
|         Close()
 | |
|     }
 | |
| })
 | |
| 
 | |
| document.onkeydown = function(data) {
 | |
|     if (event.key == 'Escape') {
 | |
|         Close()
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Close(){
 | |
|     CloseKeyMenu()
 | |
|     hide('key_purchase_menu')
 | |
|     $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "close", table:ChangedKeys}))
 | |
|     ChangedKeys = []
 | |
| }
 | |
| 
 | |
| function CreateKeyPurchaseMenu(){
 | |
|     $('.vehicles_container').html('')
 | |
|     for (let i = 0; i < MyVehicles.length; i++) {
 | |
|         $('.vehicles_container').append(`
 | |
|             <div class="vehicle_element">
 | |
|                 <div class="element_border"></div>
 | |
|                 <div class="plate">${MyVehicles[i].plate}</div>
 | |
|                 <div class="price">${VehicleKeyPrice.toLocaleString('hu-HU')+' '+Currency}</div>
 | |
|                 <button class="action_btn" onclick="SendBuyKeyForVehicle('${MyVehicles[i].plate}')">${t('buy')}</button>
 | |
|             </div>
 | |
|         `)
 | |
|     }
 | |
| }
 | |
| 
 | |
| function SendBuyKeyForVehicle(plate){
 | |
|     $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "lostKey", plate}))
 | |
| }
 | |
| 
 | |
| function CreateKeyMenu(){
 | |
|     $('.key_menu').css('display', 'block')
 | |
|     $('.key_menu .animation_element').css('animation', 'animation_element 1s ease both')
 | |
|     $('.key_menu .overflow_container').css('animation', 'overflow_container 1s ease both')
 | |
|     $('.key_menu .panel').css('animation', 'panel 1s ease both')
 | |
| 
 | |
|     CreatePageSelector()
 | |
|     InsertDataToPanel()
 | |
| }
 | |
| 
 | |
| function SendChangeLock(keyid){
 | |
|     $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "changeLock", keyid, table:ChangedKeys}))
 | |
|     ChangedKeys = []
 | |
| }
 | |
| 
 | |
| function SendCopy(keyid){
 | |
|     $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "copyKey", keyid, table:ChangedKeys}))
 | |
|     ChangedKeys = []
 | |
| }
 | |
| 
 | |
| function SendDeleteAll(keyid, plate){
 | |
|     $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "deleteAll", keyid, table:ChangedKeys, plate}))
 | |
|     ChangedKeys = []
 | |
| }
 | |
| 
 | |
| function CloseKeyMenu(){
 | |
|     $('.key_menu .animation_element').css('animation', 'reverse_animation_element 1s ease both')
 | |
|     $('.key_menu .overflow_container').css('animation', 'reverse_overflow_container 1s ease both')
 | |
|     $('.key_menu .panel').css('animation', 'reverse_panel 1s ease both')
 | |
| 
 | |
|     if (ActionsOpen){
 | |
|         document.getElementById('actions_btn').classList.remove("active")
 | |
|         $('.key_menu .overflow_container').css('transform', 'translate(0px, -50%)') 
 | |
| 
 | |
|         $('.actions_section #actions_panel').css('animation', 'reverse_actions_panel 0.3s both')
 | |
|         
 | |
|         MakeKeysNotDraggable()
 | |
| 
 | |
|         setTimeout(() => {
 | |
|             ActionsOpen = false
 | |
|             BackgroundBlur("plugin_1", 'key_panel')
 | |
|             $('.actions_section').css('display', 'none')
 | |
|         }, 400);
 | |
|     }
 | |
| 
 | |
|     setTimeout(() => {
 | |
|         $('.key_menu').css('display', 'none')
 | |
|     }, 700);
 | |
| }
 | |
| 
 | |
| function ChooseKeyPage(element, number){
 | |
|     MakeKeysNotDraggable()
 | |
|     CurrentKeyPage = number+1
 | |
|     for (let i = 0; i < NumberOfPages; i++) {
 | |
|         document.getElementById("page_"+i).classList.remove("choosed")
 | |
|     }
 | |
|     element.classList.add("choosed")
 | |
|     InsertDataToPanel()
 | |
|     if (ActionsOpen){
 | |
|         MakeKeysDraggable()
 | |
|     }
 | |
| }
 | |
| 
 | |
| function CreatePageSelector(){
 | |
|     BiggestSlot = 1
 | |
|     for (let i = 0; i < MyKeys.length; i++) {
 | |
|         if (MyKeys[i].slot > BiggestSlot){
 | |
|             BiggestSlot = MyKeys[i].slot
 | |
|         }
 | |
|     }
 | |
|     NumberOfPages = (BiggestSlot-(BiggestSlot%24))/24+1
 | |
| 
 | |
|     $(".page_selector_container").html('')
 | |
|     if (NumberOfPages > 1){
 | |
|         for (let i = 0; i < NumberOfPages; i++) {
 | |
|             if (CurrentKeyPage-1 == i){
 | |
|                 $(".page_selector_container").append(`
 | |
|                     <div class="page_element choosed" id='page_${i}' onclick='ChooseKeyPage(this, ${i})'></div>
 | |
|                 `)
 | |
|             }
 | |
|             else{
 | |
|                 $(".page_selector_container").append(`
 | |
|                     <div class="page_element" id='page_${i}' onclick='ChooseKeyPage(this, ${i})'></div>
 | |
|                 `)
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| function InsertDataToPanel(){
 | |
|     $('.keys_container').html('')
 | |
|     for (let i = (CurrentKeyPage*24)-24; i < CurrentKeyPage*24; i++) {
 | |
|         if (MyKeys.length != 0){
 | |
|             for (let _i = 0; _i < MyKeys.length; _i++) {
 | |
|                 if (MyKeys[_i] != undefined && MyKeys[_i].slot-1 == i){
 | |
|                     let options = {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit"};
 | |
|                     let date = new Date(MyKeys[_i].time * 1000);
 | |
|                     $('.keys_container').append(`
 | |
|                         <div class="key_element">
 | |
|                             <div class="key_border"></div>
 | |
|                             <div class="number">${MyKeys[_i].quantity>1?MyKeys[_i].quantity:''}</div>
 | |
|                             <div class="name">${MyKeys[_i].label}</div>
 | |
|                             ${MyKeys[_i].type == 'temporary_key'?`<div class="temporary"></div>`:''}
 | |
|                             <div class="dropdown">
 | |
|                                 <div class="key_image ${MyKeys[_i].type == 'vehicle_key'?'vehicle':''}" type="button" data-bs-toggle="dropdown" aria-expanded="false" id="key_${i}"></div>
 | |
|                                 <ul class="dropdown-menu">
 | |
|                                     ${MyKeys[_i].type != 'temporary_key'?`<li><button class="dropdown-item mb-2" onclick='SendCopy("${MyKeys[_i].id}")'>${t('copy')}</button></li>`:''}
 | |
|                                     ${MyKeys[_i].type == 'vehicle_key'?`<li><button class="dropdown-item mb-2" onclick='SendChangeLock("${MyKeys[_i].id}")'>${t('change_lock')}</button></li>`:''}
 | |
|                                     <li><button class="dropdown-item" onclick='SendDeleteAll("${MyKeys[_i].id}", "${MyKeys[_i].plate}")'>${t('delete_all')}</button></li>
 | |
|                                     <div class="time">${date.toLocaleString("hu-HU", options)}</div>
 | |
|                                 </ul>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                     `) 
 | |
|                     break
 | |
|                 }
 | |
|                 else if(_i+1 == MyKeys.length){
 | |
|                     $('.keys_container').append(`
 | |
|                         <div class="key_element" id="empty_${i}">
 | |
|                             <div class="key_border"></div>
 | |
|                         </div>
 | |
|                     `)
 | |
|                     break
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         else{
 | |
|             $('.keys_container').append(`
 | |
|                 <div class="key_element" id="empty_${i}">
 | |
|                     <div class="key_border"></div>
 | |
|                 </div>
 | |
|             `)
 | |
|         }
 | |
|     }
 | |
|     document.querySelectorAll(".key_image").forEach(el => {
 | |
|         const dropdownMenu = new bootstrap.Dropdown(el);
 | |
|         el.addEventListener("contextmenu", function (event) {
 | |
|             event.preventDefault(); 
 | |
|             document.querySelectorAll(".key_image").forEach(otherEl => {
 | |
|                 if (otherEl !== el) {
 | |
|                     new bootstrap.Dropdown(otherEl).hide(); 
 | |
|                 }
 | |
|             });
 | |
|             dropdownMenu.show(); 
 | |
|         });
 | |
|     
 | |
|         document.addEventListener("click", function () {
 | |
|             dropdownMenu.hide();
 | |
|         });
 | |
|     });
 | |
| }
 | |
| 
 | |
| function MakeKeysDraggable(){
 | |
|     for (let i = (CurrentKeyPage*24)-24; i < CurrentKeyPage*24; i++) {
 | |
|         for (let _i = 0; _i < MyKeys.length; _i++) {
 | |
|             if (MyKeys[_i] != undefined && MyKeys[_i].slot-1 == i){
 | |
|                 dragElement(document.getElementById('key_'+i), 'key_'+i, MyKeys[_i].id, _i)
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| function MakeKeysNotDraggable(){
 | |
|     for (let i = (CurrentKeyPage*24)-24; i < CurrentKeyPage*24; i++) {
 | |
|         for (let _i = 0; _i < MyKeys.length; _i++) {
 | |
|             if (MyKeys[_i] != undefined && MyKeys[_i].slot-1 == i){
 | |
|                 document.getElementById('key_'+i).onmousedown = null
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| function CreateActionPage(){
 | |
|     if (!ActionsOpen){
 | |
|         ActionsOpen = true
 | |
|         document.getElementById('actions_btn').classList.add("active")
 | |
|         $('.key_menu .overflow_container').css('transform', 'translate(-100px, -50%)')
 | |
|         BackgroundBlur("plugin_1", 'key_panel', true)
 | |
|         
 | |
|         $('#actions_panel').css('height', $('.key_menu .panel').height()+'px')
 | |
|         $('.actions_section #actions_panel').css('animation', 'actions_panel 0.3s ease both')
 | |
|         $('.actions_section').css('display', 'block')
 | |
|         
 | |
|         MakeKeysDraggable()
 | |
| 
 | |
|         TriggerCallback('getClosestPlayers', {}).done((cb) => {
 | |
|             ClosestPlayers = cb
 | |
|             $('.people_container').html('')
 | |
|             if (ClosestPlayers.length > 0){
 | |
|                 for (let i = 0; i < ClosestPlayers.length; i++) {
 | |
|                     $('.people_container').append(`
 | |
|                         <div class="people_element" id='player_${i}'>
 | |
|                             <div class="element_border"></div>
 | |
|                             <div class="people_image"></div>
 | |
|                             <div class="id">ID ${ClosestPlayers[i].id}</div>
 | |
|                         </div>
 | |
|                     `)
 | |
|                 }
 | |
|             }
 | |
|             else{
 | |
|                 $('.people_container').append(`
 | |
|                     <div class="people_element">
 | |
|                         <div class="element_border"></div>
 | |
|                         <div class="text">x</div>
 | |
|                     </div>
 | |
|                 `)
 | |
|             }
 | |
|         });
 | |
|     }
 | |
|     else{
 | |
|         document.getElementById('actions_btn').classList.remove("active")
 | |
|         $('.key_menu .overflow_container').css('transform', 'translate(0px, -50%)') 
 | |
| 
 | |
|         $('.actions_section #actions_panel').css('animation', 'reverse_actions_panel 0.3s both')
 | |
|         
 | |
|         MakeKeysNotDraggable()
 | |
| 
 | |
|         setTimeout(() => {
 | |
|             ActionsOpen = false
 | |
|             BackgroundBlur("plugin_1", 'key_panel')
 | |
|             $('.actions_section').css('display', 'none')
 | |
|         }, 400);
 | |
|     }
 | |
| }
 | |
| 
 | |
| function TriggerCallback(event, data) {
 | |
|     data.action = event;
 | |
|     return $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify(data)).promise();
 | |
| }
 | |
| 
 | |
| function BackgroundBlur(element, target, value) {
 | |
|     if (BGBlur){
 | |
|         var bodyRect = document.body.getBoundingClientRect();
 | |
|         let elemRect = getTotalBoundingBox(target); 
 | |
|         
 | |
|         if (!elemRect) return;
 | |
| 
 | |
|         let offset = [];
 | |
|         if (value){
 | |
|             offset = [
 | |
|                 (elemRect.top - bodyRect.top)-2, 
 | |
|                 ((elemRect.right - bodyRect.right) * (-1))-150, 
 | |
|                 (elemRect.bottom - bodyRect.bottom)+2, 
 | |
|                 (elemRect.left - bodyRect.left)-100
 | |
|             ];
 | |
|         }
 | |
|         else{
 | |
|             offset = [
 | |
|                 (elemRect.top - bodyRect.top)-2, 
 | |
|                 ((elemRect.right - bodyRect.right) * (-1))-1, 
 | |
|                 (elemRect.bottom - bodyRect.bottom)+2, 
 | |
|                 (elemRect.left - bodyRect.left)-1
 | |
|             ];
 | |
|         }
 | |
|     
 | |
|         $('#' + element).css('clip-path', `inset(${offset[0]}px ${offset[1]}px calc(100% - ${offset[2]}px) ${offset[3]}px)`);
 | |
|     }
 | |
|     else{
 | |
|         $('#' + element).css('display', 'none')
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| function getTotalBoundingBox(target) {
 | |
|     const elem = document.getElementById(target);
 | |
|     if (!elem) return null;
 | |
| 
 | |
|     let elemRect = elem.getBoundingClientRect();
 | |
|     let minX = elemRect.left;
 | |
|     let minY = elemRect.top;
 | |
|     let maxX = elemRect.right;
 | |
|     let maxY = elemRect.bottom;
 | |
| 
 | |
| 
 | |
|     Array.from(elem.children).forEach(child => {
 | |
|         let childRect = child.getBoundingClientRect();
 | |
|         minX = Math.min(minX, childRect.left!=0?childRect.left:99999);
 | |
|         minY = Math.min(minY, childRect.top!=0?childRect.top:99999);
 | |
|         maxX = Math.max(maxX, childRect.right);
 | |
|         maxY = Math.max(maxY, childRect.bottom);
 | |
|     });
 | |
| 
 | |
| 
 | |
|     return {
 | |
|         width: maxX - minX,
 | |
|         height: maxY - minY,
 | |
|         left: minX,
 | |
|         top: minY,
 | |
|         right: maxX,
 | |
|         bottom: maxY
 | |
|     };
 | |
| }
 | |
| 
 | |
| function show(element) {
 | |
|     $("#" + element).css("display", "block")
 | |
|     document.getElementById(element).style.animation = "showmenu 0.35s ease";
 | |
| }
 | |
| 
 | |
| function hide(element) {
 | |
|     document.getElementById(element).style.animation = "hidemenu 0.3s ease";
 | |
|     setTimeout(function() {
 | |
|         $("#" + element).css("display", "none")
 | |
|     }, 300)
 | |
| }
 | |
| 
 | |
| function isNumber(evt) {
 | |
|     evt = (evt) ? evt : window.event
 | |
|     var charCode = (evt.which) ? evt.which : evt.keyCode
 | |
|     if (charCode > 31 && (charCode < 48 || charCode > 57)) {
 | |
|         return false
 | |
|     }
 | |
|     return true
 | |
| }
 | |
| 
 | |
| ////////////////////////////////////////////// DRAGGING //////////////////////////////////////////////////
 | |
| 
 | |
| OGPos = {}
 | |
| 
 | |
| function dragElement(elmnt, item, keyid, index) {
 | |
|   var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
 | |
| 
 | |
|   if (OGPos[item] == null){
 | |
|     OGPos[item] = { x: null, y: null }
 | |
|     OGPos[item].x = elmnt.offsetLeft
 | |
|     OGPos[item].y = elmnt.offsetTop
 | |
|   }
 | |
| 
 | |
|   elmnt.onmousedown = dragMouseDown
 | |
| 
 | |
|   function dragMouseDown(e) {
 | |
|     e = e || window.event;
 | |
|     e.preventDefault();
 | |
| 
 | |
|     pos3 = e.clientX;
 | |
|     pos4 = e.clientY;
 | |
|     document.onmouseup = closeDragElement;
 | |
|     document.onmousemove = elementDrag;
 | |
|   }
 | |
| 
 | |
|   function elementDrag(e) {
 | |
|     e = e || window.event
 | |
|     e.preventDefault()
 | |
| 
 | |
|     pos1 = pos3 - e.clientX
 | |
|     pos2 = pos4 - e.clientY
 | |
|     pos3 = e.clientX
 | |
|     pos4 = e.clientY
 | |
| 
 | |
|     elmnt.style.opacity = "0.8"
 | |
| 
 | |
|     elmnt.style.top = (elmnt.offsetTop - pos2) + "px"
 | |
|     elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"
 | |
| 
 | |
|     if (elementsOverlap(elmnt, document.getElementById("key_panel"), true) == false && elementsOverlap(elmnt, document.getElementById("actions_panel")) == false){
 | |
|         closeDragElement(e)
 | |
|     }
 | |
| 
 | |
|     for (let i = (CurrentKeyPage*24)-24; i < CurrentKeyPage*24; i++) {
 | |
|         if (document.getElementById("empty_"+i) != undefined){
 | |
|             if (elementsOverlapPrecise(document.getElementById("empty_"+i), e.clientX, e.clientY) == false){
 | |
|                 document.getElementById('empty_'+i).classList.remove("hovered")
 | |
|             }
 | |
|             else{
 | |
|                 document.getElementById('empty_'+i).classList.add("hovered")
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     for (let i = 0; i < ClosestPlayers.length; i++) {
 | |
|         if (elementsOverlapPrecise(document.getElementById("player_"+i), e.clientX, e.clientY) == false){
 | |
|             document.getElementById('player_'+i).classList.remove("hovered")
 | |
|         }
 | |
|         else{
 | |
|             document.getElementById('player_'+i).classList.add("hovered")
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if (elementsOverlapPrecise(document.getElementById("key_delete"), e.clientX, e.clientY) == false){
 | |
|         document.getElementById('key_delete').classList.remove("hovered")
 | |
|     }
 | |
|     else{
 | |
|         document.getElementById('key_delete').classList.add("hovered")
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function closeDragElement(e) {
 | |
|     UseElement(elmnt, item, e.clientX, e.clientY, keyid, index)
 | |
|     elmnt.style.opacity = "1"
 | |
|     document.onmouseup = null;
 | |
|     document.onmousemove = null;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function UseElement(elmnt, item, X, Y, keyid, index){
 | |
|   let elm = elmnt
 | |
| 
 | |
|     for (let i = (CurrentKeyPage*24)-24; i < CurrentKeyPage*24; i++) {
 | |
|         if (document.getElementById("empty_"+i) != undefined){
 | |
|             if (elementsOverlapPrecise(document.getElementById("empty_"+i), X, Y) == false){
 | |
|                 document.getElementById('empty_'+i).classList.remove("hovered")
 | |
|             }
 | |
|             else{
 | |
|                 for (const key in ChangedKeys) {
 | |
|                     if (ChangedKeys[key].keyid == keyid){
 | |
|                         ChangedKeys.splice(key, 1)
 | |
|                     }
 | |
|                 }
 | |
|                 for (const key in MyKeys) {
 | |
|                     if (MyKeys[key].id == keyid){
 | |
|                         if (MyKeys[key].oldSlot == undefined || MyKeys[key].oldSlot != i+1){
 | |
|                             ChangedKeys.push({keyid: keyid, slot:i+1, plate:MyKeys[key].plate})
 | |
|                             break
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 
 | |
|                 MakeKeysNotDraggable()
 | |
|                 if (MyKeys[index].oldSlot == undefined){
 | |
|                     MyKeys[index].oldSlot = MyKeys[index].slot
 | |
|                 }
 | |
|                 MyKeys[index].slot = i+1
 | |
|                 InsertDataToPanel()
 | |
|                 MakeKeysDraggable()
 | |
|                 return
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     for (let i = 0; i < ClosestPlayers.length; i++) {
 | |
|         if (elementsOverlapPrecise(document.getElementById("player_"+i), X, Y)){
 | |
|             $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "giveKey", playerid:ClosestPlayers[i].id, keyid, table:ChangedKeys}))
 | |
|             document.getElementById('player_'+i).classList.remove("hovered")
 | |
|             ChangedKeys = []
 | |
|             return
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if (elementsOverlapPrecise(document.getElementById("key_delete"), X, Y)){
 | |
|         $.post('https://' + GetParentResourceName() + '/UseButton', JSON.stringify({action: "deleteKey", keyid, table:ChangedKeys, plate:MyKeys[index].plate}))
 | |
|         document.getElementById('key_delete').classList.remove("hovered")
 | |
|         ChangedKeys = []
 | |
|         return
 | |
|     }
 | |
| 
 | |
|    /* if (elementsOverlap(elm, document.getElementById("head_box")) && Damages.head){
 | |
|         ItemAnim(elm, item)
 | |
|     }
 | |
|     else if(elementsOverlap(elm, document.getElementById("head_box")) && Damages.head == false){
 | |
|         WrongItemAnim(elm, item)
 | |
|     }
 | |
|     else{
 | |
|         elm.style.top = OGPos[item].y + "px"
 | |
|         elm.style.left = OGPos[item].x + "px"
 | |
|     }*/
 | |
| 
 | |
|     elm.style.top = OGPos[item].y + "px"
 | |
|     elm.style.left = OGPos[item].x + "px"
 | |
| }
 | |
| 
 | |
| function ItemAnim(elm, item, part){
 | |
|   elm.style.animation = 'none';
 | |
|   elm.offsetHeight;
 | |
|   elm.style.animation = "itemuseanim 1.2s";
 | |
|   setTimeout(function(){
 | |
|     elm.style.top = OGPos[item].y + "px"
 | |
|     elm.style.left = OGPos[item].x + "px"
 | |
|     elm.style.animation = 'none';
 | |
|     Close()
 | |
|   },1200)
 | |
| 
 | |
|   $.post('https://'+GetParentResourceName()+'/UseButton', JSON.stringify({action:"MedicerMenu", type:"useitem", item, you:Mediceryou, part}))
 | |
| }
 | |
| 
 | |
| function WrongItemAnim(elm, item){
 | |
|   elm.style.animation = 'none';
 | |
|   elm.offsetHeight;
 | |
|   elm.style.animation = "itemnotuseanim 0.8s";
 | |
|   setTimeout(function(){
 | |
|     elm.style.top = OGPos[item].y + "px"
 | |
|     elm.style.left = OGPos[item].x + "px"
 | |
|     elm.style.animation = 'none';
 | |
|   },800)
 | |
| }
 | |
| 
 | |
| function elementsOverlap(el1, el2, value) {
 | |
|     const domRect1 = el1.getBoundingClientRect();
 | |
|     const domRect2 = el2.getBoundingClientRect();
 | |
|   
 | |
|     if (value){
 | |
|         return !(
 | |
|             domRect1.top+50 > domRect2.bottom ||
 | |
|             domRect1.right-50 < domRect2.left ||
 | |
|             domRect1.bottom-50 < domRect2.top ||
 | |
|             domRect1.left-50 > domRect2.right
 | |
|           );
 | |
|     }
 | |
|     else{
 | |
|         return !(
 | |
|             domRect1.top+50 > domRect2.bottom ||
 | |
|             domRect1.right-50 < domRect2.left ||
 | |
|             domRect1.bottom-50 < domRect2.top ||
 | |
|             domRect1.left+50 > domRect2.right
 | |
|           );
 | |
|     }
 | |
| }
 | |
| 
 | |
| function elementsOverlapPrecise(el1, X, Y) {
 | |
|     const domRect1 = el1.getBoundingClientRect();
 | |
|     
 | |
|     return !(
 | |
|         domRect1.top > Y ||
 | |
|         domRect1.right < X ||
 | |
|         domRect1.bottom < Y ||
 | |
|         domRect1.left > X
 | |
|         );
 | |
|     
 | |
| }
 | 
