In addition to what Riamus said, the $rand function should be seeking a number between 1 and $nick(#,0) = $nick($chan,$rand(1,$nick($chan,0)))

Code:
on +3:text:!winner:#:{
  var %nick1 = $nick(#,$rand(1,$nick(#,0)))
  while (%nick1 == $me) { %nick1 = $nick(#,$r(1,$nick(#,0))) }
  msg # Randomly selected winner is %nick1 $+ ! Congratulations %nick1 you win... $eval($+(%,prize.,$network,.,#),2)
}


And the other 2 events.
Code:
on +3:text:!addprize *:#:{
  set $+(%,prize.,$network,.,#) $2-
  msg $chan New prize set!
}
on +3:text:!clprize:#: {
  unset $+(%,prize.,$network,.,#)
  msg $chan Prize cleared!
}