I'm making a custom inventory GUI.

For whatever reason whenever a gun gets equipped for the first time it's really glitchy, but then when it gets equipped again it's fine. I waited for all the assets to load in the gun first too & use :WaitForChild in both the script below and the gun's scripts. There are no errors in output.

The gun also doesn't unequip.

Script:

equipped = false

game.ReplicatedStorage.Events.EquipUnequipEvent.OnServerEvent:Connect(function(plr, equippedVal, humanoid, scriptActivateImg, equippedImage, unequippedImage)
	if equippedVal.Value ~= "" then
		if equipped == false then 
			local Tools = game.ReplicatedStorage:WaitForChild("Tools")
			humanoid:EquipTool(Tools[equippedVal.Value]) --glitching here?
			print("equipped")
			equipped = true
		elseif equipped == true then
			humanoid:UnequipTools() --glitching here?
			print("unequipped")
			equipped = false
		end
	end
end)

Thanks!