(You have to make a few changes to the shop.php code, namly removing the code that deletes the items after each use in order to do this.
Well, you don't really need to do that. See the 'Download a file' item for an example. This basically uses
die();
at the end of the onUse() function, which stops the Shop.php code to remove the item from running.
Although, if you still want to do it your way, here's the code to remove the item from the inventory:
$result = db_query("DELETE FROM {$db_prefix}shop_inventory
WHERE id = {$_GET['id']}",
__FILE__, __LINE__);
You also need another database column on the smf_shop_inventory to count when the item was last used
I'd suggest to put this field in the smf_members table, as it's unique to that member. Putting it in the smf_shop_inventory table might cause problems if I ever decide to change that table.
A cron job would be the other way, but im not experienced there. Plus making it item based encourages mods to be active. The mod can't go away for a month and add up loads of credits during their absence.
A cron job would be really easy to do (see the dointerest.php file for example), but I agree that they could go away for a month and get lots of credits.
Maybe, the cron job could add the credits only if they've logged in within the last 24 hours?