1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-06-26 03:02:08 +02:00
parent f653901eb9
commit 6a11ec41ca
3 changed files with 198 additions and 265 deletions

View file

@ -1,158 +1,79 @@
<!DOCTYPE html>
local spawnedObjects = {} <html lang="en">
<head>
local imageDisplayed = false <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
RegisterNetEvent('pl_printer:notification') <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
AddEventHandler('pl_printer:notification', function(message, type) <title></title>
<style>
if Config.Notify == 'ox' then body {
TriggerEvent('ox_lib:notify', {description = message, type = type or "success"}) margin: 0;
elseif Config.Notify == 'esx' then padding: 0;
Notification(message) overflow: hidden;
elseif Config.Notify == 'okok' then background-color: rgba(0, 0, 0, 0.7);
TriggerEvent('okokNotify:Alert', message, 6000, type)
elseif Config.Notify == 'qb' then
Notification(message, type)
elseif Config.Notify == 'wasabi' then
exports.wasabi_notify:notify('Printer', message, 6000, type, false, 'fas fa-ghost')
elseif Config.Notify == 'custom' then
-- Add your custom notifications here
end
end)
function disableControls()
SetEntityInvincible(PlayerPedId(), true)
FreezeEntityPosition(PlayerPedId(), true)
end
function enableControls()
SetEntityInvincible(PlayerPedId(), false)
FreezeEntityPosition(PlayerPedId(), false)
end
RegisterNetEvent("pl_printer:showImageQB")
AddEventHandler("pl_printer:showImageQB", function(imageName)
TriggerServerEvent('pl_printer:fetchImageLink',imageName)
end)
RegisterNetEvent("pl_printer:showImage")
AddEventHandler("pl_printer:showImage", function(imageName)
if not imageDisplayed then
imageDisplayed = true
SetNuiFocus(true, true)
SendNUIMessage({
action = "show",
imageUrl = imageName
})
disableControls()
end
end)
RegisterNUICallback('hideFrame', function(data, cb)
imageDisplayed = false
SetNuiFocus(false, false)
enableControls()
end)
RegisterNetEvent("pl_printer:openprinter")
AddEventHandler("pl_printer:openprinter", function()
local input = lib.inputDialog('Print Menu', {
{type = 'input', label = Locale("image_link"), description = Locale("image_url"), required = true},
{type = 'number', label = Locale("copies"), description = Locale("image_url"),required = true,placeholder='1', icon = 'hashtag'},
})
if input then
if input[1] and input[2] then
TriggerServerEvent('pl_printer:insertImageData', input[1], input[2])
else
_debug('[DEBUG] '..'Invalid Input'..'')
end
end
end)
for _, model in ipairs(Config.PrinterModel) do
if GetResourceState('qb-target') == 'started' then
exports['qb-target']:AddTargetModel(model, {
options = {
{
icon = 'fa-solid fa-print',
label = Locale("prints"),
action = function(data)
TriggerEvent('pl_printer:openprinter')
end,
},
},
distance = 2
})
elseif GetResourceState('qtarget') == 'started' or GetResourceState('ox_target') == 'started'then
exports.ox_target:addModel(model, {
{
name = 'printer_interaction',
label = Locale("prints"),
icon = 'fa-solid fa-print',
onSelect = function(data)
TriggerEvent('pl_printer:openprinter')
end,
distance = 2,
} }
#image-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
max-width: 90%;
max-height: 90%;
display: none;
}
#image {
max-width: 100%;
max-height: 100%;
}
#document-id {
position: absolute;
bottom: 10px;
left: 10px;
color: white;
background-color: rgba(0, 0, 0, 0.5);
padding: 5px;
border-radius: 3px;
font-family: Arial, sans-serif;
}
</style>
</head>
<body>
<div id="image-container">
<img id="image" src="" alt="Document">
<div id="document-id"></div>
</div>
<script>
window.addEventListener('message', function(event) {
if (event.data.action === 'show') {
// Zeige das spezifische Dokument basierend auf der ID oder URL
document.getElementById('image').src = event.data.imageUrl;
// Zeige optional die Dokument-ID an
if (event.data.documentId) {
document.getElementById('document-id').textContent = "Dokument: " + event.data.documentId;
}
document.getElementById('image-container').style.display = 'block';
// Logge die Dokument-Informationen zur Fehlersuche
console.log("Dokument angezeigt:", event.data);
} else if (event.data.action === 'hide') {
document.getElementById('image-container').style.display = 'none';
}
});
document.addEventListener("keydown", function(event) {
if (event.key === "Escape") {
document.getElementById('image-container').style.display = 'none';
axios.post(`https://${GetParentResourceName()}/hideFrame`, {})
.then(function (response) {
console.log("Frame versteckt");
}) })
end .catch(function (error) {
end console.error("Fehler beim Verstecken des Frames:", error);
});
}
local function spawnObject(object, coords, heading) });
lib.requestModel(object) </script>
</body>
if not HasModelLoaded(object) then </html>
_debug('[DEBUG] '..object..' failed to load.'..'')
return
end
local entity = CreateObject(object, coords.x, coords.y, coords.z, true, true, true)
if DoesEntityExist(entity) then
SetEntityHeading(entity, heading)
FreezeEntityPosition(entity, true)
table.insert(spawnedObjects, entity)
else
_debug('[DEBUG] '..' Failed to spawn object: '..object..'')
end
end
local function deleteSpawnedObjects()
for _, obj in ipairs(spawnedObjects) do
if DoesEntityExist(obj) then
DeleteObject(obj)
end
end
spawnedObjects = {}
end
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
for _, location in ipairs(Config.Locations) do
spawnObject(location.object, location.coords, location.heading)
end
end)
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
deleteSpawnedObjects()
end)
function onPlayerLoaded()
Wait(3000)
for _, location in ipairs(Config.Locations) do
spawnObject(location.object, location.coords, location.heading)
end
end
function _debug(...)
if Config.Debug then
print(...)
end
end

