182 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local QBCore = exports['qb-core']:GetCoreObject()
 | 
						|
 | 
						|
-- Erstelle Targets für alle Pfandautomaten
 | 
						|
CreateThread(function()
 | 
						|
    for _, prop in pairs(Config.PfandautomatProps) do
 | 
						|
        exports['qb-target']:AddTargetModel(prop, {
 | 
						|
            options = {
 | 
						|
                {
 | 
						|
                    type = "client",
 | 
						|
                    event = "qb-pfandsystem:client:openPfandMenu",
 | 
						|
                    icon = "fas fa-recycle",
 | 
						|
                    label = "Pfand einlösen",
 | 
						|
                }
 | 
						|
            },
 | 
						|
            distance = 2.0
 | 
						|
        })
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
-- Registriere Event für Item-Nutzung (wichtig: das ist der korrekte Event für tgiann-inventory)
 | 
						|
RegisterNetEvent('inventory:client:UseItem')
 | 
						|
AddEventHandler('inventory:client:UseItem', function(item)
 | 
						|
    local itemName = item.name
 | 
						|
    
 | 
						|
    -- Prüfe ob das verwendete Item Pfand generiert
 | 
						|
    if Config.ConsumableItems[itemName] then
 | 
						|
        -- Informiere den Server über die Item-Nutzung
 | 
						|
        TriggerServerEvent('qb-pfandsystem:server:itemConsumed', itemName)
 | 
						|
        
 | 
						|
        if Config.Debug then
 | 
						|
            print('[Pfandsystem] Item verwendet: ' .. itemName)
 | 
						|
        end
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
-- Öffne Pfand Menu
 | 
						|
RegisterNetEvent('qb-pfandsystem:client:openPfandMenu', function()
 | 
						|
    QBCore.Functions.TriggerCallback('qb-pfandsystem:server:getPfandItems', function(pfandItems)
 | 
						|
        if next(pfandItems) == nil then
 | 
						|
            lib.notify({
 | 
						|
                title = 'Pfandsystem',
 | 
						|
                description = Config.Locale['no_pfand_items'],
 | 
						|
                type = 'error'
 | 
						|
            })
 | 
						|
            return
 | 
						|
        end
 | 
						|
        
 | 
						|
        showPfandMenu(pfandItems)
 | 
						|
    end)
 | 
						|
end)
 | 
						|
 | 
						|
-- Zeige Pfand Menu
 | 
						|
function showPfandMenu(pfandItems)
 | 
						|
    local options = {}
 | 
						|
    
 | 
						|
    for itemName, itemData in pairs(pfandItems) do
 | 
						|
        local moneyString = string.format("€%.2f", itemData.totalWert / 100)
 | 
						|
        
 | 
						|
        table.insert(options, {
 | 
						|
            title = itemData.label,
 | 
						|
            description = string.format("Anzahl: %d | Gesamtwert: %s", itemData.count, moneyString),
 | 
						|
            icon = 'recycle',
 | 
						|
            onSelect = function()
 | 
						|
                showQuantityInput(itemName, itemData)
 | 
						|
            end
 | 
						|
        })
 | 
						|
    end
 | 
						|
    
 | 
						|
    -- Option für alle Items
 | 
						|
    table.insert(options, {
 | 
						|
        title = "Alle Pfandartikel einlösen",
 | 
						|
        description = "Löse alle verfügbaren Pfandartikel auf einmal ein",
 | 
						|
        icon = 'coins',
 | 
						|
        onSelect = function()
 | 
						|
            redeemAllItems(pfandItems)
 | 
						|
        end
 | 
						|
    })
 | 
						|
    
 | 
						|
    lib.registerContext({
 | 
						|
        id = 'pfand_menu',
 | 
						|
        title = Config.Locale['pfand_menu_title'],
 | 
						|
        options = options
 | 
						|
    })
 | 
						|
    
 | 
						|
    lib.showContext('pfand_menu')
 | 
						|
end
 | 
						|
 | 
						|
-- Zeige Mengenauswahl
 | 
						|
function showQuantityInput(itemName, itemData)
 | 
						|
    local input = lib.inputDialog('Pfand einlösen', {
 | 
						|
        {
 | 
						|
            type = 'slider',
 | 
						|
            label = 'Anzahl (' .. itemData.label .. ')',
 | 
						|
            description = string.format('Verfügbar: %d | Pfandwert: €%.2f pro Stück', 
 | 
						|
                itemData.count, itemData.pfandwert / 100),
 | 
						|
            required = true,
 | 
						|
            min = 1,
 | 
						|
            max = itemData.count,
 | 
						|
            default = itemData.count
 | 
						|
        }
 | 
						|
    })
 | 
						|
    
 | 
						|
    if input and input[1] then
 | 
						|
        local quantity = tonumber(input[1])
 | 
						|
        if quantity and quantity > 0 and quantity <= itemData.count then
 | 
						|
            local selectedItems = {}
 | 
						|
            selectedItems[itemName] = quantity
 | 
						|
            
 | 
						|
            -- Zeige Bestätigung
 | 
						|
            local totalValue = quantity * itemData.pfandwert
 | 
						|
            local moneyString = string.format("€%.2f", totalValue / 100)
 | 
						|
            
 | 
						|
            local confirm = lib.alertDialog({
 | 
						|
                header = 'Pfand einlösen',
 | 
						|
                content = string.format('Möchtest du %d x %s für %s einlösen?', 
 | 
						|
                    quantity, itemData.label, moneyString),
 | 
						|
                centered = true,
 | 
						|
                cancel = true
 | 
						|
            })
 | 
						|
            
 | 
						|
            if confirm == 'confirm' then
 | 
						|
                redeemPfand(selectedItems)
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
-- Löse alle Items ein
 | 
						|
function redeemAllItems(pfandItems)
 | 
						|
    local selectedItems = {}
 | 
						|
    local totalValue = 0
 | 
						|
    local totalCount = 0
 | 
						|
    
 | 
						|
    for itemName, itemData in pairs(pfandItems) do
 | 
						|
        selectedItems[itemName] = itemData.count
 | 
						|
        totalValue = totalValue + itemData.totalWert
 | 
						|
        totalCount = totalCount + itemData.count
 | 
						|
    end
 | 
						|
    
 | 
						|
    local moneyString = string.format("€%.2f", totalValue / 100)
 | 
						|
    
 | 
						|
    local confirm = lib.alertDialog({
 | 
						|
        header = 'Alle Pfandartikel einlösen',
 | 
						|
        content = string.format('Möchtest du alle %d Pfandartikel für %s einlösen?', 
 | 
						|
            totalCount, moneyString),
 | 
						|
        centered = true,
 | 
						|
        cancel = true
 | 
						|
    })
 | 
						|
    
 | 
						|
    if confirm == 'confirm' then
 | 
						|
        redeemPfand(selectedItems)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
-- Sende Pfand zum Server
 | 
						|
function redeemPfand(selectedItems)
 | 
						|
    lib.notify({
 | 
						|
        title = 'Pfandsystem',
 | 
						|
        description = Config.Locale['processing'],
 | 
						|
        type = 'inform'
 | 
						|
    })
 | 
						|
    
 | 
						|
    TriggerServerEvent('qb-pfandsystem:server:redeemPfand', selectedItems)
 | 
						|
end
 | 
						|
 | 
						|
-- Debug Befehle (nur wenn Debug aktiviert)
 | 
						|
if Config.Debug then
 | 
						|
    RegisterCommand('pfandtest', function()
 | 
						|
        TriggerEvent('qb-pfandsystem:client:openPfandMenu')
 | 
						|
    end, false)
 | 
						|
    
 | 
						|
    RegisterCommand('pfandconsume', function(source, args)
 | 
						|
        if args[1] then
 | 
						|
            TriggerServerEvent('qb-pfandsystem:server:itemConsumed', args[1])
 | 
						|
        end
 | 
						|
    end, false)
 | 
						|
end
 | 
						|
 | 
						|
-- Export für andere Scripts
 | 
						|
exports('TriggerPfandConsumption', function(itemName)
 | 
						|
    TriggerServerEvent('qb-pfandsystem:server:itemConsumed', itemName)
 | 
						|
end)
 |