-- Jutezak systeem voor ox_inventory -- Server-side logica if not lib then return end local activeBags = {} -- Houdt bij welke spelers een zak op hun hoofd hebben -- Event om een jutezak op iemands hoofd te plaatsen RegisterNetEvent('ox_inventory:placeJutezak', function(targetId) local source = source if not targetId or targetId == source then return lib.notify(source, { type = 'error', description = 'Je kunt geen jutezak op jezelf plaatsen!' }) end local targetPed = GetPlayerPed(targetId) if not targetPed or targetPed == 0 then return lib.notify(source, { type = 'error', description = 'Speler niet gevonden!' }) end -- Check of de speler dichtbij genoeg is local sourcePed = GetPlayerPed(source) local sourceCoords = GetEntityCoords(sourcePed) local targetCoords = GetEntityCoords(targetPed) local distance = #(sourceCoords - targetCoords) if distance > 3.0 then return lib.notify(source, { type = 'error', description = 'Je bent te ver weg!' }) end -- Check of target al een zak op heeft if activeBags[targetId] then return lib.notify(source, { type = 'error', description = 'Deze persoon heeft al een zak op het hoofd!' }) end -- Verwijder het item van de speler local inventory = exports.ox_inventory:GetInventory(source) if not inventory then return end local hasItem = exports.ox_inventory:Search(source, 'count', 'jutezak') if hasItem < 1 then return lib.notify(source, { type = 'error', description = 'Je hebt geen jutezak!' }) end -- Verwijder 1 jutezak exports.ox_inventory:RemoveItem(source, 'jutezak', 1) -- Activeer de zak op het doelwit activeBags[targetId] = { placedBy = source, time = os.time() } -- Trigger client-side effect TriggerClientEvent('ox_inventory:applyJutezak', targetId, true) -- Notificaties lib.notify(source, { type = 'success', description = 'Je hebt een jutezak op het hoofd van de persoon geplaatst!' }) lib.notify(targetId, { type = 'error', description = 'Er is een zak over je hoofd geplaatst!' }) end) -- Event om een jutezak te verwijderen RegisterNetEvent('ox_inventory:removeJutezak', function(targetId) local source = source if not targetId then -- Verwijder van jezelf targetId = source end if not activeBags[targetId] then return lib.notify(source, { type = 'error', description = 'Deze persoon heeft geen zak op het hoofd!' }) end -- Check afstand als het om een andere speler gaat if targetId ~= source then local sourcePed = GetPlayerPed(source) local targetPed = GetPlayerPed(targetId) local sourceCoords = GetEntityCoords(sourcePed) local targetCoords = GetEntityCoords(targetPed) local distance = #(sourceCoords - targetCoords) if distance > 3.0 then return lib.notify(source, { type = 'error', description = 'Je bent te ver weg!' }) end end -- Verwijder de zak activeBags[targetId] = nil -- Trigger client-side om effect te verwijderen TriggerClientEvent('ox_inventory:applyJutezak', targetId, false) -- Geef de jutezak terug aan degene die hem verwijdert if exports.ox_inventory:CanCarryItem(source, 'jutezak', 1) then exports.ox_inventory:AddItem(source, 'jutezak', 1) end -- Notificaties if targetId == source then lib.notify(source, { type = 'success', description = 'Je hebt de zak van je hoofd gehaald!' }) else lib.notify(source, { type = 'success', description = 'Je hebt de zak van het hoofd van de persoon gehaald!' }) lib.notify(targetId, { type = 'success', description = 'De zak is van je hoofd gehaald!' }) end end) -- Cleanup wanneer speler disconnect AddEventHandler('playerDropped', function() local source = source if activeBags[source] then activeBags[source] = nil end end) -- Export om te checken of een speler een zak op heeft exports('HasJutezak', function(playerId) return activeBags[playerId] ~= nil end)