A guy who'd give you the shirt off his back probably wouldn't mooch off you if he knew he wasn't in a position to reciprocate.How good of a friend is this guy? And how well do you know him?
If he's intentionally mooching because he knows he can, put an end to it. If he's a good friend who fell on hard times or has just been absent minded when coming over and forgot to pick some up or you know he's the type of guy who would give you the shirt off his back, I wouldn't mind. If he's just smoking too many just let him know you've implemented a 1 smoke a day rule at your house to stop yourself from smoking too many (and this rule is universal).
But, like other people said, maybe he's bringing other things to the table. I was in a similar situation myself. I keep a small collection of cheap smokes because while most of my friends and aquaintances don't smoke, some of them will occasionally try one. Except for this one guy. He was into cigars way before than I was and while he, so he says, eased up a lot in the past years, he's still THE cigar afficionado among us. That doesn't mean that he pops up his own cigars, but he'll gladly take one from other people when the situation arises. You'd think okay, the guy doesn't carry his own all the time since he doesn't smoke that often. But get this. Once, a group of us were at a B&M, but he didn't buy anything. The next evening, though, he was the first one to suggest we light one up from the new box, and another, and another. Typical mooching behavior if I ever saw any.
However, before I said anything (I seldom do, though), I remembered that probably all the wine we drank at that table, for the whole week, was coming from the boot of his car. The main bullet point for me to take home, I guess, was Think twice before you call someone an asshole.
Then again, if the guy is heading for the priciest smokes in your humidor and offer you 1 dollar sticks in return, there's really not muchmore thinking to be done, is there?