Can i suggest you variablise some things to reduce file access / increase performace / make it easier to read (also made me see while rounding .5+ up was not a good idea!)

(example below, as you may find better spots to define the variables within the whole script)

Code:
   if ($2- == all UP) {
    var %nickini = $nick $+ .ini
    var %gold = $readini( %nickini, THINGS, gold)
    if ( %gold <= 10000) { msg $nick You only have %gold gold, Thats not enough!. | .halt }
    ;
    var %up = $readini( %nickini, THINGS, UP)
    var %ups = $round( $calc( %up + ( %gold / 10000 ) ) ,0 )
    writeini %nickini THINGS UP %ups
    writeini %nickini THINGS gold $calc( %gold - ( %ups * 10000 ) )
    msg $nick Purchase successfull. Your UP is now:  %ups 
  } 


**** POSSABLE LOGIC BUG IN YOUR CODE ****
ok once i did that above it became easier to read and i noticed, that when you create the %UPS value u use the original UP value plus 1/10000th of the GOLD value, which is correct, but you then subtract from the GOLD the %UPS value * 10000
UP = 4
GOLD = 25000
%UPS = ( 4 + ( 25000 / 10000) ) = 6.5 = rounded = 6
GOLD = 25000 - ( 6 * 10000 ) = *** -35000 *** hmmmmmm that dont look right!


I would suggest this.

Code:
   if ($2- == all UP) {
    var %nickini = $nick $+ .ini
    var %gold = $readini( %nickini, THINGS, gold)
    if ( %gold <= 10000) { msg $nick You only have %gold gold, Thats not enough!. | .halt }
    ;
    var %ups = $round( $calc( %gold / 10000 ) ,0 )
    var %up = $calc( $readini( %nickini, THINGS, UP) +  %ups )
    writeini %nickini THINGS UP %up
    writeini %nickini THINGS gold $calc( %gold - ( %ups * 10000 ) )
    msg $nick Purchase successfull. Your UP is now:  %up 
  }


PS: using VAR = in replace of SET as var's exist only tell the script completes.