143 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local QBCore = exports['qb-core']:GetCoreObject()
 | |
| 
 | |
| -- Debug Print Funktion
 | |
| local function Debug(msg)
 | |
|     print("^2[Coffee Debug] ^7" .. msg)
 | |
| end
 | |
| 
 | |
| CreateThread(function()
 | |
|     Debug("Script starting...")
 | |
|     for _, prop in pairs(Config.CoffeeProps) do
 | |
|         exports['qb-target']:AddTargetModel(prop, {
 | |
|             options = {
 | |
|                 {
 | |
|                     num = 1,
 | |
|                     type = "client",
 | |
|                     event = "nordi_coffeemachine:client:OpenMenu",
 | |
|                     icon = 'fas fa-coffee',
 | |
|                     label = 'Kaffee zubereiten',
 | |
|                 }
 | |
|             },
 | |
|             distance = 2.0
 | |
|         })
 | |
|     end
 | |
|     Debug("Target options registered")
 | |
| end)
 | |
| 
 | |
| -- Event Handler für das Öffnen des Menüs
 | |
| RegisterNetEvent('nordi_coffeemachine:client:OpenMenu')
 | |
| AddEventHandler('nordi_coffeemachine:client:OpenMenu', function()
 | |
|     Debug("Opening menu...")
 | |
|     OpenCoffeeMenu()
 | |
| end)
 | |
| 
 | |
| function CheckIngredients(requirements)
 | |
|     local hasItems = true
 | |
|     local missingItems = {}
 | |
|     
 | |
|     for _, requirement in ipairs(requirements) do
 | |
|         local hasItem = QBCore.Functions.HasItem(requirement.item, requirement.amount)
 | |
|         if not hasItem then
 | |
|             hasItems = false
 | |
|             table.insert(missingItems, {
 | |
|                 item = requirement.item,
 | |
|                 required = requirement.amount
 | |
|             })
 | |
|         end
 | |
|     end
 | |
|     
 | |
|     return hasItems, missingItems
 | |
| end
 | |
| 
 | |
| function ShowMissingIngredientsWarning(missingItems)
 | |
|     local warningText = "Fehlende Zutaten:\n"
 | |
|     for _, item in ipairs(missingItems) do
 | |
|         local itemLabel = QBCore.Shared.Items[item.item].label
 | |
|         warningText = warningText .. "- " .. itemLabel .. " (benötigt: " .. item.required .. ")\n"
 | |
|     end
 | |
|     
 | |
|     QBCore.Functions.Notify(warningText, "error", 5000)
 | |
| end
 | |
| 
 | |
| function OpenCoffeeMenu()
 | |
|     Debug("Building menu options...")
 | |
|     local options = {}
 | |
|     
 | |
|     for _, coffee in ipairs(Config.CoffeeOptions) do
 | |
|         local hasIngredients, missing = CheckIngredients(coffee.requires)
 | |
|         local description = coffee.description .. "\n\nBenötigt:"
 | |
|         
 | |
|         for _, req in ipairs(coffee.requires) do
 | |
|             local itemLabel = QBCore.Shared.Items[req.item].label
 | |
|             local hasItem = QBCore.Functions.HasItem(req.item, req.amount)
 | |
|             local status = hasItem and "~g~✓" or "~r~✗"
 | |
|             description = description .. "\n- " .. req.amount .. "x " .. itemLabel .. " " .. status
 | |
|         end
 | |
| 
 | |
|         table.insert(options, {
 | |
|             title = coffee.label,
 | |
|             description = description,
 | |
|             icon = coffee.icon,
 | |
|             onSelect = function()
 | |
|                 local canMake, missingItems = CheckIngredients(coffee.requires)
 | |
|                 if canMake then
 | |
|                     PrepareCoffee(coffee)
 | |
|                 else
 | |
|                     ShowMissingIngredientsWarning(missingItems)
 | |
|                 end
 | |
|             end
 | |
|         })
 | |
|     end
 | |
| 
 | |
|     Debug("Showing menu...")
 | |
|     lib.registerContext({
 | |
|         id = 'coffee_menu',
 | |
|         title = 'Kaffeeautomat',
 | |
|         options = options
 | |
|     })
 | |
| 
 | |
|     lib.showContext('coffee_menu')
 | |
| end
 | |
| 
 | |
| function PrepareCoffee(selectedCoffee)
 | |
|     Debug("Starting coffee preparation...")
 | |
|     local player = PlayerPedId()
 | |
|     local animDict = "mini@drinking"
 | |
|     local anim = "shots_barman_b"
 | |
|     
 | |
|     RequestAnimDict(animDict)
 | |
|     while not HasAnimDictLoaded(animDict) do
 | |
|         Wait(0)
 | |
|     end
 | |
| 
 | |
|     QBCore.Functions.Progressbar("get_coffee", selectedCoffee.label.." wird zubereitet...", Config.ProgressTime or 5000, false, true, {
 | |
|         disableMovement = true,
 | |
|         disableCarMovement = true,
 | |
|         disableMouse = false,
 | |
|         disableCombat = true,
 | |
|     }, {
 | |
|         animDict = animDict,
 | |
|         anim = anim,
 | |
|         flags = 49,
 | |
|     }, {}, {}, function() -- Erfolg
 | |
|         Debug("Coffee preparation successful, triggering server event...")
 | |
|         TriggerServerEvent('coffee-script:giveCoffee', selectedCoffee.item, selectedCoffee.requires)
 | |
|     end, function() -- Abgebrochen
 | |
|         Debug("Coffee preparation cancelled")
 | |
|         QBCore.Functions.Notify("Zubereitung abgebrochen", "error")
 | |
|     end)
 | |
| end
 | |
| 
 | |
| -- Debug Event
 | |
| RegisterNetEvent('coffee-script:debug')
 | |
| AddEventHandler('coffee-script:debug', function(msg)
 | |
|     Debug(msg)
 | |
| end)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
