America1107
Snail-
Posts
4 -
Joined
-
Last visited
Content Type
Profiles
Downloads
Release Notes
Store
Everything posted by America1107
-
rlo_admin web > js > main.js $(function(){ window.addEventListener('message', (event) => { var data = event.data; if (data !== undefined && data.type === "open") { $("body").removeClass("d-none"); } else if (data !== undefined && data.type === "close") { $("body").addClass("d-none"); } else if (data !== undefined && data.type === "deleteRequest") { deleteRequest(data.requestContent); } else if (data !== undefined && data.type === "createRequest") { createRequest(data.requestContent); } else if (data !== undefined && data.type === "changeState") { changeState(data.reason); } else if (data !== undefined && data.type === "hsRequest") { hsRequest(data.requestContent); } }); }); function hsRequest(requestContent) { fetch(`https://${GetParentResourceName()}/hsMessage`, { method: 'POST', body: JSON.stringify(requestContent.playerId), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()).catch(err => console.error(err)); const elements = document.querySelectorAll('.content-header'); elements.forEach(element => { const reasonElement = element.querySelector('.col-md-5.column'); if (reasonElement && reasonElement.textContent === requestContent.reason) { element.remove(); } }); } function deleteRequest(requestContent) { const elements = document.querySelectorAll('.content-header'); elements.forEach(element => { const reasonElement = element.querySelector('.col-md-5.column'); if (reasonElement && reasonElement.textContent === requestContent.reason) { element.remove(); } }); } function changeState(reason) { const elements = document.querySelectorAll('.content-header'); elements.forEach(element => { const reasonElement = element.querySelector('.col-md-5.column'); if (reasonElement && reasonElement.textContent === reason) { const button = element.querySelector('button.btn-info'); if (button) { button.textContent = 'In Bearbeitung'; button.className = 'btn btn-warning me-2 d-flex align-items-center justify-content-center'; } } }); } function teleport(coords) { fetch(`https://${GetParentResourceName()}/teleport`, { method: 'POST', body: JSON.stringify(coords), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()).catch(err => console.error(err)); } function waypoint(coords) { fetch(`https://${GetParentResourceName()}/setWaypoint`, { method: 'POST', body: JSON.stringify(coords), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()).catch(err => console.error(err)); } function createRequest(requestContent) { const contentHeader = document.createElement('div'); contentHeader.className = 'content-header row mt-1 text-center bor'; const col1 = document.createElement('div'); col1.className = 'col-md-2 column'; const img = document.createElement('img'); img.src = 'image/ticket.svg'; img.alt = 'Icon'; const div1 = document.createElement('div'); div1.textContent = requestContent.playerName + ' : ' + requestContent.playerId; col1.appendChild(img); col1.appendChild(div1); const col2 = document.createElement('div'); col2.className = 'col-md-5 column'; col2.textContent = requestContent.reason; const col3 = document.createElement('div'); col3.className = 'col-md-2 column'; const buttonOpen = document.createElement('button'); buttonOpen.className = 'btn btn-info me-2 d-flex align-items-center justify-content-center'; buttonOpen.style.height = '38px'; buttonOpen.textContent = requestContent.state; buttonOpen.addEventListener('click', function() { fetch(`https://${GetParentResourceName()}/changeState`, { method: 'POST', body: JSON.stringify(requestContent.identifyId), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()); }); const buttonClaim = document.createElement('button'); buttonClaim.className = 'btn btn-success me-2 d-flex align-items-center justify-content-center'; buttonClaim.style.height = '38px'; buttonClaim.textContent = 'Claim'; buttonClaim.addEventListener('click', function () { fetch(`https://${GetParentResourceName()}/claimRequest`, { method: 'POST', body: JSON.stringify(requestContent.identifyId), headers: { 'Content-Type': 'application/json; charset=UTF-8' }, }) .then(resp => resp.json()) .then(data => { col3.removeChild(buttonClaim); const adminNameTag = document.createElement('span'); adminNameTag.className = 'text-success fw-bold'; adminNameTag.textContent = data.adminName ?? ' '; col3.appendChild(adminNameTag); }) .catch(err => console.error(err)); }); col3.appendChild(buttonOpen); col3.appendChild(buttonClaim); const col4 = document.createElement('div'); col4.className = 'column'; const buttonTP = document.createElement('button'); buttonTP.className = 'btn btn-secondary me-2 d-flex align-items-center justify-content-center'; buttonTP.addEventListener('click', function() { teleport(requestContent.coords); }); buttonTP.style.height = '38px'; buttonTP.textContent = 'TP'; const buttonWP = document.createElement('button'); buttonWP.className = 'btn btn-secondary me-2 d-flex align-items-center justify-content-center'; buttonWP.addEventListener('click', function() { waypoint(requestContent.coords); }); buttonWP.style.height = '38px'; buttonWP.textContent = 'WP'; const buttonDEL = document.createElement('button'); buttonDEL.className = 'btn btn-danger me-2 d-flex align-items-center justify-content-center'; buttonDEL.addEventListener('click', function() { fetch(`https://${GetParentResourceName()}/deleteRequest`, { method: 'POST', body: JSON.stringify(requestContent), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()); }); buttonDEL.style.height = '38px'; buttonDEL.textContent = 'DEL'; const buttonHS = document.createElement('button'); buttonHS.className = 'btn btn-danger me-2 d-flex align-items-center justify-content-center'; buttonHS.addEventListener('click', function() { fetch(`https://${GetParentResourceName()}/hsRequest`, { method: 'POST', body: JSON.stringify(requestContent), headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()); }); buttonHS.style.height = '38px'; buttonHS.textContent = 'HS'; col4.appendChild(buttonTP); col4.appendChild(buttonWP); col4.appendChild(buttonDEL); col4.appendChild(buttonHS); contentHeader.appendChild(col1); contentHeader.appendChild(col2); contentHeader.appendChild(col3); contentHeader.appendChild(col4); document.getElementById('content').appendChild(contentHeader); } function refreshUi() { fetch(`https://${GetParentResourceName()}/refreshUi`, { method: 'POST', headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()); } function closeUi() { fetch(`https://${GetParentResourceName()}/closeUi`, { method: 'POST', headers: {'Content-Type': 'application/json; charset=UTF-8'}, }).then(resp => resp.json()); }
-
rlo_admin server > sv_main.lua local ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) local activeRequests = {} -- Check ob Admin ESX.RegisterServerCallback('rlo_ticketpanel:callback:isAdmin', function(source, cb) local xPlayer = ESX.GetPlayerFromId(source) cb(xPlayer and xPlayer.getGroup() ~= 'user') end) -- Anfrage erstellen (z. B. via /support) RegisterCommand('support', function(source, args) local xPlayer = ESX.GetPlayerFromId(source) if not xPlayer then return end local reason = table.concat(args, " ") if reason == "" then TriggerClientEvent('esx:showNotification', source, "~r~Du musst einen Grund angeben!") return end local requestId = tostring(source) .. "_" .. os.time() activeRequests[requestId] = { playerId = source, playerName = xPlayer.getName(), reason = reason, state = "Offen", coords = GetEntityCoords(GetPlayerPed(source)), identifyId = requestId } -- Sende an Admins TriggerClientEvent('rlo_ticketpanel:client:syncRequest', -1, activeRequests, requestId) end, false) -- Anfrage bei Join anzeigen AddEventHandler('playerConnecting', function(_, _, deferrals) local src = source Wait(5000) TriggerClientEvent('rlo_ticketpanel:client:syncRequestOnJoin', src, activeRequests) end) -- Löschen von HS RegisterNetEvent('rlo_ticketpanel:server:syncHsDelete', function(data) if activeRequests[data.identifyId] then activeRequests[data.identifyId] = nil TriggerClientEvent('rlo_ticketpanel:client:syncHsDelete', -1, data) end end) -- Nachricht an Spieler senden RegisterNetEvent('rlo_ticketpanel:server:hsMessage', function(data) local target = data.playerId if GetPlayerName(target) then TriggerClientEvent('chat:addMessage', target, { args = {"Support", "[ADMIN]: " .. data.message}, color = {255, 0, 0} }) end end) -- Normales Löschen RegisterNetEvent('rlo_ticketpanel:server:syncDelete', function(data) if activeRequests[data.identifyId] then activeRequests[data.identifyId] = nil TriggerClientEvent('rlo_ticketpanel:client:syncDelete', -1, data) end end) -- Anfrage als "in Bearbeitung" markieren RegisterNetEvent('rlo_ticketpanel:server:changeState', function(identifyId) if activeRequests[identifyId] then activeRequests[identifyId].state = "In Bearbeitung" TriggerClientEvent('rlo_ticketpanel:client:changeState', -1, identifyId) end end) -- Claim Request RegisterNetEvent('rlo_ticketpanel:server:claimRequest', function(identifyId) local src = source local xPlayer = ESX.GetPlayerFromId(src) if not xPlayer then return end if activeRequests[identifyId] then activeRequests[identifyId].claimedBy = xPlayer.getName() activeRequests[identifyId].state = "Gecclaimed von " .. xPlayer.getName() TriggerClientEvent('rlo_ticketpanel:client:changeState', -1, activeRequests[identifyId].reason) end end)
-