Update client.lua
This commit is contained in:
		
							parent
							
								
									1d91448884
								
							
						
					
					
						commit
						e69f440a3c
					
				
					 1 changed files with 212 additions and 66 deletions
				
			
		|  | @ -1,70 +1,216 @@ | |||
| Config = {} | ||||
| local QBCore = exports['qb-core']:GetCoreObject() | ||||
|  | ||||
| -- Debug-Modus | ||||
| Config.DebugPoly = false  -- Auf true setzen, um Box-Zonen zu sehen | ||||
| -- Debug Print Funktion | ||||
| local function Debug(msg) | ||||
|     print("^2[Shisha Debug] ^7" .. msg) | ||||
| end | ||||
|  | ||||
| -- Welche Props sollen als Shisha funktionieren? | ||||
| Config.ShishaProps = { | ||||
|     "sf_prop_sf_g_bong_01a", -- Funktionierendes Modell | ||||
|     "prop_bong_01", | ||||
|     "hei_heist_sh_bong_01", | ||||
|     "prop_hookah_01", | ||||
|     "prop_sh_bong_01", | ||||
|     "v_res_m_bong", | ||||
| } | ||||
| -- Überprüfen, ob qb-target verfügbar ist | ||||
| CreateThread(function() | ||||
|     Wait(1000) | ||||
|     Debug("Überprüfe, ob qb-target verfügbar ist...") | ||||
|      | ||||
|     if exports['qb-target'] then | ||||
|         Debug("qb-target Export ist verfügbar") | ||||
|     else | ||||
|         Debug("FEHLER: qb-target Export ist NICHT verfügbar!") | ||||
|     end | ||||
| end) | ||||
|  | ||||
| -- Progressbar Dauer in ms | ||||
| Config.PrepareTime = 5000 | ||||
| Config.SmokeTime = 15000 | ||||
| -- Registriere Target für das funktionierende Shisha-Prop | ||||
| CreateThread(function() | ||||
|     Wait(2000) -- Warte etwas länger, um sicherzustellen, dass alles geladen ist | ||||
|     Debug("Registriere Target für Shisha-Props...") | ||||
|      | ||||
|     -- Registriere das funktionierende Modell | ||||
|     local workingModel = "sf_prop_sf_g_bong_01a" | ||||
|     Debug("Registriere Target für funktionierendes Modell: " .. workingModel) | ||||
|      | ||||
|     exports['qb-target']:AddTargetModel(workingModel, { | ||||
|         options = { | ||||
|             { | ||||
|                 type = "client", | ||||
|                 event = "nordi_shisha:client:OpenMenu", | ||||
|                 icon = 'fas fa-smoking', | ||||
|                 label = 'Shisha rauchen', | ||||
|             } | ||||
|         }, | ||||
|         distance = 2.0 | ||||
|     }) | ||||
|      | ||||
|     Debug("Target für Modell registriert: " .. workingModel) | ||||
|      | ||||
|     -- Versuche auch andere Modelle zu registrieren | ||||
|     for _, propName in ipairs(Config.ShishaProps) do | ||||
|         if propName ~= workingModel then | ||||
|             Debug("Versuche zusätzliches Modell zu registrieren: " .. propName) | ||||
|              | ||||
|             exports['qb-target']:AddTargetModel(propName, { | ||||
|                 options = { | ||||
|                     { | ||||
|                         type = "client", | ||||
|                         event = "nordi_shisha:client:OpenMenu", | ||||
|                         icon = 'fas fa-smoking', | ||||
|                         label = 'Shisha rauchen', | ||||
|                     } | ||||
|                 }, | ||||
|                 distance = 2.0 | ||||
|             }) | ||||
|         end | ||||
|     end | ||||
| end) | ||||
|  | ||||
| -- Verfügbare Shisha-Optionen | ||||
| Config.ShishaOptions = { | ||||
|     { | ||||
|         label = "Apfel Shisha", | ||||
|         description = "Fruchtige Apfel-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 1}, | ||||
|         } | ||||
|     }, | ||||
|     { | ||||
|         label = "Minze Shisha", | ||||
|         description = "Erfrischende Minz-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 1}, | ||||
|         } | ||||
|     }, | ||||
|     { | ||||
|         label = "Wassermelone Shisha", | ||||
|         description = "Süße Wassermelonen-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 1}, | ||||
|         } | ||||
|     }, | ||||
|     { | ||||
|         label = "Traube Shisha", | ||||
|         description = "Aromatische Trauben-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 1}, | ||||
|         } | ||||
|     }, | ||||
|     { | ||||
|         label = "Blaubeere Shisha", | ||||
|         description = "Süße Blaubeeren-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 1}, | ||||
|         } | ||||
|     }, | ||||
|     { | ||||
|         label = "Doppel-Apfel Shisha", | ||||
|         description = "Intensive Doppel-Apfel-Shisha", | ||||
|         icon = "fa-solid fa-smoking", | ||||
|         requires = { | ||||
|             {item = "shisha_tobacco", amount = 2}, | ||||
|         } | ||||
|     }, | ||||
| } | ||||
| -- Event Handler für das Öffnen des Menüs | ||||
| RegisterNetEvent('nordi_shisha:client:OpenMenu') | ||||
| AddEventHandler('nordi_shisha:client:OpenMenu', function() | ||||
|     Debug("Öffne Menü...") | ||||
|     OpenShishaMenu() | ||||
| 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 OpenShishaMenu() | ||||
|     Debug("Erstelle Menüoptionen...") | ||||
|     local options = {} | ||||
|      | ||||
|     for _, shisha in ipairs(Config.ShishaOptions) do | ||||
|         local hasIngredients, missing = CheckIngredients(shisha.requires) | ||||
|         local description = shisha.description .. "\n\nBenötigt:" | ||||
|          | ||||
|         for _, req in ipairs(shisha.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 = shisha.label, | ||||
|             description = description, | ||||
|             icon = shisha.icon, | ||||
|             onSelect = function() | ||||
|                 local canMake, missingItems = CheckIngredients(shisha.requires) | ||||
|                 if canMake then | ||||
|                     PrepareAndSmokeShisha(shisha) | ||||
|                 else | ||||
|                     ShowMissingIngredientsWarning(missingItems) | ||||
|                 end | ||||
|             end | ||||
|         }) | ||||
|     end | ||||
|  | ||||
|     Debug("Zeige Menü...") | ||||
|     lib.registerContext({ | ||||
|         id = 'shisha_menu', | ||||
|         title = 'Shisha', | ||||
|         options = options | ||||
|     }) | ||||
|  | ||||
|     lib.showContext('shisha_menu') | ||||
| end | ||||
|  | ||||
| function PrepareAndSmokeShisha(selectedShisha) | ||||
|     Debug("Starte Shisha-Vorbereitung...") | ||||
|     local player = PlayerPedId() | ||||
|     local animDict = "anim@heists@humane_labs@finale@keycards" | ||||
|     local anim = "ped_a_enter_loop" | ||||
|      | ||||
|     RequestAnimDict(animDict) | ||||
|     while not HasAnimDictLoaded(animDict) do | ||||
|         Wait(0) | ||||
|     end | ||||
|  | ||||
|     QBCore.Functions.Progressbar("prepare_shisha", selectedShisha.label.." wird vorbereitet...", Config.PrepareTime or 5000, false, true, { | ||||
|         disableMovement = true, | ||||
|         disableCarMovement = true, | ||||
|         disableMouse = false, | ||||
|         disableCombat = true, | ||||
|     }, { | ||||
|         animDict = animDict, | ||||
|         anim = anim, | ||||
|         flags = 49, | ||||
|     }, {}, {}, function() -- Erfolg | ||||
|         Debug("Shisha-Vorbereitung erfolgreich, löse Server-Event aus...") | ||||
|         TriggerServerEvent('shisha-script:consumeTobacco', selectedShisha.requires) | ||||
|         -- Nach erfolgreicher Vorbereitung direkt rauchen | ||||
|         SmokeShisha(selectedShisha) | ||||
|     end, function() -- Abgebrochen | ||||
|         Debug("Shisha-Vorbereitung abgebrochen") | ||||
|         QBCore.Functions.Notify("Vorbereitung abgebrochen", "error") | ||||
|     end) | ||||
| end | ||||
|  | ||||
| function SmokeShisha(selectedShisha) | ||||
|     local ped = PlayerPedId() | ||||
|     local propName = "v_corp_lngestoolfd" -- Dieses Modell wird aus dem Stream-Ordner geladen | ||||
|     local propBone = 28422 | ||||
|      | ||||
|     local propCoords = vector3(0.0, 0.0, -0.03) | ||||
|     local propRotation = vector3(0.0, 0.0, 0.0) | ||||
|      | ||||
|     local animDict = "amb@world_human_aa_smoke@male@idle_a" | ||||
|     local animName = "idle_c" | ||||
|      | ||||
|     RequestModel(GetHashKey(propName)) | ||||
|     while not HasModelLoaded(GetHashKey(propName)) do | ||||
|         Wait(0) | ||||
|     end | ||||
|      | ||||
|     RequestAnimDict(animDict) | ||||
|     while not HasAnimDictLoaded(animDict) do | ||||
|         Wait(0) | ||||
|     end | ||||
|      | ||||
|     local prop = CreateObject(GetHashKey(propName), 0.0, 0.0, 0.0, true, true, true) | ||||
|     AttachEntityToEntity(prop, ped, GetPedBoneIndex(ped, propBone), propCoords.x, propCoords.y, propCoords.z, propRotation.x, propRotation.y, propRotation.z, true, true, false, true, 1, true) | ||||
|      | ||||
|     TaskPlayAnim(ped, animDict, animName, 8.0, -8.0, -1, 49, 0, false, false, false) | ||||
|      | ||||
|     QBCore.Functions.Progressbar("smoke_shisha", selectedShisha.label.." rauchen...", Config.SmokeTime or 10000, false, true, { | ||||
|         disableMovement = false, | ||||
|         disableCarMovement = false, | ||||
|         disableMouse = false, | ||||
|         disableCombat = true, | ||||
|     }, {}, {}, {}, function() -- Erfolg | ||||
|         ClearPedTasks(ped) | ||||
|         DeleteObject(prop) | ||||
|         TriggerEvent("evidence:client:SetStatus", "weedsmell", 300) | ||||
|         TriggerServerEvent('hud:server:RelieveStress', math.random(15, 25)) | ||||
|         QBCore.Functions.Notify("Du fühlst dich entspannt...", "success") | ||||
|     end, function() -- Abgebrochen | ||||
|         ClearPedTasks(ped) | ||||
|         DeleteObject(prop) | ||||
|     end) | ||||
| end | ||||
|  | ||||
| -- Debug Event | ||||
| RegisterNetEvent('shisha-script:debug') | ||||
| AddEventHandler('shisha-script:debug', function(msg) | ||||
|     Debug(msg) | ||||
| end) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nordi98
						Nordi98