Fixing isFreeItem() due API mistake

The first time I fixed the buying of free items, it was purely a case of calling
the wrong functions at the wrong time.
Now it seems that 'isFreeItem()' was wrong, maybe wrong made in the first place, maybe due an API change.
Apparently if something is free, 'IsPublicDomain' is true, but 'IsForSale' stays false.
Fix warn() being nonexistant.
revert back to new warn

merged this on accident, there is a new warn function coming down the
pipe that I'd like to use