One thing I did is rename the variables, they all start with %rdl. now this is so they are unlikely to conflict with any other variable names other scripts may use.
* I changed if ($1 == !riddle) { into elseif ($1 == !riddle) { becuase before if !riddleoff after doing its code it is also compared to %rdl.answer etc
* Only enter the comparing to %rdl.answer code if %rdl.on is set, if its not there isnt a riddle in play, otherwise just ignore the text
* If the answer was correct, I call the end.riddle alias (reduces code, also means if u patch the code u only need to patch it in one place)
* I changed set %read $read(riddle.txt) to var %read = $read(riddle.txt) meaning it exists only while the script (event) is running
.. You might notice i didnt bother to make it %rdl.read as this variable exists only inside this script, if a $read exists elsewhere it is uneffected.

Code:
on *:text:*:#:{
  if ($1 == !riddleoff) {
    if !%rdl.on {
      msg # It's not on
    }
    else {
      describe # 9,1¿3,1? 9,1R3,1i9,1d3,1D9,1l3,1e 9,1M3,1e 9,1T3,1h9,1i3,1S 9,1?3,1¿ has been turned off.
      riddle.end
    }
  }
  elseif ($1 == !riddle) {
    if !%rdl.on {
      new.riddle #
    }
    else {
      describe # ¿? %rdl.riddle ?¿
    }
  }
  elseif (%rdl.on) {
    if ($1- == %rdl.answer) {
      describe # %rdl.answer $+ !¡! Congratulations $nick you are correct!
      describe # Type !riddle for another round.
      riddle.end
    }
    else {
      .notice $nick Sorry $nick $+ , that's wrong.
    }
  } 
} 
alias new.riddle {
  set %rdl.on 1
  var %read = $read(riddle.txt)
  set %rdl.answer $gettok(%read,2-,61)
  set %rdl.riddle $gettok(%read,1,61)
  describe $1 9,1¿3,1? 9,1R3,1i9,1d3,1D9,1l3,1e 9,1M3,1e 9,1T3,1h9,1i3,1S 9,1?3,1¿
  describe $1 :: %rdl.riddle ::
  .timer.riddle.end.turn 1 60 riddle.end.turn $1
}
alias  riddle.end.turn {
  describe $1 Time's up the answer was %rdl.answer
  describe $1 Put your Thinking Caps on Brainiacs!
  new.riddle $1
}
alias riddle.end {
  unset %rdl.on
  unset %rdl.answer
  unset %rdl.riddle
  .timer.riddle.end.turn off
}
;
;riddle.txt format <riddle>=<answer> ie:
;Whats black and white and red all over=newspaper
;Why did the chicken cross the road=To get to the other side
;