View file

@ -1,98 +1,79 @@
if GetResourceState('qb-core') == 'started' then <!DOCTYPE html>
QBCore = exports['qb-core']:GetCoreObject() <html lang="en">
elseif GetResourceState('es_extended') == 'started' then <head>
ESX = exports['es_extended']:getSharedObject() <meta charset="UTF-8">
end <meta name="viewport" content="width=device-width, initial-scale=1.0">
local resourceName = 'pl_printer' <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
lib.versionCheck('pulsepk/pl_printer') <title></title>
<style>
RegisterServerEvent('pl_printer:insertImageData') body {
AddEventHandler('pl_printer:insertImageData', function(imageUrl, amount) margin: 0;
local Player = getPlayer(source) padding: 0;
local account = Config.Print.Account overflow: hidden;
local TotalBill = Config.Print.Price*amount background-color: rgba(0, 0, 0, 0.7);
if GetPlayerAccountMoney(Player,account,TotalBill) then
local imageName = imageUrl:match(".*/(.*)$")
AddItem(source,amount, imageName)
if imageUrl and amount then
MySQL.Async.execute('INSERT INTO printer (image_name, image_link) VALUES (@image_name, @image_link)', {
['@image_name'] = tostring(imageName),
['@image_link'] = imageUrl
}, function(rowsChanged)
end)
RemovePlayerMoney(Player,account,TotalBill)
TriggerClientEvent('pl_printer:notification',source,Locale("Money_Removed") .. TotalBill,'success')
else
_debug('[DEBUG] '..' Invalid data received for image. '..'')
end
else
TriggerClientEvent('pl_printer:notification',source,Locale("not_enough"),'error')
end
end)
RegisterServerEvent('pl_printer:fetchImageLink')
AddEventHandler('pl_printer:fetchImageLink', function(imageName,playerSource)
local hasItem = HasItem(playerSource)
if not hasItem then return end
MySQL.Async.fetchScalar('SELECT image_link FROM printer WHERE image_name = @imageName', {
['@imageName'] = imageName
}, function(imageLink)
if imageLink then
TriggerClientEvent('pl_printer:showImage',playerSource,imageLink)
else
_debug('[DEBUG] '..' No Image Link Found for '..imageName..'')
end
end)
end)
function AddItem(source, amount, imageName)
local src = source
local info = {
id = imageName
} }
if GetResourceState('qb-inventory') == 'started' then #image-container {
if lib.checkDependency('qb-inventory', '2.0.0') then position: absolute;
exports['qb-inventory']:AddItem(src,Config.ItemName,amount,false,info) top: 50%;
TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items[Config.ItemName], 'add', amount) left: 50%;
else transform: translate(-50%, -50%);
local Player = getPlayer(src) max-width: 90%;
Player.Functions.AddItem(Config.ItemName, amount,false, info) max-height: 90%;
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Config.ItemName], "add") display: none;
end }
elseif GetResourceState('ox_inventory') == 'started' then #image {
exports.ox_inventory:AddItem(src,Config.ItemName,amount,imageName,false) max-width: 100%;
elseif GetResourceState('qs-inventory') == 'started' then max-height: 100%;
local itemMetadata ={ id = imageName } }
exports['qs-inventory']:AddItem(src,Config.ItemName,amount,false,itemMetadata) #document-id {
end position: absolute;
end bottom: 10px;
left: 10px;
AddEventHandler('onServerResourceStart', function() color: white;
if GetResourceState('ox_inventory') == 'started' then background-color: rgba(0, 0, 0, 0.5);
exports(Config.ItemName,function (event,item,inventory,slot,data) padding: 5px;
if event == 'usingItem' then border-radius: 3px;
local item_metadata = exports.ox_inventory:GetSlot(inventory.id, slot) font-family: Arial, sans-serif;
TriggerEvent('pl_printer:fetchImageLink', item_metadata.metadata.type, inventory.id) }
end </style>
end) </head>
end <body>
end) <div id="image-container">
<img id="image" src="" alt="Document">
local WaterMark = function() <div id="document-id"></div>
SetTimeout(1500, function() </div>
print('^1['..resourceName..'] ^2Thank you for Downloading the Script^0') <script>
print('^1['..resourceName..'] ^2If you encounter any issues please Join the discord https://discord.gg/c6gXmtEf3H to get support..^0') window.addEventListener('message', function(event) {
print('^1['..resourceName..'] ^2Enjoy a secret 20% OFF any script of your choice on https://pulsescripts.tebex.io/freescript^0') if (event.data.action === 'show') {
print('^1['..resourceName..'] ^2Using the coupon code: SPECIAL20 (one-time use coupon, choose wisely)^0') // Zeige das spezifische Dokument basierend auf der ID oder URL
document.getElementById('image').src = event.data.imageUrl;
end)
end
WaterMark()
// Zeige optional die Dokument-ID an
if (event.data.documentId) {
document.getElementById('document-id').textContent = "Dokument: " + event.data.documentId;
}
document.getElementById('image-container').style.display = 'block';
// Logge die Dokument-Informationen zur Fehlersuche
console.log("Dokument angezeigt:", event.data);
} else if (event.data.action === 'hide') {
document.getElementById('image-container').style.display = 'none';
}
});
document.addEventListener("keydown", function(event) {
if (event.key === "Escape") {
document.getElementById('image-container').style.display = 'none';
axios.post(`https://${GetParentResourceName()}/hideFrame`, {})
.then(function (response) {
console.log("Frame versteckt");
})
.catch(function (error) {
console.error("Fehler beim Verstecken des Frames:", error);
});
}
});
</script>
</body>
</html>

