BEWARE!!!
The following demo contains good code

.
Read at the risk of your head exploding.
http://www.compwhizz.freeserve.co.uk/asldemos/money.aslI've written it like this mainly because you can put it into a library with reletively minor changes.
To get it working in multiplayer will be a b1-0tch though, as this has a nasty hack to work around some of the ways Quest works.. And is almost impossible to look at when coded for multiplayer.
I don't even think it's really possible..
The harder parts are because of the status variables, and Quest's use of default global variables (which means you can't build recursive functions properly..). The global variable issue slowed me down quite a bit.
Anyway, on the example, it has 5 different types:
black, dark grey, grey, light grey, white (like your gold, silver, bronze, etc).
This you can add to or remove, without having to change anything but the starting array, variables used, and possibly the [game] object properties (which is alot easier than going around altering code all the time).
It detects if you don't have enough coins for such a situation, it allows you to either use a built-in returning string (saying what the coins have changed to - or if it's not allowed) or you can specify your own (I have two commands - one uses in-built, the other doesn't).
The only gripe is multiplayer... See if Elex can understand it and try to get it working in multiplayer.
:EDIT:
You can set the numeric variables up at the start, by simply running "$chngprops(game;backup)$" which will set-up the variables and mean you don't NEED to set them up... Except you really only want them if they're status var's - so you do

..
I guess you could remove all the status var's!
... I'll see if I can try multiplayer stuff.