1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-07-11 13:10:18 +02:00
parent 208ecc8c0c
commit 38926664fb
2 changed files with 132 additions and 35 deletions

View file

@ -5,6 +5,44 @@ local function Debug(msg)
print("^2[Shisha Debug] ^7" .. msg)
end
-- Cache system for item checks
local itemCheckCache = {}
local lastCheckTime = {}
local checkCooldown = 1000 -- 1 second cooldown between checks for the same item
-- Function to check if player has an item
local function HasItem(itemName, amount, callback)
-- Check cache first (to avoid spamming the server)
local cacheKey = itemName .. "_" .. amount
local currentTime = GetGameTimer()
if itemCheckCache[cacheKey] ~= nil and lastCheckTime[cacheKey] and
(currentTime - lastCheckTime[cacheKey]) < checkCooldown then
callback(itemCheckCache[cacheKey])
return
end
-- Create a unique event name for this check
local uniqueEventName = 'shisha-script:itemCheckResult:' .. math.random(100000, 999999)
-- Register the event handler
local eventHandler = RegisterNetEvent(uniqueEventName)
AddEventHandler(uniqueEventName, function(hasItem)
itemCheckCache[cacheKey] = hasItem
lastCheckTime[cacheKey] = GetGameTimer()
callback(hasItem)
end)
-- Request the check from server with our unique event name
TriggerServerEvent('shisha-script:checkItem', itemName, amount, uniqueEventName)
-- Set a timeout to prevent hanging if something goes wrong
SetTimeout(1000, function()
if not lastCheckTime[cacheKey] or (currentTime - lastCheckTime[cacheKey]) >= checkCooldown then
callback(false)
end
end)
end
-- Check if qb-target is available
CreateThread(function()
Wait(1000)
@ -68,22 +106,34 @@ AddEventHandler('nordi_shisha:client:OpenMenu', function()
end)
-- Check if player has required ingredients
function CheckIngredients(requirements)
function CheckIngredients(requirements, callback)
local hasItems = true
local missingItems = {}
local checkedItems = 0
local totalItems = #requirements
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
if totalItems == 0 then
callback(true, {})
return
end
return hasItems, missingItems
for _, requirement in ipairs(requirements) do
HasItem(requirement.item, requirement.amount, function(hasItem)
checkedItems = checkedItems + 1
if not hasItem then
hasItems = false
table.insert(missingItems, {
item = requirement.item,
required = requirement.amount
})
end
if checkedItems == totalItems then
callback(hasItems, missingItems)
end
end)
end
end
-- Show warning for missing ingredients
@ -101,33 +151,55 @@ end
function OpenShishaMenu()
Debug("Erstelle Menüoptionen...")
local options = {}
local shishaChecked = 0
local totalShishas = #Config.ShishaOptions
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
PrepareShisha(shisha)
else
ShowMissingIngredientsWarning(missingItems)
end
CheckIngredients(shisha.requires, function(hasIngredients, missingItems)
shishaChecked = shishaChecked + 1
local description = shisha.description .. "\n\nBenötigt:"
for _, req in ipairs(shisha.requires) do
local itemLabel = QBCore.Shared.Items[req.item].label
local hasItem = not table.find(missingItems, function(item) return item.item == req.item end)
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()
CheckIngredients(shisha.requires, function(canMake, missingItems)
if canMake then
PrepareShisha(shisha)
else
ShowMissingIngredientsWarning(missingItems)
end
end)
end
})
if shishaChecked == totalShishas then
ShowShishaMenu(options)
end
end)
end
end
-- Helper function to find in table
function table.find(t, cb)
for _, v in ipairs(t) do
if cb(v) then
return true
end
end
return false
end
function ShowShishaMenu(options)
Debug("Zeige Menü...")
lib.registerContext({
id = 'shisha_menu',