View file

@ -10,39 +10,70 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;
background-color: rgba(0, 0, 0, 0.7);
} }
#image { #image-container {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
max-width: 90%; max-width: 90%;
max-height: 90%; max-height: 90%;
display: none;
}
#image {
max-width: 100%;
max-height: 100%;
}
#document-id {
position: absolute;
bottom: 10px;
left: 10px;
color: white;
background-color: rgba(0, 0, 0, 0.5);
padding: 5px;
border-radius: 3px;
font-family: Arial, sans-serif;
} }
</style> </style>
</head> </head>
<body> <body>
<img id="image" src="" alt="Image" style="display:none;"> <div id="image-container">
<img id="image" src="" alt="Document">
<div id="document-id"></div>
</div>
<script> <script>
window.addEventListener('message', function(event) { window.addEventListener('message', function(event) {
if (event.data.action === 'show') { if (event.data.action === 'show') {
// Zeige das spezifische Dokument basierend auf der ID oder URL
document.getElementById('image').src = event.data.imageUrl; document.getElementById('image').src = event.data.imageUrl;
document.getElementById('image').style.display = 'block';
// Zeige optional die Dokument-ID an
if (event.data.documentId) {
document.getElementById('document-id').textContent = "Dokument: " + event.data.documentId;
}
document.getElementById('image-container').style.display = 'block';
// Logge die Dokument-Informationen zur Fehlersuche
console.log("Dokument angezeigt:", event.data);
} else if (event.data.action === 'hide') { } else if (event.data.action === 'hide') {
document.getElementById('image').style.display = 'none'; document.getElementById('image-container').style.display = 'none';
} }
}); });
document.addEventListener("keydown", function(event) { document.addEventListener("keydown", function(event) {
if (event.key === "Escape") { if (event.key === "Escape") {
document.getElementById('image').style.display = 'none'; document.getElementById('image-container').style.display = 'none';
axios.post(`https://${GetParentResourceName()}/hideFrame`, {}) axios.post(`https://${GetParentResourceName()}/hideFrame`, {})
.then(function (response) { .then(function (response) {
console.log("Frame versteckt");
}) })
.catch(function (error) { .catch(function (error) {
console.error("Fehler beim Verstecken des Frames:", error);
}); });
} }
}); });
</script> </script>
</body> </body>
</html> </html>