local function cleanupEntities() local function safeDelete(entity) if DoesEntityExist(entity) then if IsEntityAttachedToAnyPed(entity) then DetachEntity(entity, true, true) end NetworkUnregisterNetworkedEntity(entity) DeleteObject(entity) SetEntityAsNoLongerNeeded(entity) return true end return false end -- Sicherheitsprüfung für Sling if Sling then if Sling.object then safeDelete(Sling.object) Sling.object = nil end if Sling.cachedAttachments then for weaponName, attachment in pairs(Sling.cachedAttachments) do if attachment then safeDelete(attachment.obj) safeDelete(attachment.placeholder) Sling.cachedAttachments[weaponName] = nil end end end Sling.currentAttachedAmount = 0 end -- Cleanup other players weapons if otherPlayersWeapons then for playerId, weapons in pairs(otherPlayersWeapons) do for weaponName, _ in pairs(weapons) do if Sling and Sling.cachedAttachments and Sling.cachedAttachments[weaponName] then safeDelete(Sling.cachedAttachments[weaponName].obj) safeDelete(Sling.cachedAttachments[weaponName].placeholder) end end otherPlayersWeapons[playerId] = nil end end collectgarbage("collect") end -- Verzögere die Registrierung der Events bis Sling initialisiert ist CreateThread(function() while not Sling do Wait(100) end AddEventHandler('onResourceStart', function(resourceName) if resourceName == GetCurrentResourceName() then cleanupEntities() end end) RegisterNetEvent('QBCore:Client:OnPlayerLoaded') AddEventHandler('QBCore:Client:OnPlayerLoaded', function() cleanupEntities() end) AddEventHandler('onResourceStop', function(resourceName) if resourceName == GetCurrentResourceName() then cleanupEntities() end end) AddEventHandler('playerDropped', function() cleanupEntities() end) end) RegisterNetEvent('force-sling:client:syncWeapons') AddEventHandler('force-sling:client:syncWeapons', function(playerId, weaponData, action) if not Sling then return end if playerId == cache.serverId then return end if action == 'attach' then local targetPed = GetPlayerPed(GetPlayerFromServerId(playerId)) if not targetPed or not DoesEntityExist(targetPed) then return end if not otherPlayersWeapons[playerId] then otherPlayersWeapons[playerId] = {} end Utils:CreateAndAttachWeapon( weaponData.weaponName, weaponData.weaponVal, weaponData.coords, targetPed ) otherPlayersWeapons[playerId][weaponData.weaponName] = true elseif action == 'detach' then if otherPlayersWeapons[playerId] and otherPlayersWeapons[playerId][weaponData.weaponName] then Utils:DeleteWeapon(weaponData.weaponName) otherPlayersWeapons[playerId][weaponData.weaponName] = nil end end end) RegisterNetEvent('force-sling:client:cleanupPlayerWeapons') AddEventHandler('force-sling:client:cleanupPlayerWeapons', function(playerId) if not Sling then return end if otherPlayersWeapons[playerId] then for weaponName, _ in pairs(otherPlayersWeapons[playerId]) do Utils:DeleteWeapon(weaponName) end otherPlayersWeapons[playerId] = nil end end)