From 8ffed48f9150f2cc603b0fe1a29f54701a060739 Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Mon, 28 Jul 2025 22:31:38 +0200 Subject: [PATCH] Update main.lua --- .../[inventory]/nordi_pfand/server/main.lua | 170 ++++++------------ 1 file changed, 53 insertions(+), 117 deletions(-) diff --git a/resources/[inventory]/nordi_pfand/server/main.lua b/resources/[inventory]/nordi_pfand/server/main.lua index f6853cf91..0cf32a8d3 100644 --- a/resources/[inventory]/nordi_pfand/server/main.lua +++ b/resources/[inventory]/nordi_pfand/server/main.lua @@ -17,7 +17,7 @@ RegisterNetEvent('qb-pfandsystem:server:itemConsumed', function(itemName) local randomChance = math.random(1, 100) if randomChance <= chance then - -- Gebe Pfanditem mit tgiann-inventory + -- Gebe Pfanditem mit tgiann-inventory Event TriggerEvent('tgiann-inventory:server:addItem', src, pfandItem, 1) if Config.ShowPfandNotification then @@ -35,26 +35,11 @@ RegisterNetEvent('qb-pfandsystem:server:itemConsumed', function(itemName) print(string.format('[Pfandsystem] Spieler %s hat %s konsumiert und %s erhalten', Player.PlayerData.name, itemName, pfandItem)) end - else - -- Pfand nicht erhalten (z.B. Flasche zerbrochen) - if Config.ShowPfandNotification and chance < 100 then - TriggerClientEvent('ox_lib:notify', src, { - title = 'Pfandsystem', - description = Config.Locale['pfand_bottle_broken'], - type = 'error', - duration = 3000 - }) - end - - if Config.Debug then - print(string.format('[Pfandsystem] Spieler %s hat %s konsumiert aber kein Pfand erhalten (%d%% Chance)', - Player.PlayerData.name, itemName, chance)) - end end end end) --- Pfand einlösen +-- Vereinfachte Pfand-Einlösung RegisterNetEvent('qb-pfandsystem:server:redeemPfand', function(selectedItems) local src = source local Player = QBCore.Functions.GetPlayer(src) @@ -63,129 +48,80 @@ RegisterNetEvent('qb-pfandsystem:server:redeemPfand', function(selectedItems) local totalPfand = 0 local totalItems = 0 - local itemsToRemove = {} - -- Überprüfe ob Spieler die Items hat und berechne Gesamtpfand + -- Berechne Gesamtpfand und entferne Items for itemName, quantity in pairs(selectedItems) do if Config.PfandItems[itemName] then - -- Verwende tgiann-inventory callback um Item zu prüfen - QBCore.Functions.TriggerCallback('tgiann-inventory:server:getItem', function(playerItem) - if playerItem and playerItem.count >= quantity then - local pfandWert = Config.PfandItems[itemName].pfandwert * quantity - totalPfand = totalPfand + pfandWert - totalItems = totalItems + quantity - itemsToRemove[itemName] = quantity - else - TriggerClientEvent('ox_lib:notify', src, { - title = 'Pfandsystem', - description = 'Du hast nicht genug ' .. (Config.PfandItems[itemName].label or itemName), - type = 'error' - }) - return - end - end, src, itemName) + -- Entferne Item direkt + TriggerEvent('tgiann-inventory:server:removeItem', src, itemName, quantity) + + local pfandWert = Config.PfandItems[itemName].pfandwert * quantity + totalPfand = totalPfand + pfandWert + totalItems = totalItems + quantity end end - -- Warte kurz damit alle Callbacks verarbeitet werden - SetTimeout(100, function() - if totalPfand <= 0 then - TriggerClientEvent('ox_lib:notify', src, { - title = 'Pfandsystem', - description = Config.Locale['no_pfand_items'], - type = 'error' - }) - return - end - - -- Entferne Items aus dem Inventar - local success = true - for itemName, quantity in pairs(itemsToRemove) do - TriggerEvent('tgiann-inventory:server:removeItem', src, itemName, quantity) - end - - if success then - -- Gebe Geld - if Config.Currency == 'cash' then - Player.Functions.AddMoney('cash', totalPfand) - else - Player.Functions.AddMoney('bank', totalPfand) - end - - -- Formatiere Geld für Anzeige - local moneyString = string.format("€%.2f", totalPfand / 100) - - TriggerClientEvent('ox_lib:notify', src, { - title = 'Pfandsystem', - description = string.format(Config.Locale['pfand_success'], moneyString, totalItems), - type = 'success' - }) - - if Config.Debug then - print(string.format('[Pfandsystem] Spieler %s hat %d Items für €%.2f eingelöst', - Player.PlayerData.name, totalItems, totalPfand / 100)) - end + if totalPfand > 0 then + -- Gebe Geld + if Config.Currency == 'cash' then + Player.Functions.AddMoney('cash', totalPfand) else - TriggerClientEvent('ox_lib:notify', src, { - title = 'Pfandsystem', - description = Config.Locale['pfand_error'], - type = 'error' - }) + Player.Functions.AddMoney('bank', totalPfand) end - end) + + -- Formatiere Geld für Anzeige + local moneyString = string.format("€%.2f", totalPfand / 100) + + TriggerClientEvent('ox_lib:notify', src, { + title = 'Pfandsystem', + description = string.format(Config.Locale['pfand_success'], moneyString, totalItems), + type = 'success' + }) + + if Config.Debug then + print(string.format('[Pfandsystem] Spieler %s hat %d Items für €%.2f eingelöst', + Player.PlayerData.name, totalItems, totalPfand / 100)) + end + end end) --- Hole verfügbare Pfand Items des Spielers +-- Vereinfachte Item-Abfrage QBCore.Functions.CreateCallback('qb-pfandsystem:server:getPfandItems', function(source, cb) local src = source local pfandItems = {} - local itemsChecked = 0 - local totalItems = 0 - -- Zähle wie viele Items wir prüfen müssen - for _ in pairs(Config.PfandItems) do - totalItems = totalItems + 1 - end - - if totalItems == 0 then + -- Nutze Player.PlayerData.items direkt + local Player = QBCore.Functions.GetPlayer(src) + if not Player then cb(pfandItems) - return + return end for itemName, itemConfig in pairs(Config.PfandItems) do - QBCore.Functions.TriggerCallback('tgiann-inventory:server:getItem', function(playerItem) - itemsChecked = itemsChecked + 1 - - if playerItem and playerItem.count > 0 then - pfandItems[itemName] = { - count = playerItem.count, - label = itemConfig.label, - pfandwert = itemConfig.pfandwert, - totalWert = itemConfig.pfandwert * playerItem.count - } + local itemCount = 0 + + -- Durchsuche Spieler-Inventar + for slot, item in pairs(Player.PlayerData.items) do + if item and item.name == itemName then + itemCount = itemCount + item.amount end - - -- Wenn alle Items geprüft wurden, sende Ergebnis zurück - if itemsChecked >= totalItems then - cb(pfandItems) - end - end, src, itemName) + end + + if itemCount > 0 then + pfandItems[itemName] = { + count = itemCount, + label = itemConfig.label, + pfandwert = itemConfig.pfandwert, + totalWert = itemConfig.pfandwert * itemCount + } + end end + + cb(pfandItems) end) --- Korrekte Event-Handler für tgiann-inventory +-- Event-Handler für Item-Nutzung RegisterNetEvent('tgiann-inventory:server:itemUsed', function(source, itemName, itemData) - -- Prüfe ob das verwendete Item in unserer Konsumierbare Items Liste ist - if Config.ConsumableItems[itemName] then - -- Warte kurz damit das originale Item erst konsumiert wird - SetTimeout(100, function() - TriggerEvent('qb-pfandsystem:server:itemConsumed', itemName) - end) - end -end) - --- Alternative: Nutze den korrekten Event Namen basierend auf der Dokumentation -RegisterNetEvent('tgiann-inventory:itemUsed', function(source, itemName, itemData) if Config.ConsumableItems[itemName] then SetTimeout(100, function() TriggerEvent('qb-pfandsystem:server:itemConsumed', itemName)