local QBCore = exports['qb-core']:GetCoreObject() -- Debug-Funktion local function Debug(msg) print("^2[Grill Debug] ^7" .. msg) end -- Warte auf vollständige Initialisierung von QBCore CreateThread(function() if not QBCore then Debug("QBCore nicht gefunden, warte...") while not QBCore do QBCore = exports['qb-core']:GetCoreObject() Wait(100) end end Debug("QBCore initialisiert") -- Registriere Grill-Props für qb-target for _, prop in pairs(Config.GrillProps) do Debug("Registriere Target für Prop: " .. tostring(prop)) exports['qb-target']:AddTargetModel(prop, { options = { { type = "client", event = "nordi_bbq:OpenGrillMenu", icon = "fas fa-fire", label = "Grillen", } }, distance = 2.0 }) end Debug("Target-Optionen registriert") end) -- Event zum Öffnen des Grill-Menüs RegisterNetEvent('nordi_bbq:OpenGrillMenu', function() Debug("Öffne Grill-Menü") OpenGrillMenu() end) -- Funktion zum Überprüfen der Zutaten function CheckIngredients(recipe) local hasItems = true local missingItems = {} if not recipe or not recipe.requires then Debug("Rezept oder Anforderungen fehlen") return false, {} end for _, item in pairs(recipe.requires) do if not QBCore.Functions.HasItem(item.item, item.amount) then hasItems = false table.insert(missingItems, { item = item.item, amount = item.amount }) end end return hasItems, missingItems end -- Funktion zum Anzeigen fehlender Zutaten function ShowMissingIngredients(missingItems) local text = "Fehlende Zutaten:\n" for _, item in pairs(missingItems) do local itemLabel = QBCore.Shared.Items[item.item] and QBCore.Shared.Items[item.item].label or item.item text = text .. "- " .. itemLabel .. " (" .. item.amount .. "x)\n" end QBCore.Functions.Notify(text, "error", 5000) end -- Funktion zum Öffnen des Grill-Menüs function OpenGrillMenu() Debug("Erstelle Grill-Menü") local menuOptions = {} for _, recipe in pairs(Config.GrillRecipes) do local hasIngredients, _ = CheckIngredients(recipe) local status = hasIngredients and "~g~✓" or "~r~✗" -- Erstelle Beschreibung mit Zutaten local description = recipe.description .. "\n\nZutaten:" for _, item in pairs(recipe.requires) do local itemLabel = QBCore.Shared.Items[item.item] and QBCore.Shared.Items[item.item].label or item.item local hasItem = QBCore.Functions.HasItem(item.item, item.amount) local itemStatus = hasItem and "~g~✓" or "~r~✗" description = description .. "\n- " .. item.amount .. "x " .. itemLabel .. " " .. itemStatus end table.insert(menuOptions, { title = recipe.label, description = description, icon = recipe.icon or "fas fa-drumstick-bite", onSelect = function() StartGrilling(recipe) end }) end -- Registriere und zeige das Menü mit ox_lib if lib and lib.registerContext then lib.registerContext({ id = 'grill_menu', title = 'Grill', options = menuOptions }) lib.showContext('grill_menu') else Debug("FEHLER: ox_lib nicht verfügbar") QBCore.Functions.Notify("Fehler beim Laden des Menüs", "error") end end -- Funktion zum Starten des Grillvorgangs function StartGrilling(recipe) Debug("Starte Grillvorgang für: " .. recipe.label) -- Überprüfe Zutaten erneut local hasIngredients, missingItems = CheckIngredients(recipe) if not hasIngredients then ShowMissingIngredients(missingItems) return end -- Animation und Progressbar local animDict = "amb@prop_human_bbq@male@base" local anim = "base" RequestAnimDict(animDict) while not HasAnimDictLoaded(animDict) do Wait(10) end QBCore.Functions.Progressbar("grill_food", "Grille " .. recipe.label .. "...", Config.GrillTime, false, true, { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true, }, { animDict = animDict, anim = anim, flags = 49, }, {}, {}, function() -- Success Debug("Grillvorgang abgeschlossen") TriggerServerEvent('nordi_bbq:server:GiveGrilledFood', recipe.item, recipe.requires) end, function() -- Cancel Debug("Grillvorgang abgebrochen") QBCore.Functions.Notify("Grillvorgang abgebrochen", "error") end) end