Code:
ON *:TEXT:!whateverillplay:#:{ 
  if (!$hget(players)) { hmake players }
  if (!$hget(players,$nick)) { 
    hadd players $nick $calc($hget(players,0).item + 1) 
    .msg $chan ok w/e added you
  }
  else { .msg $chan gtfo scrub u already play'n }
}
alias rain { 
  msg # THE ZOMBIES HAVE BEEN DEFEATED! The warriors will recieve the spoils of war!
  var %i = 1, %payout = $floor($calc($readini(zombie.ini,ZOMBIE,Money) / $hget(players,0).item))
  while (%i <= $hget(players,0).item) {
    writeini filewithmoney.ini $hget(players,%i).item $calc($readini(filewithmoney.ini,$hget(players,%i).item,moneyvalue) + %payout)
    inc %i
  }
  hfree players
}


Uhh something like this? I dunno I couldnt really test it.

Your code is kinda bloated..you can cut down that stuff by...a ton.

Code:
alias start {
  var %num = $rand(0,10)
  writeini zombie.ini ZOMBIE Money $calc($readini(zombie.ini,ZOMBIE,Money) + $iif(%num >= 1,$calc(50 + (50 * %num)),1000))
  if (%num >= 1) { msg # NEW WAVE! This round has $calc(50 * %num) ZOMBIES! }
  else { msg # BONUS ROUND! }
}


When you're writing code try to not repeat yourself.