Jump to content
chain

Tat's Trivia Bot 3.58

Recommended Posts

  • Administrators
;For newer versions or contact info check http://nsfhost.tatarize.com

;I assert no copyright, patent, trademark, or trade secret with regard document/script.
;Please alter, modify, butcher, edit, republish, or use this script in any way you see fit.
;With or without this text, in part or in full, without need for permission beforehand.

alias trivia.version { return 3.58 }
alias trivia.name { return Tat's Trivia Bot }
alias trivia.web { return http://tatarize.nfshost.com/ }
;########################################################
;# Direct IRC interactions.                             #
;########################################################
on *:START: { trivia.init }
on *:LOAD: {
  var %v = 6.01
  if ($version < %v) {
    echo Please use mIRC %v or later.
    if ($input(Not using mirc %v or later, would you like to use the script anyway?,8,Override?)) { init.load }
    else { unload -rs $script }
  }
  else { init.load }
}
on *:INVITE:*: {
  if ($trivia.turnedoff) { return }
  if ($trivchan) { join $chan }
}
on *:JOIN:*: {
  if ($trivia.turnedoff) { return }
  inc -u5 %trivia.netsplit
  set -u3 %ident $chan
  if ((%trivia.netsplit >= 3) || (!$trivchan) || (!$getset(status,bot))) { return }
  if (($nick != $me) && (!$isdis(31))) { if ($getset(status,onjoin)) { inform $msg.trivia.onjoin } }
  elseif ($getset(status,autostart) == 1) { trivia }
  award join $nick
}
on *:INPUT:#: {
  if ($trivia.turnedoff) { return }
  if ((!$trivchan) || (/* iswm $1-)) { return }
  set -u3 %ident $chan
  if ($pre $+ * iswm $strip($1-)) { processcommand $strip($1-) }
  elseif ($question.on) { processguess $1- }
}
on *:ctcpreply:ping*:{
  if ($trivia.turnedoff) { return }
  if ($isdis(17)) return
  if (($eval(% $+ ping. $+ $nick,2)) && ($2 isnum)) {
    set -u3 %ident $eval(% $+ pingchan. $+ $nick,2)
    scid $eval(% $+ pingcid. $+ $nick,2) inform $msg.ping.reply
    unset % $+ ping. $+ $nick
    unset % $+ pingchan. $+ $nick
    unset % $+ pingcid. $+ $nick
    $eval(set -u $+ $slag(ping) % $+ pingantispam. $+ $nick 1,2)
  }
}
on *:TEXT:*:#:{
  if ($trivia.turnedoff) { return }
  set -u3 %ident $chan
  if (!$trivchan) return
  if ($pre $+ * iswm $strip($1-)) { processcommand $strip($1-) }
  else if (($question.on) && ($left($1,1) != /)) { processguess $1- }
}
on *:TEXT:*:?: {
  if ($trivia.turnedoff) { return }
  set -u3 %ident $chan
  if (($pre $+ $gtok(29) $+ * iswm $strip($1-)) || ($pre $+ $gtok(30) $+ * iswm $strip($1-))) { processcommand $strip($1-) }
}
;########################################################
;# Channel setup and related checks.                    #
;########################################################
alias trivchan {
  var %i = 1
  while ($tchan(%i)) {
    if (($tchan(%i,3) iswm $me) && ($tchan(%i,2) iswm $ifd($network,irc))) {
      if (($tchan(%i) iswm $chan) || ((!$chan) && ($me ison $tchan(%i)))) {
        if ($1) return $tchan(%i)
        return %i
      }
    }
    inc %i
  }
}
alias tchan { return $ifd($gettok($getset(chan,$1), $ifd($2,1), 59),$iif($2 isnum 2-3, *)) }
;########################################################
;# Menubar and submenu functions.                       #
;########################################################
menu channel,menubar {
  Trivia
  .$showon(Trivia Options):{ if (!$dialog(trivset)) { dialog -m trivset trivset } }
  .$showon(Start Trivia)
  ..$showon(Standard):{ $trivia }
  ..$showon(Unlimited Game):{ $trivia(unlimited) }
  ..$showon(Team Game):{ $trivia(team) }
  ..$showon(Theme Game)
  ...$submenu($theme.submenu($1))
  ..$showon(Specify round):{ $trivia($$?="How many question in the trivia round?") }
  .$showon(Stop Trivia):{ strivia }
  .$showon(Set Channel):{ chan.add $$chan }
  .$showon(-)
  .$showon(Features)
  ..$showon(Build Scores HTML):{ htmlbuild }
  ..$showon(Process HTML Commands):{ htmltrigger }
  ..$showon(HTML Options):{  if (!$dialog(trivbuild)) { dialog -m trivbuild trivbuild } }
  ..$showon(Themes Setup): {  if (!$dialog(triviatheme)) { dialog -m triviatheme triviatheme } }
  ..$showon(Ranks Setup): {  if (!$dialog(trivrank)) { dialog -m trivrank trivrank } }
}
alias theme.submenu {
  if (($1 == begin) || ($1 == end)) return -
  if ($getset(triviamode $+ $1, name)) return $getset(triviamode $+ $1, name) $+ : /trivia $getset(triviamode $+ $1, name)
}
menu menubar {
  Trivia
  .$showon(Force Question):{ ask }
  .$showon(Scores)
  ..$showon(Scores):{ if (!$dialog(triviascores)) { dialog -m triviascores triviascores } }
  ..$showon(Give Points): { trivia.credit $$?="Credit whom?" $$?="How many points do you wish to give, -# to remove score" }
  .$showon(Echo)
  ..$showon(Records):{ tsay $msg.trivia.records }
  ..$showon(HoF):{ tsay $msg.trivia.hof }
  ..$showon(Repeat):{ tsay $msg.question.current }
  ..$showon(Hint):{ tsay $msg.hint.hint }
  .$showon(Open)
  ..$showon(Questions):{ if $isfile($qfile(1)) { run $qfile(1) } }
  ..$showon(Additions):{ if $isfile(" $+ $triv(dir) $+ / $+ $triv(additions) $+ ") { run " $+ $triv(dir) $+ / $+ $triv(additions) $+ " } }
  ..$showon(Report):{ if $isfile(" $+ $triv(dir) $+ / $+ $triv(report) $+ ") { run " $+ $triv(dir) $+ / $+ $triv(report) $+ " } }
  .$showon(-)
  .Trivia Bot is [ $trivon ]
  ..$showon([ $trivdisflip ]) $+ :{ setset status bot $iif($getset(status,bot) == 1,0,1) }
  ..[ $trivoffflip ] $+ :{ setset status botstate $iif($getset(status,botstate) == 1,0,1) }
  .-
  .Trivia Unload:{ if ($?!="Really Unload?") { unload -rs $script } }
}
menu nicklist {
  $showon(Trivia)
  .$showon(Control)
  ..$showon(Ban):{ tban $$1 }
  ..$showon(Unban):{ tunban $$1 }
  .$showon(Add as Friend): { triviafriend.add $address($$1,7) }
  .$showon(Credit)
  ..$showon(Award)
  ...$showon(1): { trivia.credit $$1 1 }
  ...$showon(5): { trivia.credit $$1 5 }
  ...$showon(10): { trivia.credit $$1 10 }
  ..$showon(Deduct)
  ...$showon(1): { trivia.credit $$1 -1 }
  ...$showon(5): { trivia.credit $$1 -5 }
  ...$showon(10): { trivia.credit $$1 -10 }
  ..$showon(Input Amount): { trivia.credit $$1 $$?="How many points do you wish to give, -# to remove score" }
}
alias showon { if ($getset(status,botstate) != 1) return $1- }
alias trivia.turnedoff { if ($getset(status,botstate) == 1) return $true }
;########################################################
;# Menubar related, aliases.                            #
;########################################################
alias trivia.credit {
  if ($2 isnum) {
    setvar $1 score $calc($getvar($1,score) + $2)
    process.scores.time $1 $2
    tsay $iif($2 >= 0,$msg.trivia.awarded($1,$2),$msg.trivia.deducted($1,$2))
  }
}
alias -l trivon { return $iif($getset(status,botstate),Off,$iif($getset(status,bot),$iif($trivia.paused,Paused,Enabled), Disabled)) }
alias -l trivdisflip { return $iif($getset(status,bot),Disable,Enable) }
alias -l trivoffflip { return $iif($getset(status,botstate),On,Off) }
alias -l trivia.chan { return $iif($trivchan, Yes, No) }
alias -l trivia.dir { return $iif($isdir(" $+ $triv(dir) $+ "), Yes, No) }
alias -l trivia.file { return $iif($isfile($qfile(1)), Yes, No) }
alias -l trivia.onoff { return $iif($trivia.on, On, Off) }
alias -l team.onoff { return $iif($team, On, Off) }
;########################################################
;# Init aliases.                                        #
;########################################################
alias -l nset { if ($getset($1, $2) == $null) { setset $1- } }
alias -l init.load {
  convertscores
  convertscores $tempini
  nset award 1 1 1 1 50 0  gives * a high five for getting ^ wins! Way to go * !
  nset award 2 1 1 1 100 0 gives * a large pizza for getting ^ wins! Way to go * !
  nset award 3 1 1 1 150 0 ^ wins... I am not worthy...
  nset award 4 2 1 1 3 0 hands * a cold beer for getting the last ^ questions!
  nset award 5 2 1 1 5 0 hands * 6-pack of icy beers for getting the last ^ questions!
  nset award 6 2 1 1 10 0 gives * keg of beer for kicking everybodies asses! ^ questions!
  nset award 7 2 1 1 15 0 bows before * a trivia god...
  nset award 8 2 2 2 3 5 You're on fire!
  nset award 9 3 4 5 1.5 0 Autoban based on speed.
  nset award 10 4 3 5 120 0 Autoban based on Words per minute.
  nset award 11 7 0 2 0 0 * has moved up in rank: ^
  nset award 12 8 0 2 0 0 *, congratulations on your promotion to: ^
}
alias -l trivia.init {
  nset status bot 1 | nset status echo 0 | nset status autohint 1 | nset status showanswer 1 | nset status cross 1
  nset status number 30 | nset status hintpause 1 | nset trivia additions additions.txt
  nset color 1 $fixer($rand(1,15)) | nset color 2 $fixer($rand(1,15)) | nset trivia default 10 | nset trivia dteam 5 | nset color on 1
  nset trivia delimiter * | nset trivia tnaoff 5 | nset trivia hintpause 5 | nset trivia perchint 30 | nset trivia numhint 1
  nset trivia ppq 1 | nset trivia dph 0 | nset lag answered 10 | nset lag hint 10 | nset lag start 15 | nset lag timed 15 | nset lag ping 10
  nset lag betweenhint 10 | nset lag timedout 60 | nset lag hintallow 10 | nset trivia dir $ifd($nofile($findfile($mircdir,$triv(questions), 1)),$mircdir)
  nset trivia report report.txt | nset trivia reset 1000 | nset team 0victory The *t1 and the *t2 tied | nset team 1 'Team 1's
  nset team 1victory The *t1 beat the *t2 | nset team 2 'Team 2's | nset team 2victory The *t2 beat the *t1 | nset team JoinBefore 2
  nset team JoinBeforeOn 1 | nset status nodecheater 1
  varcolors
}
alias -l trivia.fail {
  if ($version < 5.91) { echo Please use mIRC 5.91 or later. }
  if (!$server) { echo Please connect to a server before attempting to use $msg.trivia.version }
  if ($getset(status,bot) == 0) { echo The trivia bot is off. Commands, Trivia, Disabled to reenable. }
  if ($isdir(" $+ $triv(dir) $+ ") == $false) { echo The trivia directory, $triv(dir) $+ , is invalid. }
  if ($triv(dir) == $null) { echo The trivia directory setting is blank, please set it to the desired directory. }
  if ($numl <= 0) { echo There appears to be no questions within the question file(s). }
}
alias get.find { if ($qfind($1-)) return $qfind($1-) }
;########################################################
;# Trivia command, related aliases.                     #
;########################################################
alias -l ifd { return $iif($1, $1, $2) }
;########################################################
;# Command processing.                                  #
;########################################################
alias pre { return $ifd(%command-prefix, !) }
alias commandtokens { return state;disable;enable;op;trivia;strivia;pause;resume;theme;themes;stats;stat;won;hof;top10;hofstreak;row;streak;hoftime;hoffast;hofwpm;wpm;server;record;records;champ;version;web;add;report;ping;triviaping;help;join;showteams;roundscores;answer;next;hint;!hint;words;last;vowels;repeat;hofscoreday;hoftimeday;hofstreakday;hofwpmday;hofscoreweek;hoftimeweek;hofstreakweek;hofwpmweek;hofscoremonth;hoftimemonth;hofstreakmonth;hofwpmmonth;hofscoreyear;hoftimeyear;hofstreakyear;hofwpmyear;rank;promotion }
alias optokens { return enable;disable;ban;unban;banned;ask;add;find }
alias stattokens { return score;time;streak;wpm }
alias timetokens { return day;week;month;year;total }
alias starttokens { return Unlimited;team }
alias ctok { return $findtok($eval($ $+ $gettok(commandtokens;optokens;stattokens;timetokens;starttokens,$ifd($2,1),59),2),$untrans($1),1,59) }
alias gtok { return $trivtran($gettok($eval($ $+ $gettok(commandtokens;optokens;stattokens;timetokens;starttokens,$ifd($2,1),59),2),$1,59)) }
alias rtok { return $gettok($eval($ $+ $gettok(commandtokens;optokens;stattokens;timetokens;starttokens,$ifd($2,1),59),2),$1,59) }
alias -l processcommand {
  var %command = $right($1,$calc(-1 * $len($pre)))
  var %ctok = $ctok(%command)
  award command %command $2-

  if (!%ctok) { return }
  if (%ctok == 1) { inform $msg.trivia.state }
  if (%ctok == 2) { opcommand disable $2- }
  if (%ctok == 3) { opcommand enable $2- }
  if (%ctok == 4) { opcommand $2- }
  if (($getset(status,bot) == 0) || ($trivia.banned)) { return }
  if (%ctok == 5) { if (!$isdis(28)) { trivia $2- } }
  if (%ctok == 6) { if ((!$isdis(29)) && ($trivia.on) && ((!$team) || ($nick isop $iden))) { strivia $iden $nick } }
  if (%ctok == 8) { if (!$isdis(5)) { trivia.pause 1 } }
  if (%ctok == 7) { if ((!$trivia.paused) && (!$isdis(5))) { trivia.pause } }
  if (%ctok isnum 9-10) { if (!$isdis(18)) { inform $msg.trivia.themes } }
  if (%ctok isnum 11-13) { processcommand.stats $ifd($2,$nick) $ifd($3,$unit.default) }
  if (%ctok isnum 14-15) { if (!$isdis(8)) { processcommand.hof $ifd($2,score) $ifd($3,$unit.default) } }
  if (%ctok isnum 16-18) { if (!$isdis(10)) { processcommand.hof streak $unit.default } }
  if (%ctok isnum 19-20) { if (!$isdis(9)) { processcommand.hof time $unit.default } }
  if (%ctok isnum 21-22) { if (!$isdis(11)) { processcommand.hof wpm $unit.default } }
  if (%ctok isnum 45-60) {
    var %regmatch = / $+ (?: $+ $gtok(14) $+ $chr(124) $+ $rtok(14) $+ ) $+ \s?( $+ $gtok(1,3) $+ $chr(124) $+ $gtok(2,3) $+ $chr(124) $+ $gtok(3,3) $+ $chr(124) $+ $gtok(4,3) $+ $chr(124) $+ $rtok(1,3) $+ $chr(124) $+ $rtok(2,3) $+ $chr(124) $+ $rtok(3,3) $+ $chr(124) $+ $rtok(4,3) $+ )\s?( $+ $gtok(1,4) $+ $chr(124) $+ $gtok(2,4) $+ $chr(124) $+ $gtok(3,4) $+ $chr(124) $+ $gtok(4,4) $+ $chr(124) $+ $rtok(1,4) $+ $chr(124) $+ $rtok(2,4) $+ $chr(124) $+ $rtok(3,4) $+ $chr(124) $+ $rtok(4,4) $+ )/
    if ($regex(%command, %regmatch)) processcommand.hof $iif($regml(1),score) $ifd($regml(2),$unit.default)
  }
  if (%ctok isnum 61-62) { if (!$isdis(30)) inform $msg.trivia.rank($ifd($2,$nick)) }
  if (%ctok == 23) { inform $server }
  if (%ctok isnum 24-25) { if (!$isdis(12)) { inform $msg.trivia.records } }
  if (%ctok == 26) { inform $msg.trivia.champ }
  if (%ctok == 27) { inform $msg.trivia.version }
  if (%ctok == 28) { inform $msg.trivia.web }
  if (%ctok isnum 29-30) { if (!$isdis(19)) { trivia.report %ctok $2- } }
  if (%ctok isnum 31-32) { if (!$isdis(17))  { do.ping } }
  if (%ctok == 33) { givehelp $2- }
  if (%ctok == 34) { if ($team) { $setteam($nick, $2) } }
  if (%ctok == 35) { if ($team) { inform $msg.trivia.showteams } }
  if (%ctok == 36) { inform $msg.trivia.roundscores }
  if (%ctok == 37) { if (($thget(answer)) && (!$isdis(16))) { inform $msg.question.answer } }
  if ((!$question.on) || ($trivia.paused)) { return }
  if (%ctok == 38) { if (($calc($question.time * 2) >= $lag(timedout)) && (!$isdis(15))) { trivx $chan } }
  if (%ctok isnum 39-43) { 
    if (($question.time >= $lag(hintallow))) {
      if (($getset(trivia, hintpause)) && ($getset(status, hintpause))) { hadd -u $+ $triv(hintpause) Trivia $+ $idenn Temp. $+ hinted. $+ $nick 1 }
      if (%ctok isnum 39-40) { if (!$isdis(22)) { give.hint $iden } }
      if (%ctok == 41) { if (!$isdis(25)) { inform $msg.hint.words } }
      if (%ctok == 42) { if (!$isdis(24)) { inform $msg.hint.last } }
      if (%ctok == 43) { if (!$isdis(23)) { inform $msg.hint.vowels } }
    }
  }
  if (%ctok == 44) { if (!$isdis(26)) { inform $$thget(trivq.say) } }
}
alias processcommand.hof {
  if (!$2) { var %unit = 5 }
  else { var %unit = $ctok($2,4) }
  var %by = $ctok($1,3)
  if ($getset(hide,$rtok(%by,3))) { return }
  if ((!%by) || (!%unit)) { inform $msg.trivia.hof.error | return }
  inform $msg.trivia.topstats($rtok(%by,3),$rtok(%unit,4))
}
alias -l processcommand.stats {
  if (!$2) { var %unit = 5 }
  else { var %unit = $ctok($2,4) }
  if (!%unit) { inform $msg.trivia.stats.error | return }
  if ($1 isnum) { sort score $unit.set(%unit) }
  if ($1 isnum 1 - $hof.size) { inform $msg.trivia.stats($hof($1,1),$unit.set(%unit)) }
  else { inform $msg.trivia.stats($iif($1,$1,$nick),$unit.set(%unit)) }
}
alias unit.default { return $rtok($ifd($getset(status,scoreby),5),4) }
alias unit.set { return $iif($rtok($1,4) != total,$rtok($1,4)) }
alias unit.prefix { return $iif($ifd($1,$unit.default) != total, $ifd($1,$unit.default)) }
;########################################################
;# !Op command structure.                               #
;########################################################
alias -l opcommand {
  var %otok = $ctok($1,2)
  if ($isdis(6)) { return }
  if ((%otok == 1) && (!$isdis(21)) && ($getset(status,bot) == 0) && ((!$2) || ($2 == $me))) { 
    setset status bot 1
    tsay $msg.trivia.enabled
  }
  if ((%otok == 2) && (!$isdis(21)) && ($getset(status,bot) == 1)  && ((!$2) || ($2 == $me))) {
    setset status bot 0
    tsay $msg.trivia.disabled
    strivia $iden $nick
  }
  if ((%otok == 3) && (!$isdis(20))) {
    if (!$2) { inform $msg.trivia.error.ban }
    else {
      tban $2
      inform $msg.trivia.op.ban
    }
  }
  if ((%otok == 4) && (!$isdis(7))) {
    if (!$2) { inform $msg.trivia.error.unban }
    else {
      tunban $2
      inform $msg.trivia.op.unban
    }
  }
  if (%otok == 5) { inform $msg.trivia.banlist }
  if ((%otok == 6) && (!$isdis(14))) {
    if ($2 !isnum) { inform $msg.trivia.error.badnum }
    else {
      ask $2
      inform $msg.trivia.op.ask
    }
  }
  if ((%otok == 7) && (!$isdis(27))) {
    if (!$2) { inform $msg.trivia.error.noquestion }
    elseif ($triv(delimiter) !isin $2-) { inform $msg.trivia.error.nodelim }
    else {
      add $2-
      inform $msg.trivia.op.added
    }
  }
  if ((%otok == 8) && (!$isdis(13))) {
    if (!$2) { inform $msg.trivia.error.nosearch }
    else inform $msg.trivia.op.find($2-)
  }
}
;########################################################
;# Trivia ON.                                           #
;########################################################
alias trivia {
  if (($trivia.banned) || ($trivia.on) || (!$trivchan)) { return }
  if ($trivia.paused) { 
    tsay $msg.trivia.pause
    return
  }
  trivia.flush
  if ($trivia.fail) return
  if ($hget(Trivia $+ $idenn)) { hfree Trivia $+ $idenn }
  hmake Trivia $+ $idenn 20
  if (($hget(Asked $+ $idenn)) && ($getset(status,keepask))) { hfree Asked $+ $idenn }
  if (!$hget(Asked $+ $idenn)) hmake Asked $+ $idenn 50
  trivia.defaultgame
  thset STime $time $date
  thset SUser $iif($nick,$nick,$me)
  if (($getset(Trivia,odefault) == unlimited) || (($ctok($1,5) == 1) && (!$isdis(2))) ) { thset Max Unlimited }
  if (($getset(Trivia,odefault) == team) || (($ctok($1,5) == 2) && (!$isdis(3)))) { thset team 1 }
  if (($1 isnum 1 - $numl) && (!$isdis(1))) { thset Max $int($1) }
  if ($1 == pi) { thset Max 3.14159265358979323846 }
  if ($1 == e) { thset Max 2.718281828459045 }
  if (!$isdis(18)) { trivia.themecheck $1- }
  if ($thget(team)) { trivia.teammode $2 }
  tsay $msg.trivia.started
  .timerq $+ $idenn 1 $ifd($lag(start),0) trivq $chan
  award roundstart $thget(Max)
}
;########################################################
;# Trivia OFF.                                          #
;########################################################
alias strivia {
  set -u3 %ident $1
  if ($team) { strivia.teammode }
  else if ($getset(status,bot)) {
    if ($getset(Var $+ $idenn, Lastwinner) == $2) { setset Var $+ $idenn Row 0 }
    tsay $msg.trivia.stopped
    if ($thget(Current) >= 10) { tsay $strivia.end($triv(Record)) }
    award RoundStop $thget(Current)
  }
  trivia.flush
}
alias strivia.end {
  if ($1 == 1) { return $msg.trivia.hof }
  elseif ($1 == 2) { return $msg.trivia.topstats(streak) }
  elseif ($1 == 3) { return $msg.trivia.topstats(time) }
  elseif ($1 == 4) { return $msg.trivia.topstats(wpm) }
  elseif ($1 == 5) { return $msg.trivia.champ }
  elseif ($1 == 6) { return $msg.trivia.web }
  elseif ($1 == 7) { return $msg.trivia.roundscores }
  return $msg.trivia.records
}
;########################################################
;# STATUS CLEARING.                                     #
;########################################################
alias -l trivia.flush {
  if (!$getset(status,keepask)) if ($hget(Asked $+ $idenn)) { hfree Asked $+ $idenn }
  if ($hget(Trivia $+ $idenn)) { hfree Trivia $+ $idenn }
  trivia.timersoff
  unset %cache.nick
  unset %cache.line
}
alias -l trivia.timersoff {
  .timer* $+ $idenn off
}
;########################################################
;# DEFAULT setup.                                       #
;########################################################
alias trivia.defaultgame {
  thset File questions.txt
  thset Scores $scoresfil
  if ($tchan($trivchan, 4)) { thset Scores $tchan($trivchan, 4) }
  if ($tchan($trivchan, 5)) {
    thset File
    var %i = 5
    while ($tchan($trivchan, %i)) {
      thset File $thget(file) $+ ; $+ $tchan($trivchan, %i)
      inc %i
    }
  }
  thset Max $triv(default)
  thset PPQ $iif($getset(Trivia,PPQ) != $null,$getset(Trivia,PPQ),1)
  thset DPH $iif($getset(Trivia,DPH) != $null,$getset(Trivia,DPH),0)
  thset RRS $iif($getset(Status,RRS) != $null,$getset(Status,RRS),0)
  thset guess $iif($getset(trivia,limitguess) != $null,$getset(trivia,limitguess),0)
  thset lagstart $iif($getset(lag, start) != $null, $getset(lag, start), 0)
  thset laganswered $iif($getset(lag, answered) != $null, $getset(lag, answered), 0)
  thset lagtimedout $iif($getset(lag, timedout) != $null, $getset(lag, timedout), 0)
  thset laghint $iif($getset(lag, hint) != $null, $getset(lag, hint), 0)
  thset lagtimed $iif($getset(lag, timed) != $null, $getset(lag, timed), 0)
  thset laghintallow $iif($getset(lag, hintallow) != $null, $getset(lag, hintallow), 0)
  thset lagbetweenhint $iif($getset(lag, betweenhint) != $null, $getset(lag, betweenhint), 0)
}
;########################################################
;# THEMED start.                                        #
;########################################################
alias trivia.themecheck {
  var %i = 1
  while ($getset(triviamode $+ %i, Name)) {
    if ($1 == $getset(triviamode $+ %i, Name)) {
      trivia.themestart %i
      if (($2 isnum) && ($2 <= $numq) && ($2 > 0) && (!$isdis(4))) { thset Max $int($2) }
      return
    }
    inc %i
  }
}
alias trivia.themestart {
  var %j = $setini(triviamode $+ $1,0)
  while (%j >= 1) {
    var %mode = $setini(triviamode $+ $1, %j)
    thset %mode $getset(triviamode $+ $1, %mode)
    dec %j
  }
}
;########################################################
;# TEAM setup.                                          #
;########################################################
alias -l trivia.teammode {
  thset Score1 0
  thset Score2 0
  thset Score3 0
  thset Score4 0
  if ($1 isnum 1 - $numq) { thset Max $int($1) }
  else { thset Max $triv(dteam) }
  tsay $msg.team.start
}
alias -l strivia.teammode {
  var %s1 = $thget(Score1)
  var %s2 = $thget(Score2)
  var %s3 = $thget(Score3)
  var %s4 = $thget(Score4)
  if ($getset(team,4-team)) {
    if ((%s1 > %s2) && (%s1 > %s3) && (%s1 > %s3)) { tsay $msg.team.over($te(1).victory) }
    elseif ((%s2 > %s1) && (%s2 > %s3) && (%s2 > %s4)) { tsay $msg.team.over($te(2).victory) }
    elseif ((%s3 > %s1) && (%s3 > %s2) && (%s3 > %s4)) { tsay $msg.team.over($te(3).victory) }
    elseif ((%s4 > %s1) && (%s4 > %s2) && (%s4 > %s3)) { tsay $msg.team.over($te(4).victory) }
    else { tsay $msg.team.over($te(0).victory) }
  }
  else {
    if (%s1 > %s2) { tsay $msg.team.over($te(1).victory) }
    elseif (%s1 < %s2) { tsay $msg.team.over($te(2).victory) }
    else { tsay $msg.team.over($te(0).victory) }
  }
  if ($getset(status, noshowt)) { tsay $msg.trivia.showteams }
}
alias -l setteam {
  if (($thget(Current) >= $getset(Team, JoinBefore)) && ($getset(Team, JoinBeforeOn) == 1)) { 
    inform $msg.team.joinover
    return
  }
  if ($2 isnum 1 - 4) {
    if ($thget(Team. $+ $nick) == $2) { inform $msg.team.alreadyon }
    else { tsay $msg.team.add($getset(team,$2), $nick) }
    thset $eval(Team. $+ $nick,1) $2
  }
}
;########################################################
;# Trivia QUESTION.                                     #
;########################################################
alias trivq {
  set -u3 %ident $1
  if (!$hget(Trivia $+ $idenn)) { return }
  if ($trivia.fail) return
  thset Current $calc($thget(Current) + 1)
  if (($team) && ($thget(Current) == $getset(Team, JoinBefore)) && ($getset(Team, JoinBeforeOn) == 1)) { tsay $msg.team.joinbefore }
  create.question
  .timerend $+ $idenn 1 $lag(timedout) trivx $iden
  trivia.startautohint
  setset Var $+ $idenn Asked $calc($getset(Var $+ $idenn,Asked) + 1)
  thset Start $ticks
  trivia.sayquestion $right($thget(catq),-1)
  if ($getset(status,echo) == 1) { echo $iden $msg.trivia.echoanswer }
  if ($getset(status,answers)) { tsay $msg.hint.space }
  award Question $lag(timedout)
}
alias -l create.question {
  while ($thget(Ask1)) {
    var %qread = $qread($thget(Ask1))
    ask.deleteitem 1
    thset Catq
    if (%qread) return
  }
  var %temp.ask = $trivia.getq
  thset Catq $qcat(%temp.ask)
  hadd Asked $+ $idenn %temp.ask %temp.ask
}
alias -l trivia.getq {
  unset %ask
  while ((!%ask) || ($hget(Asked $+ $idenn, %ask))) {
    if ($hget(Asked $+ $idenn,0).item >= $numq) { hdel -w Asked $+ $idenn * }
    var %ask = $rand(1, $numq)
    if (!$qread(%ask)) { hadd Asked $+ $idenn %ask NA }
  }
  thset Asking %ask
  return %ask
}
;########################################################
;# QUESTION MISC.                                       #
;########################################################
alias qfile {
  if (($1 !isnum) || ($1 < 1)) return
  if (($thget(File)) && ($gettok($thget(File),$1,$asc(;)))) return $shortfn(" $+ $triv(dir) $+ \ $+ $gettok($thget(File),$1,$asc(;)) $+ ")
  if ($tchan($ifd($trivchan,1),$calc(4 + $1))) return $shortfn(" $+ $triv(dir) $+ \ $+ $tchan($ifd($trivchan,1),$calc(4 + $1)) $+ ")
}

alias numl { return $calc($numq - $numnonq) }
alias numq {
  if ($1 isnum) { return $lines($qfile($1)) }
  var %i = 0, %j = 1
  while ($qfile(%j)) {
    if (!$eval(% $+ numq $+ $qfile(%j),2)) { set -u600 % $+ numq $+ $qfile(%j) $lines($qfile(%j)) }
    %i = $calc(%i + $eval(% $+ numq $+ $qfile(%j),2))
    inc %j
  }
  return %i
}
alias qcat {
  if ($getset(status,nocat) == 1) return
  var %nf = $numfile($1)
  return $read($gettok(%nf,1,$asc(;)), wnt, #*, $gettok(%nf,2,$asc(;)))
}
alias numnonq {
  window -h @numnonq
  var %j = 1, %nonqcount = 0
  while ($qfile(%j)) {
    if ($eval(% $+ nonq $+ $qfile(%j),2)) { var %nonqcount = $calc(%numqcount + $eval(% $+ nonq $+ $qfile(%j),2)) }
    else {
      if ($exists($qfile(%j))) {
        filter -fwgx $qfile(%j) @numnonq /\ $+ $triv(delimiter) $+ /
        var %nonqcount = $calc(%nonqcount + $filtered)
        set -u600 % $+ nonq $+ $qfile(%j) $filtered
      }
    }
    inc %j
  }
  window -c @numnonq
  return %nonqcount
}
alias numcat {
  if ($window(@categories)) { window -c @categories }
  window -eh @categories
  var %j = 1
  while ($qfile(%j)) {
    if ($exists($qfile(%j))) filter -fw $qfile(%j) @categories #*
    inc %j
  }
  .timer 1 0 window -c @categories
  return $line(@categories,0)
}
alias numfile {
  var %i = 0, %j = 1, %l
  while ($qfile(%j)) {
    %l = %i
    inc %i $numq(%j)
    if ($1 isnum %l - %i) { return $qfile(%j) $+ ; $+ $calc($1 - %l) }
    if (($1 !isnum) && ($read($qfile(%j), nwt, $+(*,$1-,*), 1))) return $qfile(%j) $+ ; $+ $readn
    inc %j
  }
}
alias -l qfind {
  var %i = 0, %j = 1, %l
  if ($1 == $null) { return }
  while ($qfile(%j)) {
    if ($read($qfile(%j), nwt, $+(*,$1-,*), 1)) return $read($qfile(%j),$readn) - $qfile(%j) - $readn
    inc %j
  }
}
alias qread {
  var %nf = $numfile($1)
  var %delim = \ $+ $triv(delimiter)
  if ($regex($iif($1 isnum,$read($gettok(%nf,1,$asc(;)), nt, $gettok(%nf,2,$asc(;))),$1-),/^([^ $+ %delim $+ ]+)([ $+ %delim $+ ].*)$/)) {
    thset tok1 $regml(1)
    if ($regex($regml(2), /[ $+ %delim $+ ]([^ $+ %delim $+ ]+)/g)) {
      thset numfile %nf
      thset tokq $calc($regml(0) + 1)
      var %i = 1
      while (%i <= $regml(0)) {
        thset tok $+ $calc(%i + 1) $regml(%i)
        inc %i
      }
    }
  }
  else {
    if ($1 == scramble) { thset temp.bonus S }
    if ($1 == reverse) { thset temp.bonus R }
    if ($1 == shotgun) { thset temp.bonus G }
    return $false
  }
  return $true
}
alias -l ask.deleteitem {
  hdel Trivia $+ $idenn Ask $+ $$1
  var %i = $1
  while ($thget(Ask $+ $calc(%i + 1))) {
    thset Ask $+ %i $thget(Ask $+ $calc(%i + 1))
    inc %i
  }
  if ($thget(Ask $+ %i)) { hdel Trivia $+ $idenn Ask $+ %i }
}
alias -l trivia.startautohint { if ($getset(status,autohint) == 1) { .timerhint $+ $idenn 1 $lag(hint) trivia.autohint $iden } }
alias -l trivia.autohint {
  give.hint $1
  if ($triv(numhint) > 1) { .timerhint $+ $idenn $calc($triv(numhint) - 1) $lag(betweenhint) give.hint $1 }
}
alias decheater {
  if ($getset(status,nodecheater) == 1) return $1-
  var %t.rt = $1-, %i = $count($1-,$chr(32)), %t.ps
  while (%i > 0) {
    if ($rand(1,2) == 1) {
      %t.ps = $pos($1-,$chr(32),%i)
      %t.rt = $+($left(%t.rt, $calc(%t.ps - 1)), $chr(160),$right(%t.rt,$calc((%t.ps) * -1)))
    }
    dec %i
  }
  return %t.rt
}
;########################################################
;#  QUESTION over.                                      #
;########################################################
alias trivx {
  set -u3 %ident $1
  if (!$hget(Trivia $+ $idenn)) { return }
  if (!$2) {
    if (($getset(status,showanswer)) && (!$getset(status,shownone))) { tsay $iif($thget(temp.type) == T, $msg.answer.timeout.total, $iif($thget(temp.type) == P, $msg.answer.timeout.pick, $msg.answer.timeout)) }
    else { tsay $msg.answer.timeout2 }
    setset Var $+ $idenn Row 0
    thset Unanswered $calc($thget(Unanswered) + 1)
    award NoAnswer $trivq.answer
  }
  trivia.timersoff
  if ($window($total.win)) { window -c $total.win }
  thset Answer $trivq.answer
  if ($hget(Trivia $+ $idenn)) hdel -w Trivia $+ $idenn Temp.*
  if ($hget(Trivia $+ $idenn)) hdel -w Trivia $+ $idenn tok*
  if (($nick) && ($getvar($nick,score) >= $triv(reset)) && ($getset(status,champ) == 1)) { trivia.newchamp }
  if ((($team) && ($thget(Score $+ $isteam($nick)) > $calc($thget(Max)/2))) || (($getset(status,emptyoff)) && ($nick($iden,0) <= 1)) || (($getset(status, naoff) == 1) && ($thget(unanswered) >= $triv(naoff))) || (($thget(Max) != unlimited) && ($thget(Current) >= $thget(Max)))) {
    strivia $1
    if (($getset(status, emptyoff) == 1) && ($nick($iden,0) <= 1)) tsay $msg.trivia.emptyoff 
    if (($getset(status, naoff) == 1) && ($thget(Unanswered) >= $triv(naoff))) tsay $msg.trivia.unactive
    return
  }
  .timerq $+ $idenn 1 $iif($1, $lag(answered), $lag(timed)) trivq $iden
}
alias -l trivia.processscore {
  if ($getset(Var $+ $idenn, Lastwinner) == $nick) { setset Var $+ $idenn Row $calc($getset(Var $+ $idenn, Row) + $ifd($2,1)) }
  else { setset Var $+ $idenn Row $ifd($2,1) }
  setset Var $+ $idenn Wins $calc($getset(Var $+ $idenn,Wins) + $ifd($2,1))
  setset Var $+ $idenn Lastwinner $nick
  setvar $nick Lastwin $date
  thset WPM $calc(($len($1) * 60) / ($thget(Time) * 5))
  if (($thget(WPM) > $realvar($nick,wpm)) || (!$realvar($nick,wpm))) { setvar $nick wpm $thget(WPM) }
  if (($getset(Var $+ $idenn, Row) > $realvar($nick,streak)) || (!$realvar($nick,streak))) { setvar $nick Streak $getset(Var $+ $idenn, Row) }
  if (($thget(Time) < $realvar($nick,time)) || (!$realvar($nick,time))) { setvar $nick Time $thget(Time) }
  thset temp.cng $calc(($thget(PPQ) * $ifd($2,1)) - ($thget(DPH) * $max.hinted))
  if ($thget(temp.points) != $null) { thset temp.cng $calc(($thget(temp.points) - ($max.hinted * $thget(temp.hintreduction))) * $ifd($2,1)) }
  thset temp.mrank $getmrank($nick)
  thset temp.rank $getrank($nick,$unit.default,$thget(temp.cng))
  thset temp.newrank $calc($thget(temp.rank) - %uprank)
  setvar $nick Score $calc($realvar($nick, Score) + $thget(temp.cng))
  setvar $nick Answered $calc($realvar($nick, Answered) + $iif($2 > 0,$2,1))
  thset $eval(Score. $+ $nick,1) $calc($thget($eval(Score. $+ $nick,1)) + $thget(temp.cng))
  process.scores.time $nick $thget(temp.cng) $getset(Var $+ $idenn, Row) $thget(Time) $thget(WPM)
}
alias trivia.processawards {
  if (%uprank) award uprank $tranord($thget(temp.newrank))
  if ($getmrank($nick) != $thget(temp.mrank)) award promotion $getmrank($nick)
  award score $user.score($nick)
  award row $getset(Var $+ $idenn, Row)
  award time $thget(Time)
  award wpm $thget(WPM)
  award answered $thget(Time)
}
alias -l answered {
  thset Time $question.time
  if (($1 == $null) || ($trivia.banned) || ($trivia.negationcheck) || (($team) && (!$isteam($nick)))) { return }
  $trivia.processscore($1,$2) 
  if (($getset(build,instabuild)) && ($getset(build,instabuild) // $getset(Var $+ $idenn,Wins))) { htmltrigger $iden }
  tsay $msg.answer.correct($getset(status,tradwin),$thget(WPM),$thget(temp.newrank),$iif(%uprank,$thget(temp.rank)))
  if ($team) {
    thset Score $+ $isteam($nick) $calc($thget( Score $+ $isteam($nick)) + 1)
    tsay $msg.team.score
  }
  trivia.processawards
  if ($thget(RRS)) { tsay $msg.trivia.roundscores }
  hdel Trivia $+ $idenn Unanswered
  if ($total.over) { tsay $msg.trivia.totalover }
  if (($thget(temp.type) != T) || ($total.over)) { trivx $chan $true }
}
alias -l trivq.answer { return $iif(((($thget(temp.type) == T) || ($getset(status,showmatched))) && ($thget(temp.matched))), $thget(temp.matched),$tok(2)) }
;########################################################
;# QUESTION Typing.                                     #
;########################################################
alias -l trivia.sayquestion {
  if ($regex($tok(1), /^([^:]+):\s?(.+)|((?i)Scramble|Uword)$/)) {
    thset temp.mode $regml(1)
    thset temp.rest $regml(2)
    if (($gettok($thget(temp.mode),1,44) isnum) && ($getset(status,nobonus) != 1)) {
      thset temp.points $gettok($thget(temp.mode),1,44)
      if ($gettok($thget(temp.mode),2,44) isnum) { thset temp.hintreduction $gettok($thget(temp.mode),2,44) }
      var %tq $msg.question.points($1-,$thget(temp.rest))
    }
    elseif ($regex($lower($thget(temp.mode)), /pick\s(\d+)/)) {
      var %tq $msg.question.standard($1-,$thget(temp.rest))
      thset temp.type P
      thset temp.pick $regml(1)
    }
    elseif (Multi == $thget(temp.mode)) {
      var %tq $msg.question.multi($1-)
      thset temp.type M
    }
    elseif (Total == $thget(temp.mode)) { 
      var %tq $msg.question.total($1-)
      thset temp.type T
      total.init
    }
    elseif (Scramble == $thget(temp.mode)) || (UWord == $thget(temp.mode)) {
      var %tq $msg.question.scramble($1-,$thget(temp.rest))
      thset temp.type S
    }
  }
  if (!%tq) { var %tq $msg.question.standard($1-) }
  thset trivq.say $iif($getset(status,nosaycurrent) != 1, $e1($thget(Current)) $+ $e2(.)) $decheater(%tq)
  tsay $thget(trivq.say)
}
;########################################################
;# TOTAL question type, control.                        #
;########################################################
alias unfix {
  var %i = 2
  while (%i <= $tokq) {
    if ($1- == $fix($tok(%i))) { return $tok(%i) }
    inc %i
  }
}
alias total.win { return @total $+ $idenn }
alias total.init {
  var %i = 2
  if ($window($total.win)) { window -c $total.win }
  window -h $total.win
  while (%i <= $tokq) {
    aline -n $total.win $tok(%i)
    inc %i
  }
}
alias total.left { return $line($total.win,0) }
alias total.is { return $fline($total.win,$1-,1) }
alias total.rem { dline $total.win $total.is($1-) }
alias total.over { return $iif(!$line($total.win,0) && ($thget(temp.type) == T), 1) }
alias gettotalremain {
  var %i = 1, %totalremain
  while (%i <= $line($total.win,0)) {
    %totalremain = $left(%totalremain,850) $+ $iif(%totalremain != $null,$chr(44)) $line($total.win,%i)
    inc %i
  }
  return %totalremain
}
;########################################################
;# Trivia block answer.                                 #
;########################################################
alias -l trivia.negationcheck {
  if ($thuser(Hinted)) {
    inform $msg.trivia.hintpaused
    return $true
  }
  if (($getset(status,limitguess)) && ($thget(temp.type) != T) && ($ifd($thuser(Guess),0) >= $thget(guess))) {
    inform $msg.trivia.guessed($thuser(guess))
    return $true
  }  
}
;########################################################
;# Guess processing.                                    #
;########################################################
alias -l processguess {
  if ($trivia.paused) { return }
  var %pick = $regex($lower($fix($1-)), $trivia.pattern)
  thuset Guess $calc($thuser(guess) + 1)
  if (%pick == 0) { return }
  var %answered, %matched = $regml(1), %i = 1
  thset temp.match $regml(0)
  while ($thget(temp.match) >= %i) {
    thset temp.match. $+ %i $regml(%i)
    inc %i
  }
  if (($thget(temp.type) == P) || ($thget(temp.type) == T)) {
    var %j = 1, %k, %f, %numb.correct = 0
    while (%j <= $thget(temp.match)) {
      var %k = %j, %f = $true
      while (%k >= 1) {
        if ((%j != %k) && ($thget(temp.match. $+ %j) == $thget(temp.match. $+ %k))) { %f = $false }
        dec %k
      }
      if ($thget(temp.type) == T) {
        if ($total.is($unfix($thget(temp.match. $+ %j)))) {
          total.rem $unfix($thget(temp.match. $+ %j))
          inc %numb.correct
        }
        else { %f = $false }
      }
      if (%f) %answered = %answered $unfix($thget(temp.match. $+ %j))
      else { dec %pick }
      inc %j
    }
    if (($thget(temp.type) == P) && (%pick < $thget(temp.pick))) return
    if (($thget(temp.type) == T) && (%numb.correct == 0)) return
  }
  else { var %answered = $unfix($thget(temp.match. $+ 1)) }
  thset temp.matched %answered
  $answered(%answered,%numb.correct)
}
alias fix {
  if ($getset(status,nospellfix)) { return $lower($strip($1-)) }
  var %temp.fix = $lower($strip($1-))
  .echo -q $regsub(%temp.fix,/([^\s]+)s(?=(\s|$))/g, \1, %temp.fix)
  .echo -q $regsub(%temp.fix,/(?<=^|\s)(?:the|an|a)\s([^\s]+)/g, \1, %temp.fix)
  %temp.fix = $remove(%temp.fix,',-,!,`,.,’,´,?,%,$chr(36),$chr(44))
  %temp.fix = $replace(%temp.fix,À,A,Á,A,Â,A,Ã,A,Ä,A,Å,A,Æ,AE,Ç,C,È,E,É,E,Ê,E,Ë,E,Ì,I,Í,I,Î,I,Ï,I,Ð,D,Ñ,N,Ò,O,Ó,O,Ô,O,Õ,O,Ö,O,Ø,O,Ù,U,Ú,U,Û,U,Ü,U,Ý,Y)
  %temp.fix = $replace(%temp.fix,ß,B,à,a,á,a,â,a,ã,a,ä,a,å,a,æ,ae,ç,c,è,e,é,e,ê,e,ë,e,ì,i,í,i,î,i,ï,i,ð,o,ñ,n,ò,o,ó,o,ô,o,õ,o,ö,o,ù,u,ú,u,û,u,ü,u,ý,y,ÿ,y)
  return $replace(%temp.fix,kn,n,y,i,k,c,x,c,q,c,e,a,ah,a,u,o,ph,f,m,n,ll,l,aa,a,oo,o,cc,c,z,s)
}
alias trivia.pattern {
  if ($thget(temp.pattern)) { return $thget(temp.pattern) }
  var %i 2, %max = $iif($thget(temp.type) == M, 2, $tokq), %pattern = $chr(40)
  while (%i <= %max) {
    if (%i != 2) { %pattern = %pattern $+ $chr(124) }
    %pattern = %pattern $+ $lower($fix($tok(%i)))
    inc %i
  }
  %pattern = %pattern $+ $chr(41)
  if (($thget(temp.type) != P) && ($thget(temp.type) != T)) {
    if ($getset(status, exactmatch)) { %pattern = ^ $+ %pattern $+ $ }
    elseif ($getset(status, nomid)) { %pattern = ^ $+ %pattern $+ (?=\s|$) $+ $chr(124) $+ (?:^|\s) $+ %pattern $+ $ }
    else { %pattern = (?:^|\s) $+ %pattern $+ (?=\s|$) }
  }
  else { %pattern = (?:^|\s) $+ %pattern $+ (?=\s|$) }
  %pattern = / $+ %pattern $+ /g
  thset temp.pattern %pattern
  return %pattern
}
;########################################################
;# PAUSE/RESUME processing.                             #
;########################################################
alias trivia.paused { if (($thget(paused)) && ($hget(Trivia $+ $idenn))) { return $true } }
alias trivia.pause {
  if ($1) {
    if ($trivia.paused) {
      .timerq $+ $idenn -r
      .timerend $+ $idenn -r
      .timerhint $+ $idenn -r
      thset paused 0
      tsay $msg.trivia.resume
    }
    else if (($thget(paused) != 1) && (!$timer(q $+ $idenn)) && (!$timer(end $+ $idenn)) && (!$timer(hint $+ $idenn)) && ($hget(Trivia $+ $idenn))) trivx
  }
  else {
    .timerq $+ $idenn -p
    .timerend $+ $idenn -p
    .timerhint $+ $idenn -p
    thset paused 1
    tsay $msg.trivia.pause
  }
}
;########################################################
;# Hint setup.                                          #
;########################################################
alias -l give.hint {
  set -u3 %ident $1
  if ((!$hget(Trivia $+ $idenn)) || ($max.hinted >= $triv(numhint))) { return }
  if (!$nick) {
    thset Temp.Hints $calc($thget(Temp.Hints) + 1)
    var %hintpercent = $calc($triv(perchint) * $thget(Temp.Hints))
    var %nexthintpercent = $calc($triv(perchint) * ($thget(Temp.Hints) + 1))
    if ($thget(Temp.Skip.Hint $+ $thget(Temp.Hints)) == 1) { return }
    if ($hintrepnum(%hintpercent) == $hintrepnum(%nexthintpercent)) thset Temp.Skip.Hint $+ $calc($thget(Temp.Hints) + 1) 1
    if ($thget(Temp.Hints) == 1) tsay $eval($ $+ msg.hint. $+ $hintfirst $+ ( %hintpercent ),2)
    else tsay $msg.hint.hint(%hintpercent)
  }
  else {
    thuset Hint $calc($iif($calc($thget(Temp.Hints) + 0) > $calc($thuser(hint) + 0),$thget(Temp.Hints),$thuser(hint)) + 1)
    if ($thget(Temp.Skip.Hint $+ $thuser(hint)) == 1) { return }
    var %sayhint = $msg.hint.hint($calc($triv(perchint) * $thuser(hint)))
    if (msg * iswm %respond) {
      tsay %sayhint
      thset Temp.Skip.Hint $+ $thuser(hint) 1
    }
    else inform %sayhint
  }
  award Hint $thget(Temp.Hints)
}
alias -l hintfirst {
  var %hintfirst = $getset(trivia, firsthint)
  if (!%hintfirst) return hint
  if (%hintfirst == 1) return last
  if (%hintfirst == 2) return vowels
  if (%hintfirst == 3) return $gettok(hint.last.vowels.space.scramble, $rand(1,5), $asc(.))
}
alias -l get.hint {
  if (($thget(temp.type) == T) || ($thget(Temp.type) == M)) { return }
  if (($thget(temp.rhint. $+ $2)) && ($1 == hint)) { return $thget(temp.rhint. $+ $2) }
  var %perhint = $iif($2,$2,$triv(perchint)), %hintc
  if ($1 == words) { return $numtok($trivq.answer,32) }
  if ($1 == space) { return $deletter($trivq.answer) }
  if ($1 == last) { return $right($trivq.answer,1) }
  if ($1 == vowels) { return $iif($regsub($trivq.answer, /([^aeiouAEIOU\s])/g, $trivchar, %hintc), %hintc, $trivq.answer) }
  if ($1 == scramble) { return $scramble($trivq.answer) }
  if ($getset(status, plot)) { return $plot(%perhint, $trivq.answer)) }
  if ($getset(status, scatter)) {
    thset temp.rhint. $+ $2 $scatter(%perhint, $trivq.answer)
    return $thget(temp.rhint. $+ $2)
  }
  else { return $standard(%perhint, $trivq.answer) }
}
alias -l trivchar { return $iif($chr($triv(ch)),$chr($triv(ch)),_) }
alias -l nonpunct { return /([^';:"\s\xA0\,\?\<\>\|\\\/\[\]\!\@\#\$\%\^\&\*\(\)\{\}\-])/g }
alias -l deletter {
  var %hintc
  .echo -q $regsub($1-, $nonpunct, $trivchar, %hintc)
  return %hintc
}
alias -l hintrepnum { return $int($calc(($len($trivq.answer) / 100) * $1 + 1)) }
alias -l standard {
  var %in = $replace($2-, $chr(32), $chr(160)), %break = $hintrepnum($1)
  return $replace($left(%in, %break) $+ $iif($getset(status,cross) == 1, $deletter($right(%in, $calc(-1 * %break)))), $chr(160), $chr(32))
}
alias -l scramble {
  tokenize 32 $1-
  var %i = 1, %temp.smbl
  while (%i <= $0) {
    var %word = $eval($+($,%i),2)
    while (%word != $null) { var %rand = $rand(1, $len(%word)), %temp.smbl = %temp.smbl $+ $mid(%word, %rand, 1), %word = $left(%word, $calc(%rand - 1)) $+ $right(%word, $calc(-1 * %rand)) }
    %temp.smbl = %temp.smbl $+ ;
    inc %i
  }
  return $lower($replace(%temp.smbl,;,$chr(32)))
}
alias -l reverse {
  var %i = $len($1-),%reversed, %space
  while (%i >= 1) {
    if (!%space) { %reversed = %reversed $+ $mid($replace($1-,$chr(32),$chr(160)),%i,1) }
    %space = $false
    if ($chr($mid($1-,%i,1)) == 32) { %space = $true }
    dec %i
  }
  return $replace(%reversed,$chr(160),$chr(32))
}
alias scatter {
  var %hintc = $2-
  if ($thget(temp.scattermask)) var %schint = $thget(temp.scattermask)
  else {
    var %schint
    !.echo -q $regsub(%hintc,$nonpunct,@,%schint)
  }
  var %rnum = $int($calc(($regex(%schint,/@/g) / 100) * (100 - $1)))
  while (%rnum >= 0) {
    if ($regex(%schint,/(@)/g)) !.echo -q $regsub(%hintc,/(?<=^.{ $+ $calc($regml($rand(1,$regml(0))).pos - 1) $+ })./,@, %hintc)
    dec %rnum
  }
  thset temp.scattermask %hintc
  return $replace(%hintc,@,$trivchar)
}
alias plot {
  if ($1 >= 100) { return $2- }
  var %hintc, %i = 1, %j = 0, %rnum = $int($calc(($regsub($2-,$nonpunct,@,%hintc) / 100) * $1))
  while (%i <= %rnum) {
    if ($regex(%hintc, /(?:^|\s|\xA0)[^\s\xA0@]{ $+ %j $+ }(@)/g) == 1) { inc %j }
    %hintc = $+($left(%hintc,$calc($regml(1).pos - 1)), $mid($2-,$regml(1).pos,1),$right(%hintc,$calc($regml(1).pos * -1)))
    inc %i
  }
  return $replace(%hintc,@,$trivchar)
}
alias startandrandom {
  if ($1 > 0) return $replace($hget(hints,$1),@,$trivchar)
  if ($hget(hints)) hfree hints
  var %hintc = $2-, %onhint = 10, %f
  while (%hintc) {
    var %w = $gettok(%hintc,1,32), %rt = $regsub(%w,$nonpunct,@,%f), %hintc = $gettok(%hintc,2-,32), %k = 1
    while (%k <= %onhint) {
      hadd -m hints %k $hget(hints,%k) %f
      if ($regex(%w,$nonpunct) > 1) !.echo -q $regsub(%w, /(?<=^.{ $+ $iif(%k == 1, 0, $calc($regml($rand(1,$regml(0))).pos - 1)) $+ })(.)/,@, %w) $regsub(%f, /(?<=^.{ $+ $calc($regml(1).pos - 1) $+ })./,$regml(1), %f)
      inc %k
    }
  }
}

;########################################################
;# CHAMP aliases.                                       #
;########################################################
alias -l trivia.newchamp {
  .rename $scoresfil $asctime(yymmddhhmmss) $+ .bak
  setset Champ $calc($setini(Champ, 0) + 1) $nick
  tsay $msg.trivia.victory($nick)
  trivia.flush
  haltdef
}
;########################################################
;# HALL Of FAME, RANKING.                               #
;########################################################
alias sort {
  if (!$exists($scoresfil)) { return }
  window -h $twin
  filter -fwcgut $+ $iif($1 != time,e) [ $$gttok($iif($2 != total,$2) $+ $1) $asc(;) ] $scoresfil $twin $iif(($2) && ($2 != total),/^ $+ $str([^;]*;,$calc($$gttok($2)-1)) $+ $eval($ $+ get. $+ $2,2) $+ ;.* $+ /,/.*/)
}
alias -l msg.trivia.topx {
  if ($calc($3 - $2) > 20) { return $msg.trivia.error.topx }
  sort $1 $unit.default
  var %temp.by = $gttok($1), %i = $2, %temp.ten = $e2(Places) $e1($2) $e2(to) $e1($3) $+ $e2(:)
  while (%i <= $3) {
    var %temp.ten = %temp.ten $e1($iif($hof(%i,1),$hof(%i,1) - $hof(%i,%temp.by)) $+ $e2(;)
    inc %i
  }
  return %temp.ten
}
alias -l msg.trivia.topstats {
  sort $1 $iif($2 != total, $2)
  var %temp.by = $gttok($iif($2 != total, $2) $+ $1), %temp.ten = $e1($hof(1,1)) $e2(has the best $1 of) $e1($hof(1,%temp.by)) $iif($2 != total,$e2( for the $2 )) $+ $e2(;)
  var %i = 2
  while (%i <= $iif(%topnum,%topnum,10)) {
    var %temp.ten = %temp.ten $iif($hof(%i,1),$e1($hof(%i,1)) $e2(-) $e1($hof(%i,%temp.by)) $+ $e2(;))
    inc %i
  }
  return $iif(!$hof(1,1),$e2(No elements in the hall of fame.),%temp.ten)
}
alias topnum { set %topnum $1 }
alias -l twin { return @trivia $+ $scoresfil }
alias -l getrank {
  sort score $iif($2 != total, $2)
  set -u0 %getrank $fline($twin,$+($1,;*),1)
  if (!%getrank) { return $hof.size }
  var %score = $getvar($hof(%getrank,1),$iif($2 != total, $2) $+ score)
  while (%score == $getvar($hof(%getrank,1),$iif($2 != total, $2) $+ score)) { dec %getrank }
  inc %getrank
  if (%getrank != 1) {
    set -u0 %getnextrank $calc(%getrank - 1)
    set -u0 %getnextrankuser $hof(%getnextrank,1)
    set -u0 %getnextrankat $user.score(%getnextrankuser,$2)
  }
  unset %uprank
  if (!$3) { return %getrank }
  set -u0 %uprank 1
  var %upscore = $calc(%score + $3)
  while ((%upscore >= $getvar($hof($calc(%getrank - %uprank),1),$iif($2 != total, $2) $+ score)) && (%getrank >= %uprank)) {
    inc %uprank
  }
  dec %uprank
  return %getrank
}
alias mrankon {
  if (!$getset(trivia, ranks)) { return $false }
  if ($setini(ranks,0) == 0) { return $false }
  else { return $true }
}
alias getmrank {
  if (!$getset(trivia, ranks)) { return }
  var %score = $user.score($1,$2), %i = $setini(ranks,0), %te = 0, %temax = 0
  while (%i >= 1) {
    %te = $setini(ranks,%i)
    if ((%score >= %te) && (%te >= %temax)) { %temax = %te }
    dec %i
  }
  return $getset(ranks,%temax)
}
alias getnextmrank {
  var %next.rank = $getnextmrankat($1)
  return $iif(%next.rank, $getset(ranks,%next.rank), None)
}
alias getnextmrankat {
  if (!$getset(trivia, ranks)) { return }
  var %score = $1, %i = $setini(ranks,0), %te = 0, %temax = 0, %by = 0
  while (%i >= 1) {
    %te = $setini(ranks,%i)
    if ((%score <= %te) && ((!%by) || ($calc(%score + %by) >= %te))) {
      %temax = %te
      %by = $calc(%te - %score)
    }
    dec %i
  }
  return %temax
}

alias -l recordstat {
  sort $1 $unit.default
  return $hof(1,1)
}
;########################################################
;# TIME SCORE DURATIONS AND GENERAL ALIASES             #
;# All time alias just return the number of that time   #
;# unit which have occurred since Jan 1st, 1970         #
;# Do not alter the unit.tokens. It will break the bot. #
;########################################################
alias unit.tokens { return year.month.week.day }
alias get.day { return $int($calc(($ctime - $timezone) / 86400)) }
alias get.week { return $int($calc((($get.day - 4) - $iif($getset(status,monday),0,1)) / 7)) }
alias get.month { return $calc(($get.year * 12) + $asctime($ctime,mm)) }
alias get.year { return $calc($asctime($ctime,yyyy)  - 1970) }
alias process.scores.time {
  var %i = 1
  while (%i <= 4) {
    var %unit = $gettok($unit.tokens,%i,$asc(.))
    var %uvalue = $eval($ $+ get. $+ %unit,2)
    if ((%unit) && (%uvalue)) {
      if ($getvar($1,%unit) != %uvalue) {
        setvar $1 %unit %uvalue
        setvar $1 %unit $+ score $calc(0 + $2)
        setvar $1 %unit $+ streak $calc(0 + $3)
        setvar $1 %unit $+ time $ifd($4,9999)
        setvar $1 %unit $+ wpm $calc(0 + $5)
      }
      else {
        if ($2) setvar $1 %unit $+ score $calc($getvar($1,%unit $+ score) + $2)
        if ($3 > $getvar($1,%unit $+ streak)) setvar $1 %unit $+ streak $3
        if ($4 < $getvar($1,%unit $+ time)) setvar $1 %unit $+ time $4
        if ($5 > $getvar($1,%unit $+ wpm)) setvar $1 %unit $+ wpm $5
      }
    }
    inc %i
  }
}
;########################################################
;# VAR MANIPULATIONS.                                   #
;########################################################
alias setvar {
  if ($3 == $null) return
  var %backburner = $read($tempfil, wnt, $1 $+ ;*)
  if (%backburner != $null) mergeentry $tempfil $scoresfil $1
  var %newline = $readvar($1)
  if (!%newline) { %newline = $1 }
  if ($numtok(%newline,59) < $numtok($tvartoks, $asc(.))) {
    %newline = %newline $+ $str(;0,$calc($numtok($tvartoks, $asc(.)) - $numtok(%newline,59)))
    if ($gettok(%newline,9,59) == 0) { %newline = $puttok(%newline,trivia,9,59) }
    if (($gettok(%newline,8,59) == 0) && ($address($1,5))) { %newline = $puttok(%newline,$address($1,5),8,59) }
    if ($gettok(%newline,6,59) == 0) { %newline = $puttok(%newline,$date,6,59) }
    if ($gettok(%newline,3,59) == 0) { %newline = $puttok(%newline,9999,3,59) }
  }
  %newline = $puttok(%newline,$3-,$gttok($2),59)
  write $iif($readn,-l $+ $readn) $scoresfil %newline
  set -u3 %cache.nick $1
  set -u3 %cache.line %newline
}
alias realvar { return $getvar($1,$2) }
alias readvar {
  var %scoreline = $read($scoresfil, wnt, $1 $+ ;*)
  if (!%scoreline) { return }
  if (!$2) { return %scoreline }
  else { return $gettok(%scoreline, $gttok($2), 59) }
}
alias getvar {
  if ($1 == %cache.nick) { var %scoreline = %cache.line }
  else {
    var %scoreline = $read($scoresfil, wnt, $1 $+ ;*)
    if (!%scoreline) { return }
    set -u3 %cache.nick $1
    set -u3 %cache.line %scoreline
  }
  if (!$2) { return %scoreline }
  else { return $gettok(%scoreline, $gttok($2), 59) }
}
alias -l gttok { return $findtok($tvartoks, $1, 1, $asc(.)) }
alias -l tvartoks { return name.score.time.streak.wpm.lastwin.answered.address.password.admin.block.day.dayscore.daystreak.daytime.daywpm.week.weekscore.weekstreak.weektime.weekwpm.month.monthscore.monthstreak.monthtime.monthwpm.year.yearscore.yearstreak.yeartime.yearwpm }
alias -l varfil { return $iif($2 == $null, $iif($1 == 0, $lines($scoresfil), $gettok($read($scoresfil, $1),1,59)), $gettok($read($scoresfil, $1),$2,59)) }
alias -l trivini { return $iif($exists(trivia.ini),trivia.ini,$iif($exists(" $+ $scriptdir $+ \ $+ trivia.ini $+ ")," $+ $scriptdir $+ \ $+ trivia.ini $+ ",trivia.ini)) }
alias -l setset {
  if ($3- != $null) { writeini -n $trivini $1 $2 $3- }
  else { remini -n $trivini $$1 $2 }
}
alias getset { return $readini($trivini, n, $1, $2) }
alias -l setini { return $iif($2 != $null, $ini($trivini, $1, $2), $ini($trivini, $1)) }
alias -l thuser { return $thget($eval(Temp. $+ $1 $+ . $+ $nick,1)) }
alias -l thuset { thset $eval(Temp. $+ $1 $+ . $+ $nick,1) $2- }
alias -l thset { if ($hget(Trivia $+ $idenn)) hadd Trivia $+ $idenn $1- }
alias thget { return $hget(Trivia $+ $idenn, $1) }
;########################################################
;# Color aliases.                                       #
;########################################################
alias -l colorcode { return $gettok(colors off.white.black.blue.green.lightred.brown.purple.orange.yellow.lightgreen.cyan.lightcyan.lightblue.pink.grey.lightgrey,$calc($1 + 1),$asc(.)) }
alias -l fixer { return $base($1,10,10,2) }
alias varcolors {
  unset %c1 %c1o %c2 %c2o
  if ((!$getset(color,on)) || (!$tc(1)) || (!$tc(2))) { return }
  %c1o = $iif($tc(1).b,$chr(2)) $+ $iif($tc(1).u,$chr(31)) $+ $chr(3)
  %c2o = $iif($tc(2).b,$chr(2)) $+ $iif($tc(2).u,$chr(31)) $+ $chr(3)
  %c1 = %c1o $+ $fixer($calc($tc(1) - 1)) $+ $iif(($tc(3)) && ($getset(color,bon)), $chr(44) $+ $fixer($calc($tc(3) - 1)))
  %c2 = %c2o $+ $fixer($calc($tc(2) - 1)) $+ $iif(($tc(4)) && ($getset(color,bon)), $chr(44) $+ $fixer($calc($tc(4) - 1)))
}
alias rdc {
  if ($getset(status,nocolorshort) == 1) return $1
  var %a
  !.echo -q $regsub($1,/(?<=\x03|\x03\d\d\x2C)(\d)(?!\d)/g,0\1, %a)
  while ($regsub(%a, /(?<=\x03\d\d\x2C\d\d|\x03\d\d\x03|\x03)([\x02\x1F\x16\s\xA0]+)(\x03(?:\d\d(?:\x2C\d\d)?)?)/g,\2\1, %a)) { }
  !.echo -q $regsub(%a, /(\x02)([\x1F\x16\s\xA0]*)\1/g,\2, %a) $&
    $regsub(%a, /(\x1F)([\x02\x16\s\xA0]*)\1/g,\2, %a) $&
    $regsub(%a, /(\x16)([\x02\x1F\s\xA0]*)\1/g,\2, %a) $&
    $regsub(%a, /(?:\x03(?:\d\d(?:\x2C\d\d)?)?)+(\x03(?:(?!\d)|\d\d\x2C\d\d))/g,\1, %a) $&
    $regsub(%a, /(?:\x03\d\d)(\x2C\d\d)(?:\x03\d\d)*(\x03\d\d)/g,\2\1, %a) $&
    $regsub(%a, /(?<=\x03\d\d)(\x2C\d\d)([^\x03]+\x03\d\d)\1/g,\1\2, %a)
  while ($regsub(%a,/(\x03\d\d)((\x2C\d\d)?[^\x03]+)\1(?!\x2c\d)/g,\1\2, %a)) { }
  !.echo -q $regsub(%a, /^\x03(?!\d)|(\x03(\d\d(\x2C\d\d)?)?|\x02|\x16|\x1F)+$/g,,%a) $&
    $regsub(%a, /(?<=\x03|\x03\d\d\x2C)0(\d)(?!\d)/g,\1, %a)
  return %a
}
;########################################################
;# AWARD setups.                                        #
;########################################################
alias -l msg.trivia.award { return %c2 $+ $replace($eval($1,2),^, %c2o $+ $e1($2) $+ %c2,*, %c2o $+ $e1($nick) $+ %c2) $+ %c2o }
alias -l award {
  if ($getset(status,noawards)) { return }
  var %i = 1, %award = $calc($findtok($award.on.tok, $1, 1, $asc(.)) - 1), %trigger = $2-
  while ($aw(%i)) {
    tokenize 32 $aw(%i)
    if (%award == $1) {
      if (($2 == 0) || (($2 == 1) && (%trigger == $4)) || (($2 == 2) && (%trigger isnum $4 - $5)) || (($2 == 3) && (%trigger >= $4)) || (($2 == 4) && (%trigger <= $4)) || (($2 == 5) && (%trigger == $getrank($nick,$unit.default))) || (($2 == 6) && ($rand(1,$4) <= $5)) || (($2 == 7) && ($4 $+ * iswm %trigger)) || (($2 == 8) && (* $+ $4 iswm %trigger))) { $award.act($3,%trigger,$6-) }
    }
    inc %i
  }
}
alias award.act {
  var %do
  if ($1 == 1) { var %do = tact $rdc($msg.trivia.award($3,$2)) }
  if (($1 == 2) || ($1 == 5)) { var %do = tsay $rdc($msg.trivia.award($3,$2)) }
  if ($1 == 3) { var %do = notice $nick $rdc($msg.trivia.award($3,$2)) }
  if ($1 == 4) { var %do = trivia.credit $nick $3 }
  if ($1 == 5) { var %do = tban $nick }
  if ($1 == 6) { var %do = $eval($replace($3-,*,$2),3) }
  .timer 1 0 schan $chan %do
}
alias schan {
  set -u3 %ident $1
  $2-
}
alias award.on.tok { return Null.Score.Row.Time.WPM.Join.Question.Uprank.Promotion.Answered.RoundStart.RoundStop.Command.NoAnswer.Hint.HTMLUpdate }
alias award.val.tok { return Always.Exactly.Between.At Least.At Most.Ranked.Random.Begins.Ends }
alias award.do.tok { return Null.Describe.Msg.Notice.Give Points.Ban.Special }
;########################################################
;# MESSAGING.                                           #
;########################################################
alias -l inform {
  if ((!$1) || (!$server)) { return }
  if (!%respond) {
    var %respondlevel = $getset(status,respondlevel)
    set -u2 %respond .notice $nick
    if (%respondlevel == 2) { }
    if (%respondlevel == 3) { set -u2 %respond msg $iden }
    if (%respondlevel == 4) { set -u2 %respond msg $nick }
    if (%respondlevel == 5) { set -u2 %respond describe $chan }
  }
  $iif($scid(%cid.force),scid %cid.force) $iif($nick == $me, .timer -m 1 $calc($timer(0) * 100)) %respond $check.auto.strip($rdc($1-))
}
alias here { set %cid.force $cid }
alias -l tsay { if (($1) && ($server) && ($me ison $iden)) { $iif($nick == $me, .timer -m 1 $calc($timer(0) * 100)) msg $iden $check.auto.strip($rdc($1-)) } }
alias -l tact { if (($1) && ($server) && ($me ison $iden)) describe $iden $check.auto.strip($rdc($1-)) }
alias -l check.auto.strip { return $iif(c isincs $gettok($chan($iden).mode,1,32), $strip($1-), $1-) }
;########################################################
;# Direct basic processing, for special functions.      #
;########################################################
alias -l do.ping {
  if ($eval(% $+ pingantispam. $+ $nick,2)) return
  ctcp $nick ping
  set -u120 % $+ ping. $+ $nick $ticks
  set -u120 % $+ pingchan. $+ $nick $chan
  set -u120 % $+ pingcid. $+ $nick $cid
}
alias -l trivia.report {
  inform $msg.trivia.thanks
  write " $+ $triv(dir) $+ / $+ $iif($1 == 29, $triv(additions), $triv(report)) $+ " $nick $adate $time $2-
}
;########################################################
;# FRIENDS/BANNED.                                      #
;########################################################
alias addressize {
  if (*!*@* iswm $1) { return $1 }
  return $1 $+ !*@*
}
alias -l is.friend {
  var %i = 1
  while ($getset(friend, %i)) {
    if ($addressize($getset(friend, %i)) iswm $address($ifd($1,$nick),5)) { return %i }
    inc %i
  }
}
alias -l is.banned {
  var %i = 1
  while ($getset(banned,%i)) {
    if ($addressize($getset(banned, %i)) iswm $address($ifd($1,$nick),5)) { return %i }
    inc %i
  }
}
alias -l trivia.banned {
  var %banned = $is.banned($1)
  if (%banned) {
    if (!$1) { inform $msg.trivia.banned }
    return %banned
  }
}
alias -l ban.size { return $calc(1 + $setini(banned, 0)) }
alias -l tban { if (!$trivia.banned($$1)) { setset banned $ban.size $1 } }
alias -l tunban {
  var %i = $trivia.banned($$1)
  while ($getset(banned, $calc(%i + 1))) {
    setset banned %i $getset(banned, $calc(%i + 1))
    inc %i
  }
  setset banned %i
}
;########################################################
;# CONVERTORS #
;########################################################
alias convertscores {
  var %ini = $iif($1,$1,triviascores.ini)
  if (!$exists(%ini)) { return }
  var %i = $ini(%ini,0)
  echo 4 -a Converting %i scores into Trivia 3.12+ format.
  while (%i > 0) {
    var %m = $ini(%ini,%i)
    write $iif($2,$2,$scoresfil) $+(%m,;,$readini(%ini,n,%m,score),;,$readini(%ini,n,%m,time),;,$readini(%ini,n,%m,streak),;,$readini(%ini,n,%m,wpm),;,$readini(%ini,n,%m,lastwin))
    dec %i
  }
  .rename %ini %ini $+ .bak
}
;########################################################
;# MISC.                                                #
;########################################################
alias timealias {
  var %ticks = $ticks
  echo -a ... $eval($ $+ $1,2) ... $calc(($ticks - %ticks) / 1000) ... $1
}
alias timealias2 {
  var %ticks = $ticks, %i = 1, %result
  while (%i <= $2) {
    var %result = $eval($ $+ $eval($1-,2),2)
    inc %i
  }
  return $calc(($ticks - %ticks) / (1000 * $2))
}
alias iden { return $iif($chan, $chan, $iif(%ident, %ident, $tchan(1))) }
alias idenn { return $iden $+ . $+ $ifd($network,irc) }
alias -l deleteplayer { if ($getvar($1)) { write -dl $+ $readn $scoresfil } }
alias -l hof.size { return $line($twin,0) }
alias -l hof { return $gettok($line($twin,$1),$2,59) }
alias -l scoresfil { return $nopath($ifd($thget(scores),$ifd($tchan($trivchan, 4), TriviaScores.fil))) }
alias -l user.score { return $getvar($1,$unit.prefix($2) $+ score) }
alias -l trivia.on { if (($timer(q $+ $idenn)) || ($timer(end $+ $idenn))) { return $true } }
alias -l question.on { if ($timer(end $+ $idenn)) { return $true } }
alias -l tokq { return $thget(tokq) }
alias -l tok { return $thget(tok $+ $1) }
alias -l question.time { return $calc(($ticks - $thget(Start)) / 1000) }
alias -l te { return $getset(team, $1 $+ $prop) }
alias -l teamscore { return $thget(Score $+ $1) }
alias -l max.hinted { return $iif($calc($thget(Temp.Hints) + 0) > $calc($thuser(Hint) + 0), $thget(Temp.Hints), $thuser(hint)) }
alias -l isteam { return $thget(Team. $+ $1) }
alias -l chkadate { return $iif($getset(status,adate), $+($gettok($1,2,$asc(/)),/,$gettok($1,1,$asc(/)),/,$gettok($1,3,$asc(/))), $1) }
alias -l team { if ($thget(team) == 1) { return $true } }
alias -l tempini { return triviascbb.ini }
alias -l lag { return $iif($thget(lag $+ $1), $thget(lag $+ $1), $getset(lag,$1)) }
alias -l slag { return $getset(lag,$1) }
alias -l tc { return $getset(color, $1 $+ $iif($prop == b, -bold) $+ $iif($prop == u, -underline)) }
alias -l triv { return $getset(trivia, $1) }
alias -l aw { return $getset(award, $1) }
;########################################################
;# MESSAGE COLOR CODE SETTING ALIASES.                  #
;########################################################
alias e1 { return %c1 $+ $1- $+ %c1o }
alias e2 { return %c2 $+ $trivtran($1-) $+ %c2o }
alias trivtran {
  if (!$triv(translate)) return $1-
  if ($isfile($transfile)) {
    var %tran = $read($transfile, wtn, $1- $+ ::=*)
    if ($regex(%tran, /.*::=(.*))) { return $regml(1) }
    if (#* iswm $read($transfile,n,1)) var %nowrite 1
  }
  if (!%nowrite) write $transfile $1- $+ ::= $+ $1-
  return $1-
}
alias untrans {
  if (!$triv(translate)) return $1-
  if ($isfile($transfile)) {
    var %tran = $read($transfile, wtn, *::= $+ $1-)
    if ($regex(%tran, /(.*)::=.*)) { return $regml(1) }
  }
  return $1-
}
alias tranord { return $1 $+ $trivtran($remove($ord($1),$1)) }
alias transfile { return " $+ $triv(translate) $+ " }
;########################################################
;# MESSAGES.                                            #
;########################################################
alias -l msg.ping.reply { return $e1($nick) $+ $e2($chr(44) your ping is) $e1($calc(($ticks - % [ $+ ping. [ $+ [ $nick ] ] ] ) / 1000)) $e2(secs.) }
alias -l msg.answer.correct { return $iif($1,$msg.answer.correct2($2,$3,$4),$e2(Winner:) $e1($getmrank($nick) $nick) $iif(!$getset(status,shownone),$e2(Answer:) $e1($trivq.answer)) $iif(!$getset(hide,time),$e2(Time:) $e1($thget(Time))) $iif(!$getset(hide,streak),$e2(Streak:) $e1($getset(Var $+ $idenn, Row))) $iif(!$getset(hide,score),$e2(Points:) $e1($user.score($nick))) $iif(!$getset(hide,wpm),$e2(WPM:) $e1($int($2))) $iif(!$getset(hide,score),$e2(Rank:) $e1($tranord($3)) $iif($4,$e2(Previously:) $e1($tranord($4))))) }
alias -l msg.answer.correct2 { return $e1($getmrank($nick) $nick) $e2(got the answer) $+ $iif(!$getset(status,shownone),$e2(:) $e1($trivq.answer),$e2(.)) $iif(!$getset(hide,time),$e2(in) $e1($thget(Time)) $e2(seconds.)) $iif(!$getset(hide,score),$e2(Points:) $e1($user.score($nick))) $e2(Rank:) $e1($tranord($2)) }
alias -l msg.answer.timeout { return $e2(Time's up! The answer was:) $e1($trivq.answer) }
alias -l msg.answer.timeout.total { return $e2(Time's up! Remaining answers were:) $e1($left($gettotalremain,850)) }
alias -l msg.answer.timeout.pick { return $e2(Time's up! The answer was:) $e1($left($get.picklist,850)) }
alias -l msg.answer.timeout2 { return $e2(Time's up! Nobody got the answer!) }
alias -l msg.question.multi { return $iif($1, $e1($1) $+ $e2(:)) $e2(Multiple Choice:) $e1($right($tok(1),-7)) $+ $e2(;) $e1($get.multianswers) }
alias -l msg.question.total { return $iif($1, $e1($1) $+ $e2(:)) $e2(Give all correct responses:) $e1($right($tok(1),-7)) }
alias -l msg.question.points { return $iif($1, $e1($1) $+ $e2(:)) $e2(For) $e1($ifd($thget(temp.points),0)) $e2(point $+ $iif($thget(temp.points) != 1,s) $+ :) $e1($get.question($2-)) }
alias -l msg.question.scramble { return $iif($1, $e1($1) $+ $e2(:)) $iif($getset(status, sayscramble),$e2(Unscramble the following:)) $iif($2,$e1($2) $+ $e2(:)) $e1($scramble($tok(2)) $+ ?) }
alias -l msg.question.standard { return $iif($1, $e1($1) $+ $e2(:)) $e1($get.question($ifd($2,$tok(1)))) }
alias -l msg.question.answer { return $e2(The answer to the last question was $+ :) $e1($thget(answer)) }
alias -l msg.trivia.stats { return $iif($getvar($1,$2 $+ score), $e1($getmrank($1,$iif(!$2,total,$2)) $1) $+ $e2(:) $iif(!$getset(hide,score),$e2(Rank:) $e1($tranord($getrank($1,$2))) $e2(out of) $e1($hof.size) $+ $e2(.) $e2(Current wins:) $e1($getvar($1,$2 $+ score)) $+ $e2(.)) $iif(!$getset(hide,streak),$e2(Best streak:) $e1($getvar($1,$2 $+ streak)) $+ $e2(.)) $iif(!$getset(hide,time),$e2(Best time:) $e1($getvar($1,$2 $+ time)) $e2(secs.)) $iif(!$getset(hide,wpm),$e2(WPM:) $e1($getvar($1,$2 $+ wpm)) $+ $e2(.)) $iif($getvar($1,lastwin), $e2(Last Win:) $e1($chkadate($getvar($1, lastwin))) $+ $e2(.)), $e2(No such user exists.)) }
alias -l msg.trivia.rank { return $iif($user.score($1), $e1($getmrank($1) $1) $+ $e2(:) $iif(!$getset(hide,score),$e2(Current wins:) $e1($user.score($1)) $+ $e2(.)) $iif(($mrankon) && ($getnextmrankat($user.score($1)) != 0),$e2(Next rank:) $e1($getnextmrank($user.score($1))) $iif(!$getset(hide,score),$e2(after:) $e1($calc($getnextmrankat($user.score($1)) - $user.score($1))) $e2(more points.))) $iif(!$getset(hide,score),$e2(Rank:) $e1($tranord($getrank($1,$unit.default))) $e2(out of) $e1($hof.size) $+ $e2(.) $iif(%getrank != 1,$e1($calc(%getnextrankat - $user.score($1))) $e2(points below) $e1(%getnextrankuser) $+ $e2(.))),$e2(Error.)) }
alias -l msg.trivia.state { return $msg.trivia.version $e2(is currently) $e1($trivon) $+ $e2(.) $iif($getset(status,champ),$e2(Champ Mode Set to) $e1($triv(reset)) $e2(Wins.)) $e2(Question file contains) $e1($numq) $e2(lines.) $e1($numl) $e2(questions. Trivia is:) $e1($trivia.onoff) $+ $e2(.) $iif($trivia.on, $iif($question.on,$e2(Time left:) $e1($calc($thget(lagtimedout) - $question.time))) $e2(Question:) $e1($thget(Current)) $+ $e2(/) $+ $e1($thget(Max)) $e2(Team Game:) $e1($team.onoff) $+ $e2(. Trivia Round started by) $e1($thget(SUser)) $e2(on) $e1($thget(STime))) $e2(Bot time is:) $e1($time) }
alias -l msg.trivia.enabled { return $e2(Enabling the trivia. Have an op type:) $e1($pre $+ $gtok(2)) $e2(to disable the bot.) }
alias -l msg.trivia.disabled { return $e2(Disabling the trivia. Have an op type:) $e1($pre $+ $gtok(3)) $e2(to enable the bot.) }
alias -l msg.trivia.victory { return $e2(The game has been beaten by) $e1($1) $e2(all hail the new champ whose name shall reign supreme!) }
alias -l msg.trivia.unactive { return $e2(The game has been disabled due to inactivity.) }
alias -l msg.trivia.emptyoff { return $e2(The game has been disabled due lack of players.) }
alias -l msg.trivia.pause { return $e2(Trivia paused.) $e1($pre $+ $gtok(8)) $e2(to resume.) }
alias -l msg.trivia.resume { return $e2(Trivia resumed.) }
alias -l msg.trivia.started { return $e2(Starting the trivia. Round of) $e1($iif($thget(Max) == Unlimited,$gtok(1,5),$thget(Max))) $e2(questions.) $e1($pre $+ $gtok(6)) $e2(to stop. Total:) $e1($numl) }
alias -l msg.trivia.stopped { return $e2(Stopping the trivia.) $e1($pre $+ $gtok(5) $iif(!$isdis(1),< $+ $trivtran(number) $+ >)) $e2(to restart.) }
alias -l msg.trivia.awarded { return $e1($1) $e2(was awarded) $e1($2) $e2(point $+ $iif($2 > 1,s) $+ . Current Wins:) $e1($user.score($1)) }
alias -l msg.trivia.deducted { return $e1($1) $e2(was deducted) $e1($calc($2 * -1)) $e2(point $+ $iif($2 < -1,s) $+ . Current Wins:) $e1($user.score($1)) }
alias -l msg.trivia.hof { return $msg.trivia.champ(1) $msg.trivia.topstats(score) }
alias -l msg.trivia.error.midq { return $e2(Cannot pause while trivia game has a question issued.) }
alias -l msg.trivia.banned { return $e2(You cannot play $+ $chr(44) you are banned.) }
alias -l msg.trivia.guessed { return $e2(You already guessed) $e1($1) $e2(times.) }
alias -l msg.trivia.thanks { return $e2(Thank you for your contribution!) }
alias -l msg.trivia.totalover { return $e2(All correct responses have been given!) }
alias -l msg.trivia.version { return $e1($trivia.name $+ $chr(44) v $+ $trivia.version) }
alias -l msg.trivia.web { return $e2(Get your own copy of) $msg.trivia.version $e2(at) $e1($trivia.web) $e2(.) }
alias -l msg.trivia.onjoin { return $iif($getset(trivia,onjoin),$get.onjoin($getset(trivia,onjoin)),$e2(Welcome) $e1($getmrank($nick) $nick) $+ $e2($chr(44)) $e1($msg.trivia.version) $e2(is activated. Type ') $+ $e1($pre $+ $gtok(33)) $+ $e2(' for a list of commands or just ') $+ $e1($pre $+ $gtok(5)) $+ $e2(' to start a game!)) }
alias -l msg.trivia.records { return $iif(!$getset(hide,streak),$e2(Record streak:) $e1($recordstat(streak)) $e2(of) $e1($hof(1,4)) $+ $e2(.)) $iif(!$getset(hide,time),$e2(Record time:) $e1($recordstat(time)) $e2(of) $e1($hof(1,3)) $+ $e2(.)) $iif(!$getset(hide,wpm),$e2(Record wpm:) $e1($recordstat(WPM)) $e2(of) $e1($hof(1,5)) $+ $e2(.)) }
alias -l msg.trivia.themes { return $e2(Current themes are:) $e1($get.themes) }
alias -l msg.trivia.champ { return $iif($getset(status,champ), $e2(Current champ:) $e1($getset(Champ, $ini($trivini, Champ, 0))) $+ $e2(. $get.champ($1))) }
alias -l msg.trivia.showteams { return $msg.trivia.showteam(1) $msg.trivia.showteam(2) $iif($getset(team, 4-team), $msg.trivia.showteam(3) $msg.trivia.showteam(4)) }
alias -l msg.trivia.showteam { return $iif($get.showteams($1), $e2(Current members of) $e1($te($1)) $e2(are:) $e1($get.showteams($1))) }
alias -l msg.trivia.hintpaused { return $e2(You requested a $pre $+ $gtok(39) less than) $e1($triv(hintpause)) $e2(seconds ago.) }
alias -l msg.trivia.roundscores { return $e2(Current Round:) $e1($get.roundscores) }
alias -l msg.trivia.banlist { return $e2(The following people are banned:) $e1($get.banlist) }
alias -l msg.team.start { return $e2(Team Trivia: ') $+ $e1($pre $+ $gtok(34) 1) $+ $e2(' or ') $+ $e1($pre $+ $gtok(34) 2) $+ $iif($getset(team,4-team),$e2(' or ') $+ $e1($pre $+ $gtok(34) 3) $+ $e2(' or ') $+ $e1($pre $+ $gtok(34) 4)) $+ $e2(' to add to a team.) }
alias -l msg.team.add { return $e2(Team:) $e1($1) $e2(has a new member:) $e1($2) }
alias -l msg.team.joinover { return $e2(I am sorry no more people can join/change at this time.) }
alias -l msg.team.toomany { return $e2(That team currently has enough players.) }
alias -l msg.team.joinbefore { return $e2(Teams are no longer accepting player.) }
alias -l msg.team.alreadyon { return $e2(You are already on that team.) }
alias -l msg.team.score { return $e1($getmrank($nick) $nick) $e2(won. Point for) $e1($te($isteam($nick))) $+ $e2(.) $msg.team.cscore(1,2) $iif($getset(team,4-team), $msg.team.cscore(3,4)) }
alias -l msg.team.cscore { return $e1($te($1)) $e2(has) $e1($thget(Score $+ $1)) $e2(points.) $e1($te($2)) $e2(has) $e1($thget(Score $+ $2)) $e2(points.) }
alias -l msg.team.over { return %c2 $+ $replace($1-, *t1, %c2o $+ $e1($te(1)) $+ %c2,*t2, %c2o $+ $e1($te(2)) $+ %c2,*t3,%c2o $+ $e1($te(3)) $+ %c2,*t4,%c2o $+ $e1($te(4)) $+ %c2) $+ %c2o $+ $e2(!) }
alias -l msg.hint.words { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e2(there $iif($$get.hint(words) == 1,is,are)) $e1($$get.hint(words)) $e2(word $+ $iif($$get.hint(words) != 1,s) in the answer.) }
alias -l msg.hint.vowels { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e2(the vowels are:) $e1($$get.hint(vowels)) }
alias -l msg.hint.last { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e2(the last character in the answer is:) $e1($$get.hint(last)) }
alias -l msg.hint.space { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e2(answer space:) $e1($$get.hint(space)) }
alias -l msg.hint.scramble { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e2(scrambled:) $e1($$get.hint(scramble)) }
alias -l msg.hint.hint { return $e2(Here's $iif($getset(status,sayhintnum),your $tranord($ifd($thuser(hint),$thget(Temp.Hints))), a)  hint $+ $chr(44)) $e1($$get.hint(hint,$1)) }
alias -l msg.features.built { return $e2(Trivia scores updated:) $e1($1) $e2(!) }
alias -l msg.trivia.hof.error { return $e1($pre $+ $gtok(14) < $+ $gtok(1,3) $+ $chr(124) $+ $gtok(2,3) $+ $chr(124) $+ $gtok(3,3) $+ $chr(124) $+ $gtok(4,3) $+ > < $+ $gtok(1,4) $+ $chr(124) $+ $gtok(2,4) $+ $chr(124) $+ $gtok(3,4) $+ $chr(124) $+ $gtok(4,4) $+ $chr(124) $+ $gtok(5,4) $+ >) $e2(to display the hall of fame table of your choice.) }
alias -l msg.trivia.stats.error { return $e1($pre $+ $gtok(11) < $+ $trivtran(player) $+ $chr(124) $+ $trivtran(number) $+ > < $+ $gtok(1,4) $+ $chr(124) $+ $gtok(2,4) $+ $chr(124) $+ $gtok(3,4) $+ $chr(124) $+ $gtok(4,4) $+ $chr(124) $+ $gtok(5,4) $+ >) $e2(to display stats on that individual.) }
alias -l msg.trivia.op.ban { return $e2(User is banned.) }
alias -l msg.trivia.error.ban { return $e2(You need to specify a user or address to ban.) }
alias -l msg.trivia.error.unban { return $e2(You need to specify a user or address to unban.) }
alias -l msg.trivia.op.unban { return $e2(User is unbanned.) }
alias -l msg.trivia.error.badnum { return $e2(You need to specify a valid question number to be asked.) }
alias -l msg.trivia.op.ask { return $e2(Question will be asked.) }
alias -l msg.trivia.error.noquestion { return $e2(You need append the question that is to be added directly into the question file.) }
alias -l msg.trivia.error.nodelim { return $e2(You need at least one delimiter to indicate: question $+ $triv(delimiter) $+ answer) }
alias -l msg.trivia.op.added { return $e2(Question has been added.) }
alias -l msg.trivia.error.nosearch { return $e2(You need at least some search text.) }
alias -l msg.trivia.op.find { return $iif($get.find($1-),$e1($get.find($1-)),$msg.trivia.error.find) }
alias -l msg.trivia.error.find { return $e2(That text was not found.) }
alias -l msg.trivia.error.topx { return $e2(Range too great.) }
alias -l msg.trivia.echoanswer { return $e2(Answer:) $e1($trivq.answer) }
;########################################################
;# Help structure.                                      #
;########################################################
alias -l givehelp {
  if (!$1-) {
    inform $e2(Commands:) $e1($pre $+ $gtok(6) $pre $+ $gtok(5) $pre $+ $gtok(39) $pre $+ $gtok(34) $pre $+ $gtok(29) $pre $+ $gtok(30) $pre $+ $gtok(31) $pre $+ $gtok(27) $pre $+ $gtok(28) $pre $+ $gtok(14) $pre $+ $gtok(19) $pre $+ $gtok(16) $pre $+ $gtok(21) $pre $+ $gtok(25) $pre $+ $gtok(38) $pre $+ $gtok(23) $pre $+ $gtok(26) $pre $+ $gtok(44) $pre $+ $gtok(37) $pre $+ $gtok(11) $pre $+ $gtok(1) $pre $+ $gtok(3) $pre $+ $gtok(2) $pre $+ $gtok(10) $pre $+ $gtok(41) $pre $+ $gtok(42) $pre $+ $gtok(43) $pre $+ $gtok(35) $pre $+ $gtok(36) $pre $+ $gtok(4) $pre $+ $gtok(7) $pre $+ $gtok(8) $pre $+ $gtok(62))
    inform $e1($pre $+ $gtok(33) < $+ $trivtran(command) $+ >) $e2(for specific help. Some commands may be disabled.)
  }
  var %ctok = $iif($pre $+ * iswm $1, $ctok($right($1,$calc(-1 * $len($pre)))), $ctok($1))
  if ((%ctok == 1)) { inform $e1($gtok(%ctok) -----) $e2(Displays the state of the bot) }
  if ((%ctok == 6)) { inform $e1($gtok(%ctok) ---) $e2(Stops trivia) }
  if ((%ctok == 3)) { inform $e1($gtok(%ctok) ----) $e2(Enables trivia bot) }
  if ((%ctok == 2)) { inform $e1($gtok(%ctok) ---) $e2(Disables trivia bot) }
  if ((%ctok == 7)) { inform $e1($gtok(%ctok) ----) $e2(Pauses trivia bot) }
  if ((%ctok == 8)) { inform $e1($gtok(%ctok) ----) $e2(Resumes trivia bot) }
  if ((%ctok == 4)) { inform $e1($gtok(%ctok) < $+ $trivtran(command) $+ > -) $e1($gtok(1,2)) $+ $e2($chr(44)) $e1($gtok(2,2)) $+ $e2($chr(44)) $e1($gtok(3,2)) $+ $e2($chr(44)) $e1($gtok(4,2)) $+ $e2($chr(44)) $e1($gtok(5,2)) $+ $e2($chr(44)) $e1($gtok(6,2)) $+ $e2($chr(44)) $e1($gtok(7,2)) $+ $e2($chr(44)) $e1($gtok(8,2)) $+ $e2($chr(44) commands to allow ops to control the trivia bot.) }
  if ((%ctok == 5)) { inform $e1($gtok(%ctok) x --) $e2(Starts trivia, x can be a number, "unlimited", <theme> or "team" for team mode) }
  if ((%ctok == 39)) { inform $e1($gtok(%ctok) ------) $e2(Gives a hint) }
  if ((%ctok == 42)) { inform $e1($gtok(%ctok) ------) $e2(Gives the last character of the answer) }
  if ((%ctok == 41)) { inform $e1($gtok(%ctok) ------) $e2(Gives the number of words in the answer) }
  if ((%ctok == 43)) { inform $e1($gtok(%ctok) ------) $e2(Gives the vowels of the answer) }
  if ((%ctok == 34)) { inform $e1($gtok(%ctok) x ----) $e2(Joins a team, must be in team mode, x can be a 1 or 2) }
  if ((%ctok == 29)) { inform $e1($gtok(%ctok) -------) $e2(Allows you to add questions: $pre $+ $gtok(29) What is the square root of 4*two*2) }
  if ((%ctok == 30)) { inform $e1($gtok(%ctok) ----) $e2(Lets you report problems with the questions: $pre $+ $gtok(30) The square root of 4 is also -2) }
  if ((%ctok == 31)) { inform $e1($gtok(%ctok) -----) $e2(Checks your lag from the bot) }
  if ((%ctok == 27)) { inform $e1($gtok(%ctok) ---) $e2(Displays the version of the bot) }
  if ((%ctok == 28)) { inform $e1($gtok(%ctok) -------) $e2(Displays the web page for the bot) }
  if ((%ctok == 14)) { inform $e1($gtok(%ctok) < $+ $gtok(1,3) $+ $chr(124) $+ $gtok(2,3) $+ $chr(124) $+ $gtok(3,3) $+ $chr(124) $+ $gtok(4,3) $+ > < $+ $gtok(1,4) $+ $chr(124) $+ $gtok(2,4) $+ $chr(124) $+ $gtok(3,4) $+ $chr(124) $+ $gtok(4,4) $+ $chr(124) $+ $gtok(5,4) $+ > -------) $e2(Displays the hall of fame, for requested entry) }
  if ((%ctok == 19)) { inform $e1($gtok(%ctok) ---) $e2(Displays the record times. Same as $pre $+ $gtok(14) $gtok(2,3)) }
  if ((%ctok == 16)) { inform $e1($gtok(%ctok) --) $e2(Displays the record streaks. Same as $pre $+ $gtok(14) $gtok(3,3)) }
  if ((%ctok == 21)) { inform $e1($gtok(%ctok) ----) $e2(Displays the record words per minute. Same as $pre $+ $gtok(14) $gtok(4,3)) }
  if ((%ctok == 25)) { inform $e1($gtok(%ctok) ---) $e2(Displays the record $gtok(2,3) & $gtok(3,3) & $gtok(4,3)) }
  if ((%ctok == 23)) { inform $e1($gtok(%ctok) ----) $e2(Displays the bot's server) }
  if ((%ctok == 26)) { inform $e1($gtok(%ctok) -----) $e2(Displays the champ stats) }
  if ((%ctok == 36)) { inform $e1($gtok(%ctok)) $e2(Displays the scores for the current round.) }
  if ((%ctok == 35)) { inform $e1($gtok(%ctok)) $e2(Displays the teams and which players are on each.) }
  if ((%ctok == 44)) { inform $e1($gtok(%ctok) ----) $e2(Repeats the question) }
  if ((%ctok == 37)) { inform $e1($gtok(%ctok) ----) $e2(Provides the answer to the last question to an op who requests it) }
  if ((%ctok == 38)) { inform $e1($gtok(%ctok) ----) $e2(After half the time to answer has expired allows an instant timeout.) }
  if ((%ctok == 10)) { inform $e1($gtok(%ctok) ----) $e2(Lists available themes) }
  if ((%ctok == 11)) { inform $e1($gtok(%ctok) ------) $e2(Returns your current stats, or $pre $+ $gtok(11) <player> for somebody else) }
  if ((%ctok == 62)) { inform $e1($gtok(%ctok) ----) $e2(Displays score required for next promotion.) }
}
;########################################################
;# MESSAGE PROCESSES.                                   #
;########################################################
alias -l get.question {
  var %gq $1-
  if (!$getset(status,noautoqm)) { var %aqm = 1 }
  if ($right(%gq,1) isin :!?.-) { var %aqm = 0 }
  if ($right(%gq,1) isin -) { var %gq = $left(%gq,-1) }
  if ($thget(temp.bonus) == S)  { %gq = $scramble(%gq) }
  if ($thget(temp.bonus) == R)  { %gq = $reverse(%gq) }
  if ($thget(temp.bonus) == G)  { %gq = $scatter(75,%gq) }
  return %gq $+ $iif(%aqm,?)
}
alias -l get.banlist {
  var %i = 1, %b.temp
  while ($getset(banned,%i)) {
    var %b.temp = %b.temp $getset(banned,%i)
    inc %i
  }
  return %b.temp
}
alias -l get.roundscores {
  if ($window(@round $+ $idenn)) { window -c @round $+ $idenn }
  window -hn @round $+ $idenn
  .timer 1 0 window -c @round $+ $idenn
  var %i = 1
  while ($hmatch(Trivia $+ $idenn, Score.*, %i)) {
    var %j = $line(@round $+ $idenn,0)
    while (( $hget(Trivia $+ $idenn, $hmatch(Trivia $+ $idenn, Score.*, %i)) > $thget(Score. $+ $line(@round $+ $idenn, %j))) && (%j >= 1)) { dec %j }
    iline @round $+ $idenn $calc(%j + 1) $remove($hmatch(Trivia $+ $idenn, Score.*, %i),Score.)
    inc %i
  }
  var %roundscores
  %i = 1
  while (%i <= 15) {
    %roundscores = %roundscores $iif($line(@round $+ $idenn,%i),$line(@round $+ $idenn,%i) $+ - $+ $thget(Score. $+ $line(@round $+ $idenn,%i)))
    inc %i
  }
  return %roundscores
}
alias sortroundscores {
  var %j = 1
  while (%j <= $line(@round $+ $idenn,0)) {
    var %k = %j
    while (%k <= $line(@round $+ $idenn,0)) {
      if ($thget(Score. $+ $line(@round $+ $idenn, %j)) > $thget(Score. $+ $line(@round $+ $idenn, %k))) {
        var %temp.name = $line(@round $+ $idenn, %j)
        rline @round $+ $idenn %j $line(@round $+ $idenn, %k)
        rline @round $+ $idenn %j %temp.name
      }
      inc %k
    }
    inc %j
  }
}
alias -l get.showteams {
  var %i = 1
  while ($hmatch(Trivia $+ $idenn, Team.*, %i)) {
    if ($isteam($remove($hmatch(Trivia $+ $idenn, Team.*, %i),Team.)) == $1) { var %temp.team = %temp.team $remove($hmatch(Trivia $+ $idenn, Team.*, %i),Team.) }
    inc %i
  }
  return %temp.team
}
alias -l get.champ {
  if (($setini(Champ,0) <= 0) || (!$getset(status,champ))) { return }
  var %temp.champ, %i = $calc($ini($trivini, Champ, 0) - 1)
  while ((%i >= 1) && (!$1)) {
    var %temp.champ = %temp.champ $getset(Champ, %i)
    dec %i
  }
  return %temp.champ
}
alias -l get.multianswers {
  var %i 2, %answers.t
  if ($window(@multianswer)) { window -c @multianswer }
  window -h @multianswer
  .timer 1 0 window -c @multianswer
  while ($tok(%i)) {
    aline @multianswer $tok(%i)
    inc %i
  }
  filter -wwct 1 13 @multianswer @multianswer *
  var %i 2
  var %answers.t $line(@multianswer,1)
  while ($line(@multianswer, %i)) { var %answers.t = %answers.t $+ , $line(@multianswer, %i), %i = $calc(%i + 1) }
  return %answers.t
}
alias -l get.themes {
  var %i = 1
  while ($getset(triviamode $+ %i, name)) {
    var %temp.themes = %temp.themes $getset(triviamode $+ %i, name)
    inc %i
  }
  return $e1(%temp.themes)
}
alias -l get.onjoin {
  return %c2 $+ $replace($1-,$chr(35),$+(%c2o,%c1,$chan,%c1o,%c2),*, $+(%c2o,%c1,$getmrank($nick) $nick,%c1o,%c2),@, $+(%c2o,%c1,$tranord($getrank($nick,$unit.default)),%c1o,%c2),^, $+(%c2o,%c1,$ifd($getvar($nick,score),0),%c1o,%c2)) $+ %c2o
}
alias -l get.picklist {
  if ($tokq <= 2) return $tok(2)
  var %i = 2, %picklist
  while (%i <= $tokq) {
    %picklist = %picklist $tok(%i)
    if (%i < $calc($tokq - 1)) { %picklist = %picklist $+ $chr(44) }
    if (%i == $calc($tokq - 1)) { %picklist = %picklist $trivtran(and) }
    inc %i
  }
  return %picklist

}
;########################################################
;# HTML BUILD                                           #
;########################################################
alias bgcolor { return #000000 }
alias textcolor { return #339933 }
alias linkcolor { return #33FF00 }
alias alinkcolor { return #666600 }
alias vlinkcolor { return #666666 }

alias htmlbuild {
  var %start.ticks = $ticks
  set %htmlfile " $+ $mircdir $+ \ $+ $ifd($getset(build,genname),triv.htm) $+ "
  sort score $unit.default
  if ($exists(%htmlfile)) { .remove %htmlfile }
  write %htmlfile <HTML><head><title> $+ $iden $iif($network,$trivtran(Trivia Scores on) $network) $+ </title></head>
  write %htmlfile <body bgcolor=" $+ $bgcolor $+ " text=" $+ $textcolor $+ " link=" $+ $linkcolor $+ " alink=" $+ $alinkcolor $+ " vlink=" $+ $vlinkcolor $+ ">
  write %htmlfile $trivtran(The scores file was compiled by:) $strip($msg.trivia.version) <br>
  write %htmlfile $trivtran(This file was created on:) $time $chkadate($date) <br>
  write %htmlfile <table BORDER COLS=5 WIDTH="80%" ><tr><tr>
  write %htmlfile <th> $+ $trivtran(Ranking) $+ </th><th> $+ $trivtran(Name) $+ </th> $+ $iif(!$getset(hide,score),<th> $+ $trivtran(Score) $+ </th>) $+ $iif(!$getset(hide,time),<th> $+ $trivtran(Best Time) $+ </th>) $+ $iif(!$getset(hide,streak),<th> $+ $trivtran(Best Streak) $+ </th>) $+ $iif(!$getset(hide,wpm),<th> $+ $trivtran(Best WPM) $+ </th>) $+ </tr>
  var %i = 1, %j = $hof.size
  if ($getset(build,top) isnum 1 - %j) { %j = $getset(build,top) }
  if ($version >= 6.15) {
    set %count.num.t %i
    filter -wkr %i $+ - $+ %j $twin htmlprocess
    unset %count.num.t
  }
  else {
    while (%i <= %j) {
      write %htmlfile <tr><th> $+ %i $+ </th><td> $+ $hof(%i,1) $+ </td> $+ $iif(!$getset(hide,score),<td> $+ $hof(%i,$gttok($unit.mark $+ score)) $+ </td>) $+ $iif(!$getset(hide,time),<td> $+ $hof(%i,$gttok($unit.mark $+ time)) $+ </td>) $+ $iif(!$getset(hide,streak),<td> $+ $hof(%i,$gttok($unit.mark $+ streak)) $+ </td>) $+ $iif(!$getset(hide,wpm),<td> $+ $hof(%i,$gttok($unit.mark $+ wpm)) $+ </td>) $+ </tr>
      inc %i
    }
  }
  write %htmlfile </table><br>
  write %htmlfile $trivtran(Made with) <a href=" $+ $trivia.web $+ " "target="_top"> $+ $strip($msg.trivia.version) $+ </a><br>
  echo -a $e2(Finished:) $e1(%htmlfile) $e2(is written. In) $e1($calc(($ticks - %start.ticks) / 1000)) $+ $e2(secs.)
  unset %htmlfile
}
alias htmlprocess {
  write %htmlfile <tr><th> $+ %count.num.t $+ </th><td> $+ $gettok($1,1,59) $+ </td> $+ $iif(!$getset(hide,score),<td> $+ $gettok($1,$gttok($unit.mark $+ score),59) $+ </td>) $+ $iif(!$getset(hide,time),<td> $+ $gettok($1,$gttok($unit.mark $+ time),59) $+ </td>) $+ $iif(!$getset(hide,streak),<td> $+ $gettok($1,$gttok($unit.mark $+ streak),59) $+ </td>) $+ $iif(!$getset(hide,wpm),<td> $+ $gettok($1,$gttok($unit.mark $+ wpm),59) $+ </td>) $+ </tr>
  inc %count.num.t
}

alias xmlbuild {
  if ($version < 6.15) {
    echo -a Update to a later version of mIRC. This code will not work with versions prior to 6.15.
    return
  }
  var %start.ticks = $ticks
  set %xmlfile " $+ $mircdir $+ \ $+ triv-rss-091.xml $+ "
  sort score $unit.default
  if ($exists(%xmlfile)) { .remove %xmlfile }

  write %xmlfile <?xml version="1.0" ?>
  write %xmlfile <rss version="0.91">
  write %xmlfile    <channel>
  write %xmlfile        <title> $trivia.name </title>
  write %xmlfile        <link> $trivia.web </link>
  write %xmlfile        <description>Latest Scores</description>
  write %xmlfile        <language>en-us</language>
  write %xmlfile        <copyright>Copyright $asctime(yyyy) $+ </copyright>
  write %xmlfile        <lastBuildDate> $asctime($gmt, ddd $+ $chr(44) dd mmm yyyy HH:nn:ss) GMT </lastBuildDate>

  var %i = 1, %j = $hof.size
  if ($getset(build,top) isnum 1 - %j) { %j = $getset(build,top) }
  set %count.num.t %i
  filter -wkr %i $+ - $+ %j $twin xmlprocess
  unset %count.num.t

  write %xmlfile        </channel>
  write %xmlfile    </rss>

  echo -a $e2(Finished:) $e1(%xmlfile) $e2(is written. In) $e1($calc(($ticks - %start.ticks) / 1000)) $+ $e2(secs.)
  unset %xmlfile
}
alias xmlprocess {
  write %xmlfile        <item>
  write %xmlfile            <title> $+ $gettok($1,1,59) $+ </title>
  write %xmlfile            <description> Score: $gettok($1,$gttok($unit.mark $+ score),59) Record Time: $gettok($1,$gttok($unit.mark $+ time),59) Streak: $gettok($1,$gttok($unit.mark $+ streak),59) WPM: $gettok($1,$gttok($unit.mark $+ wpm),59)  </description>
  write %xmlfile            <link> $+ $trivia.web $+ </link>
  write %xmlfile            </item>
  inc %count.num.t
}
alias xmlbuildon { setset build xml 1 }
alias xmlbuildoff { setset build xml 0 }

alias unit.mark { return $iif($unit.default != total,$unit.default) }
alias htmltrigger {
  if ($getset(build,xml)) { xmlbuild }
  if ($getset(build,generate)) { htmlbuild }
  if (($getset(build,auto)) && ($exists($+(",$triv(dir),\,ftpbatch.txt,")))) { run -n ftp $+(-s:,",$triv(dir),\,ftpbatch.txt") }
  if (($getset(build,copy)) && ($exists(" $+ $getset(build,from) $+ ")) && ($exists(" $+ $getset(build,to) $+ "))) { .copy -o " $+ $getset(build,from) $+ " " $+ $getset(build,to) $+ \ $+ $nopath($getset(build,from)) $+ " }
  if ($getset(build,web)) { tsay $msg.features.built($getset(build,web)) }
  award HTMLUpdate 0
}
;########################################################
;# SPECIAL COMMANDS.                                    #
;# /find <text> : Finds the text in your current        #
;#     question files for the channel.                  #
;# /add <question> : directly adds the given question.  #
;# /ask <question|#> : Force asks a given question.     #
;# /sortfile : Sorts the selcted file alphanumerically. #
;# /killdup : Kills exact duplicate questions in file.  #
;# /killfixdup : Uses internal fix routine to kill same #
;#      questions with a little more checking.          #
;# /reformfile <filename> <regex> <regex> : Uses the    #
;#      regsub command to reform a file. For example:   #
;#      /reformfile q.txt ([^\|]+)\|([^\*]+) \2*\1      #
;#      would change q.txt from answer|question form to #
;#      question*answer form. You need to know regex.   #
;# /tpurge <#> : Moves everybody with less that # point #
;#       to a secondary file called backburner. If they #
;#       score another point they will be restored.     #
;# /tdpurge <#> : Anybody who hasn't played in # days.  #
;# /copyentry <filefrom> <fileto> <nickname> : Copies.  #
;# /debackburn : Reverses effect of /tpurge commands.   #
;# /mergefiles <filefrom> <fileto> : Merges two score   #
;#       files into one score file.                     #
;# /tfind : finds score files that should be merged.    #
;# /tmerge <fromplayer> <toplayer> : merge player score #
;# /trename <fromplayer> <toplayer> : renames player    #
;# /triviaad <#> <message> : displays message every <#> #
;#       of minutes.                                    #
;# /triviaad2 <#> <message> : Same but colored.         #
;# /truntimes <timeon> <timeoff> : turns bot on and off #
;#       only plays during the given times.             #
;########################################################
alias find { echo $get.find($1-) }
alias add { if ($exists($qfile(1))) write $qfile(1) $1- }
alias ask {
  var %asknm = 1
  while ($thget(Ask $+ %asknm)) { inc %asknm }
  if ($hget(Trivia $+ $idenn)) { thset Ask $+ %asknm $iif($1-,$1-,$$?="Force which question number(#) or ask what question(Question*Answer)?") }
}
alias sortfile { 
  var %file = " $+ $sfile($mircdir) $+ "
  filter -ffct 1 13 %file %file *
}
alias killdup { 
  var %file = " $+ $sfile($mircdir) $+ ", %i = 0
  window -hn @temp.window
  window -hn @temp.windowfile
  filter -fwct 1 13 %file @temp.windowfile *
  while ($line(@temp.windowfile,0) >= %i) {
    var %line = $line(@temp.windowfile,%i)
    if (%line) { aline -n @temp.window %line }
    unset %line
    inc %i
  }
  filter -wfc @temp.window %file *
  window -c @temp.window
  window -c @temp.windowfile
}
alias killfixdup { 
  var %file = $sfile($mircdir), %i = 0, %fixed = 0
  window -hn @temp.windowfix
  window -hn @temp.windowfile
  .timer 1 0 window -c @temp.windowfix
  .timer 1 0 window -c @temp.windowfile
  filter -fwct 1 13 " $+ %file $+ " @temp.windowfile *
  while ($line(@temp.windowfile,0) >= %i) {
    if ($line(@temp.windowfile,%i)) {
      aline -n @temp.windowfix $fix($line(@temp.windowfile,%i))
      if (%fixed != $line(@temp.windowfix,0)) { write $nopath(%file) $+ .fix $line(@temp.windowfile,%i) }
      var %fixed = $line(@temp.windowfix,0)
    }
    inc %i
  }
  echo -s Killed dups, saved as %file $+ .fix $+ !
}
alias reformfile {
  if (!$exists($1)) { echo File not found. | return }
  var %i = 1, %replace, %matchez = 0
  while (%i <= $lines($1)) {
    if ($regsub($read($1,%i),$2, $3, %replace)) { write $1 $+ .ref %replace | inc %matchez }
    inc %i
  }
  echo Done, %matchez lines replaced, saved as $1 $+ .ref
}
alias tpurge {
  var %i = 1
  sort score
  while ($hof(%i,1)) {
    if ($hof(%i,2) <= $$1) { copyentry $$scoresfil $$tempfil $hof(%i,1) }
    inc %i
  }
}
alias tdpurge {
  var %i = 1
  sort score
  while ($hof(%i,1)) {
    if ($round($calc(($ctime($date) - $ctime($hof(%i,6)))/86400),0) > $$1) { copyentry $$scoresfil $$tempfil $hof(%i,1) }
    inc %i
  }
}
alias copyentry {
  write $2 $$read($1, w, $3 $+ ;*)
  write -dl $+ $$readn $1
}
alias debackburn { mergefiles $tempfil $scoresfil }
alias mergefiles {
  echo Merging files $1 and $2
  if (!$exists($1)) { echo -a $1 does not exist. | return }
  if (!$exists($2)) { echo -a $2 does not exist. | return }
  while ($lines($1) > 0) {
    if ($numtok($read($1,1),$asc(;)) <= 1) { echo -a ERROR, file does not appear to be standard format. | return }
    var %player = $gettok($read($1,1),1,$asc(;))
    mergeentry $1 $2 %player
  }
}
alias mergeentry {
  var %merger = $read($1, wnt, $3 $+ ;*)
  var %other = $read($2, wnt, $3 $+ ;*)
  var %merger.line = $readn
  if (%merger) {
    if (%other) {
      write $2 PlayerMoving= $+ %merger
      write -d1 $+ %merger.line $1
      tmergeplayers PlayerMoving= $+ $3 $3
    }
    else copyentry $1 $2 $3
  }
}
alias tfind {
  if ($exists($scoresfil)) {
    echo -a Finding Duplicate Entries
    window -h $twin
    filter -fwc $scoresfil $twin
    var %k = $line($twin,0)
    while (%k > 0) {
      %hostname = $replace($mask($gettok($line($twin,%k), $gttok(address), 59),2),.,\.,*,.*)
      if (%hostname) {
        var %j = 1
        var %fline = $fline($twin,$str([^;]*;,7) $+ %hostname $+ ;.*,1,2)
        while (%fline) {
          if (%j == 2) {
            echo -a Multiple references:
            echo -a ... $gettok($line($twin,%prev.fline),1,59) ... $gettok($line($twin,%prev.fline),$gttok(address),59)
          }
          if (%j >= 2) {
            echo -a ... $gettok($line($twin,%fline),1,59) ... $gettok($line($twin,%fline),$gttok(address),59)
            dline $twin %prev.fline
          }
          inc %j
          var %prev.fline = %fline
          var %fline = $fline($twin,$str([^;]*;,7) $+ %hostname $+ ;.*,2,2)
        }
      }
      dec %k
    }
  }
  echo -a To combine entries use: /tmerge <from-nick> <to-nick>
  window -c $twin
}
alias tmerge {
  tmergeplayers $1 $2
  tsay $msg.trivia.stats($2)
}
alias tmergeplayers {
  if (($$realvar($$1,score)) && ($$realvar($$2,score))) {
    var %i = $numtok($unit.tokens, $asc(.))
    while (%i > 0) {
      var %unit = $gettok($unit.tokens, %i, $asc(.))
      if ($realvar($1, %unit) == $eval($ $+ get. $+ %unit,2)) {
        if ($realvar($2, %unit) == $eval($ $+ get. $+ %unit,2)) {
          setvar $2 %unit $+ score $calc($realvar($2,%unit $+ score) + $realvar($1,%unit $+ score))
          if ($realvar($1, %unit $+ WPM) > $realvar($2,%unit $+ WPM)) { setvar $2 %unit $+ WPM $realvar($1, %unit $+ WPM) }
          if ($realvar($1, %unit $+ streak) > $realvar($2,%unit $+ streak)) { setvar $2 %unit $+ streak $realvar($1, %unit $+ streak) }
          if ($realvar($1, %unit $+ time) < $realvar($2,%unit $+ time)) { setvar $2 %unit $+ time $realvar($1, %unit $+ time) }
        }
        else {
          setvar $2 %unit $+ score $realvar(%unit $+ score)
          setvar $2 %unit $+ WPM $realvar(%unit $+ WPM)
          setvar $2 %unit $+ streak $realvar(%unit $+ streak)
          setvar $2 %unit $+ time $realvar(%unit $+ time)
        }
      }
      dec %i
    }
    setvar $2 score $calc($realvar($2,score) + $realvar($1,score))
    if ($realvar($1, wpm) > $realvar($2,wpm)) { setvar $2 wpm $realvar($1, wpm) }
    if ($realvar($1, streak) > $realvar($2,streak)) { setvar $2 streak $realvar($1, streak) }
    if ($realvar($1, time) < $realvar($2,time)) { setvar $2 time $realvar($1, time) }
    setvar $2 admin $or($realvar($1,admin),$realvar($2,admin))
    deleteplayer $1
  }
}
alias trename {
  setvar $1 name $2
  tsay $msg.trivia.stats($2)
}
alias triviad {
  if (($1 >= 1) && ($2)) { .timertriviaad 0 $calc($$1 * 60) timer.ad $chan $2- }
  else { .timertriviaad off } 
}
alias triviad2 { 
  if (($1 >= 1) && ($2)) { .timertriviaad 0 $calc($$1 * 60) msg $chan $e1($2-) } 
  else { .timertriviaad off } 
}
alias truntimes {
  if (($regex($1,/\d+:\d+/)) && ($regex($2,/\d+:\d+/))) {
    .timertriviarunon -o $1 1 1 tboton $1
    .timertriviarunoff -o $2 1 1 tbotoff $2
  }
  else { .timertriviarun* off }
}
alias tboton {
  .timertriviarunon -o $1 1 1 tboton $1
  setset status bot 1
  trivia
}
alias tbotoff {
  .timertriviarunoff -o $1 1 1 tbotoff $1
  if ($trivia.on) { strivia }
  setset status bot 0
}
alias tempfil { return backburner.txt }
alias timer.ad { if (!$trivia.on) { msg $1 $e1($2-) } }
;########################################################
;# DIALOGS.                                             #
;########################################################
dialog trivset {
  title "Trivia Settings"
  size -1 -1 456 356
  option pixels
  tab General, 1, 4 0 456 359
  box Channels, 9, 12 28 266 80, tab 1
  text Delimiter, 10, 22 287 48 13, tab 1
  text Add/Report, 11, 18 265 60 13, tab 1
  button Add, 24, 20 156 44 16, tab 1
  edit , 30, 72 81 198 22, tab 1 multi autohs
  edit $triv(delimiter), 31, 84 287 30 22, tab 1
  edit $triv(additions), 32, 84 261 86 22, tab 1 multi autohs
  edit $triv(report), 33, 172 261 86 22, tab 1 multi autohs
  edit $triv(dir), 35, 84 235 174 22, tab 1 multi autohs
  text Percent Hint, 14, 288 64 68 13, tab 1
  edit $triv(perchint), 99, 384 60 36 20, tab 1
  text Number of hints, 15, 288 46 80 13, tab 1
  edit $triv(numhint), 861, 384 38 36 20, tab 1
  text Hint Reduction, 16, 288 260 80 13, tab 1
  edit $triv(DPH), 863, 400 256 36 20, tab 1
  text Points per answer, 17, 288 238 88 13, tab 1
  edit $triv(PPQ), 65, 400 234 36 20, tab 1
  list 108, 70 40 200 40, tab 1 size
  button Add, 115, 22 48 46 16, tab 1
  button Remove, 119, 22 64 46 16, tab 1
  text Channel:, 125, 16 84 50 16, tab 1
  edit , 132, 68 192 202 21, tab 1 multi autohs
  box "Points", 133, 280 220 168 64, tab 1
  box "Global", 134, 12 224 264 120, tab 1
  button "Scores", 141, 20 196 44 16, tab 1
  button "Define", 20, 216 288 47 17, tab 1
  check "Trivia Ranks", 148, 132 288 80 20, tab 1
  check Crosshatch, 47, 288 96 80 20, tab 1
  text Chr, 21, 372 96 19 13, tab 1
  edit , 961, 392 96 24 18, tab 1
  box "Hints", 80, 280 28 168 192, tab 1
  radio "Scatter", 58, 336 148 56 16, group tab 1
  radio "Plot", 129, 392 148 44 16, tab 1
  radio "Basic", 130, 288 148 48 16, tab 1
  text $hint.example, 199, 288 132 154 16, tab 1
  check "Say Hint Number", 147, 288 112 100 20, tab 1
  radio "Standard", 149, 284 184 68 16, group tab 1
  radio "Last", 150, 360 184 44 16, tab 1
  radio "Vowels", 151, 284 200 60 16, tab 1
  radio "Random", 152, 360 200 68 16, tab 1
  text "First Hint Type", 153, 288 168 74 12, tab 1
  button "Remove", 12, 20 172 44 16, tab 1
  list 34, 68 156 202 32, tab 1 sort size
  box "Channel Properties", 83, 12 108 266 116, tab 1
  edit $triv(translate), 131, 104 312 152 21, tab 1 multi autohs
  button "Translation File", 136, 20 316 79 17, tab 1
  button "Trivia Dir", 13, 20 240 63 17, tab 1
  text "Nick", 543, 28 128 30 16, tab 1
  edit "", 544, 68 124 76 21, tab 1 multi autohs
  text "Network", 66, 148 128 42 16, tab 1
  edit "", 67, 192 124 76 21, tab 1 multi autohs
  check Auto-Hint, 41, 288 79 72 20, tab 1
  tab Options, 6
  text questions, 18, 72 143 52 13, tab 6
  check No-activity off, 88, 20 126 88 20, tab 6
  edit $triv(naoff), 89, 36 143 30 20, tab 6
  text seconds, 19, 174 143 44 13, tab 6
  check Hint-Pause, 96, 120 126 88 20, tab 6
  edit $triv(hintpause), 97, 138 143 30 20, tab 6
  check Echo Answer, 40, 20 40 88 20, tab 6
  check Timeout Answer, 45, 120 75 96 20, tab 6
  check Join Message, 46, 12 220 96 20, tab 6
  check Traditional win, 48, 20 75 88 20, tab 6
  check Auto-Start, 49, 224 40 88 20, tab 6
  check Say Scramble:, 53, 120 40 88 20, tab 6
  check Showteam End, 55, 120 58 96 20, tab 6
  check Answer Space, 56, 224 92 88 20, tab 6
  check No Mid-Match, 57, 320 126 88 20, tab 6
  check Show Matched, 59, 120 92 88 20, tab 6
  check Use Adate, 60, 20 58 88 20, tab 6
  check No ? end, 830, 320 40 88 20, tab 6
  check No Spell Correct, 817, 320 109 96 20, tab 6
  check "Monday Week", 126, 224 58 88 20, tab 6
  check Limit Guesses, 51, 224 126 88 20, tab 6
  edit $triv(limitguess), 144, 236 143 28 20, tab 6
  check Round HoF, 52, 224 75 88 20, tab 6
  edit , 22, 12 248 432 53, tab 6 read multi autovs
  edit $triv(onjoin), 138, 108 220 340 21, tab 6 multi autohs
  check No Partial Match, 43, 320 143 96 20, tab 6
  text "tries", 146, 268 143 34 16, tab 6
  check No Decheater, 44, 320 58 88 20, tab 6
  check No Color Short, 61, 320 75 88 20, tab 6
  check "Score", 106, 20 180 56 20, tab 6
  check "Time", 169, 80 180 52 20, tab 6
  check "Streak", 171, 136 180 56 20, tab 6
  check "WPM", 173, 204 180 52 20, tab 6
  box "Hide Stat", 174, 12 168 252 36, tab 6
  check "No Catergories", 62, 320 92 96 20, tab 6
  check "Empty Off", 54, 20 92 88 20, tab 6
  check "No Bonus", 50, 320 160 88 20, tab 6
  check "No Q number", 63, 320 177 88 20, tab 6
  box Settings, 70, 8 24 440 188, tab 6
  check "Keep Ask", 156, 20 109 68 20, tab 6
  check "Show Nothing", 143, 120 108 92 20, tab 6
  tab Defaults, 2
  box , 23, 8 43 250 64, tab 2
  box , 25, 258 43 154 64, tab 2
  check Colors, 116, 12 32 76 16, tab 2 push
  text Primary, 110, 18 58 60 13, tab 2
  text Secondary, 120, 18 78 60 13, tab 2
  edit $tc(1), 121, 80 58 30 20, tab 2 read
  edit $tc(2), 122, 80 78 30 20, tab 2 read
  edit $tc(3), 123, 263 58 30 20, tab 2 read
  edit $tc(4), 124, 263 78 30 20, tab 2 read
  check B, 117, 205 58 20 20, tab 2 push
  check U, 118, 228 58 20 20, tab 2 push
  check B, 127, 205 78 20 20, tab 2 push
  check U, 128, 228 78 20 20, tab 2 push
  combo 111, 116 56 80 240, tab 2 size drop
  combo 112, 116 80 80 240, tab 2 size drop
  combo 113, 300 60 80 240, tab 2 size drop
  combo 114, 300 80 80 240, tab 2 size drop
  box Time, 26, 8 108 168 216, tab 2
  text Before Start, 27, 18 126 98 13, tab 2
  text Between Questions (answered), 36, 18 244 98 29, tab 2
  text Given to Answer, 37, 18 150 98 13, tab 2
  text Before Auto-Hint, 38, 18 200 98 13, tab 2
  text (timed-out), 39, 18 274 98 17, tab 2
  text Before hint allowed, 862, 18 174 98 13, tab 2
  text Between Ping Delay, 167, 18 296 98 16, tab 2
  text Between Auto-Hints, 177, 18 220 98 13, tab 2
  edit $slag(start), 135, 120 126 50 20, tab 2
  edit $slag(answered), 145, 120 244 50 20, tab 2
  edit $slag(timedout), 155, 120 148 50 20, tab 2
  edit $slag(hint), 165, 120 192 50 20, tab 2
  edit $slag(timed), 175, 120 270 50 20, tab 2
  edit $slag(hintallow), 185, 120 170 50 20, tab 2
  edit $slag(ping), 195, 120 296 48 21, tab 2
  edit $slag(betweenhint), 205, 120 216 48 21, tab 2
  box Questions, 64, 178 108 150 116, tab 2
  text Default Round, 68, 252 118 70 13, tab 2
  text Champ Goal, 69, 184 300 62 13, tab 2
  text Team Round, 71, 252 158 70 13, tab 2
  edit $triv(default), 299, 252 134 63 20, tab 2
  edit $triv(reset), 215, 248 296 63 20, tab 2
  edit $triv(dteam), 217, 252 174 63 20, tab 2
  button $record.type($triv(Record)), 218, 186 198 133 20, tab 2
  button Themes, 700, 246 236 68 20, tab 2
  radio Unlimited, 201, 184 150 64 20, tab 2
  radio Team, 202, 184 172 52 20, tab 2
  radio Normal, 203, 184 128 60 20, tab 2
  check Disable, 816, 184 236 56 20, tab 2
  box , 8, 178 220 150 48, tab 2
  check "Background", 158, 260 32 76 16, tab 2 push
  check Champ Mode, 42, 184 276 88 17, tab 2
  box , 179, 178 264 152 60, tab 2
  box Score By, 178, 328 108 84 76, tab 2
  check "Change", 182, 336 120 68 20, tab 2
  combo 183, 336 148 72 100, tab 2 size drop
  tab Teams, 3
  box Names, 72, 12 72 400 72, tab 3
  text Team 1, 73, 20 88 42 20, tab 3
  text Team 2, 74, 20 112 42 20, tab 3
  text Team 3, 308, 212 88 42 20, disable tab 3
  text Team 4, 309, 212 112 42 20, disable tab 3
  box Victories, 75, 12 144 412 144, tab 3
  text Tied Message, 76, 20 168 66 13, tab 3
  text Team 1 Wins, 77, 20 192 66 13, tab 3
  text Team 2 Wins, 78, 20 216 66 13, tab 3
  text Team 3 Wins, 303, 20 240 66 16, disable tab 3
  text Team 4 Wins, 304, 20 264 66 16, disable tab 3
  edit $te(1), 380, 60 88 148 20, tab 3 multi autohs
  edit $te(2), 381, 60 112 148 20, tab 3 multi autohs
  edit $te(4), 382, 252 112 148 20, disable tab 3 multi autohs
  edit $te(3), 383, 252 88 148 20, disable tab 3 multi autohs
  edit $te(0).victory, 320, 84 168 320 20, tab 3 multi autohs
  edit $te(1).victory, 321, 84 192 320 20, tab 3 multi autohs
  edit $te(2).victory, 322, 84 216 320 20, tab 3 multi autohs
  edit $te(3).victory, 323, 84 240 320 20, disable tab 3 multi autohs
  edit $te(4).victory, 324, 84 264 320 20, disable tab 3 multi autohs
  check Limit Join Period, 330, 276 32 88 20, tab 3 push
  edit $te(JoinBefore), 335, 276 51 88 20, tab 3
  radio 2 Teams, 28, 48 40 76 20, tab 3
  radio 4 Teams, 29, 144 40 76 20, tab 3
  tab Awards, 4
  box Awards, 79, 14 48 380 152, tab 4
  button Delete, 411, 400 80 48 20, tab 4
  button Add, 412, 400 56 48 20, tab 4
  list 420, 19 64 368 130, tab 4 size
  text "* is winner's nick.", 81, 214 257 92 13, tab 4
  text "^ is value of trigger", 82, 316 257 104 13, tab 4
  check Disable, 819, 20 28 76 17, tab 4
  combo 137, 72 212 68 100, tab 4 size drop
  edit "", 139, 268 212 68 21, tab 4
  text "Award", 140, 12 272 42 16, tab 4
  edit "", 142, 68 272 364 21, tab 4 multi autohs
  text "Trigger on", 154, 12 212 54 16, tab 4
  combo 159, 188 212 68 100, tab 4 size drop
  text "and", 160, 340 216 22 16, hide tab 4
  edit "", 161, 368 212 68 21, hide tab 4
  text "points", 162, 300 236 34 16, tab 4
  text "Do Action", 163, 12 252 50 16, tab 4
  text "values", 164, 144 212 38 16, tab 4
  combo 166, 68 248 140 100, tab 4 size drop
  tab Status, 5
  text Trivia Script version:, 84, 24 40 150 20, tab 5
  text $strip($msg.trivia.version), 85, 184 40 150 20, tab 5
  text Trivia bot is currently:, 86, 24 62 150 20, tab 5
  text $trivon, 504, 184 62 80 20, tab 5
  text Current mIRC version is:, 87, 24 84 150 20, tab 5
  text $version, 90, 184 84 80 20, tab 5
  text Current Trivia directory exists:, 91, 24 106 150 20, tab 5
  text $trivia.dir, 92, 184 106 80 20, tab 5
  text Currently in Trivia Channel:, 93, 24 128 150 20, tab 5
  text $trivia.chan, 94, 184 128 80 20, tab 5
  text Question file in Directory:, 95, 24 150 150 20, tab 5
  text $trivia.file, 98, 184 150 80 20, tab 5
  text Number of questions:, 103, 24 172 150 20, tab 5
  text $numl, 104, 184 172 78 20, tab 5
  button Delete Scores, 515, 308 96 80 20, tab 5
  button Scores, 519, 308 68 80 20, tab 5
  list 601, 26 202 288 42, tab 5 sort size
  button Unban, 602, 326 224 80 20, tab 5
  button Ban, 603, 326 202 80 20, tab 5
  list 610, 26 248 288 42, tab 5 sort size
  button Add Friend, 611, 326 250 80 20, tab 5
  button Remove, 612, 326 272 80 20, tab 5
  tab Commands, 7
  box Command Limits, 105, 188 144 208 48, tab 7
  combo 806, 200 160 184 132, disable tab 7 size drop
  text Command Prefix, 107, 24 296 82 16, tab 7
  edit %command-prefix, 850, 116 296 36 21, tab 7
  text blank = default, 109, 28 312 82 16, tab 7
  button "Build HTML Options", 157, 188 296 107 21, tab 7
  list 800, 20 52 156 236, tab 7 size
  text "Commands", 170, 20 32 62 16, tab 7
  combo 809, 200 208 184 100, disable tab 7 size drop
  box "Respond Method", 168, 188 192 208 48, tab 7
  check "Disable", 801, 192 48 68 16, tab 7
  text "Name", 172, 192 72 34 16, tab 7
  edit "", 803, 232 68 120 21, tab 7 read
  edit "", 802, 188 92 204 49, tab 7 read multi autovs
  box "Default Respond Method", 180, 184 244 216 44, tab 7
  combo 181, 200 260 184 100, tab 7 size drop
  box "Command Attributes", 176, 184 32 216 212, tab 7
  button Cancel, 101, 366 326 40 20, cancel
  button OK, 100, 409 326 40 20, ok
  button Apply, 102, 324 326 40 20
  link $nopath($trivia.web), 518, 364 304 72 16
}
;########################################################
;# DIALOG EVENTS.                                       #
;########################################################
on *:dialog:trivset:init:*:{
  var %i = 1
  while ($getset(chan, %i)) {
    did -a $dname 108 $gettok($getset(chan, %i), 1, 59)
    inc %i
  }
  if ($did(108,1)) { did -c $dname 108 1 }
  var %i = $numtok($status.toks, $asc(.))
  while (%i >= 1) {
    if ($getset(status, $gettok($status.toks, %i, $asc(.))) == 1) { did -c $dname $calc(39 + %i) }
    dec %i
  }
  if (!$did(58).state) {
    if (!$getset(status, plot)) { did -c $dname 130 }
    else { did -c $dname 129 }
  }
  if ($getset(trivia,ranks) == 1) { did -c $dname 148 }
  if ($getset(status,naoff) == 1) { did -c $dname 88 }
  if ($getset(status,hintpause) == 1) { did -c $dname 96 }
  if ($getset(status,autostart) == 1) { did -c $dname 49 }
  if ($getset(status,monday) == 1) { did -c $dname 126 }
  if ($getset(status,noautoqm) == 1) { did -c $dname 830 }
  if ($getset(status,noawards) == 1) { did -c $dname 819 }
  if ($getset(status,nospellfix) == 1) { did -c $dname 817 }
  if ($getset(status,sayhintnum) == 1) { did -c $dname 147 }
  if ($getset(status,keepask) == 1) { did -c $dname 156 }
  if ($getset(status,shownone) == 1) { did -c $dname 143 }
  did -c $dname $calc(149 + $getset(trivia,firsthint))
  if ($getset(hide,score) == 1) { did -c $dname 106 }
  if ($getset(hide,time) == 1) { did -c $dname 169 }
  if ($getset(hide,streak) == 1) { did -c $dname 171 }
  if ($getset(hide,wpm) == 1) { did -c $dname 173 }
  if ($getset(color,on) == 1) { did -c $dname 116 }
  if ($getset(color,bon) == 1) { did -c $dname 158 }
  if ($getset(color,1-bold) == 1) { did -c $dname 117 }
  if ($getset(color,1-underline) == 1) { did -c $dname 118 }
  if ($getset(color,2-bold) == 1) { did -c $dname 127 }
  if ($getset(color,2-underline) == 1) { did -c $dname 128 }
  if ($getset(trivia,odefault) == Unlimited) { did -c $dname 201 }
  elseif ($getset(trivia,odefault) == Team) { did -c $dname 202 }
  else { did -c $dname 203 }
  if ($getset(team,Joinbeforeon) == 1) { did -c $dname 330 }
  if ($getset(team,4-team) == 1) {
    trivset.teams 1
    did -c $dname 29
  }
  else { did -c $dname 28 }
  var %i = 0
  while (%i <= 16) {
    did -a $dname 111,112,113,114 $colorcode(%i)
    inc %i
  }
  did -a $dname 806 Default
  did -a $dname 806 User
  did -a $dname 806 Voice
  did -a $dname 806 Half-Op
  did -a $dname 806 Op
  did -a $dname 806 Friend
  did -a $dname 806 Nobody
  did -c $dname 806 1
  did -a $dname 183 Day
  did -a $dname 183 Week
  did -a $dname 183 Month
  did -a $dname 183 Year
  did -a $dname 183 Total
  did -c $dname 183 $ifd($getset(status,scoreby),5)
  did -a $dname 181,809 Default
  did -a $dname 181,809 Notice
  did -a $dname 181,809 MSG Channel
  did -a $dname 181,809 MSG User
  did -a $dname 181,809 Describe Channel
  did -c $dname 181 $ifd($getset(status,respondlevel),1)
  did -c $dname 809 1
  did -c $dname 111 $calc($did(121) + 1)
  did -c $dname 112 $calc($did(122) + 1)
  did -c $dname 113 $calc($did(123) + 1)
  did -c $dname 114 $calc($did(124) + 1)
  awards.load
  var %i = 1
  while ($setini(banned,%i)) {
    did -a $dname 601 $getset(banned,%i)
    inc %i
  }
  did -a $dname 961 $iif($chr($triv(ch)),$chr($triv(ch)),_)
  disable.load
  trivia.load.friends
  check.toggle.multichan
  check.toggle.options
  check.color.toggle
  check.awards.toggle
  multichan.load
}
on *:dialog:trivset:sclick:100,102:{
  setset trivia delimiter $did(31)
  setset trivia additions $did(32)
  setset trivia report $did(33)
  setset trivia dir $did(35)
  setset trivia translate $did(131)
  setset status plot $did(129).state
  setset status naoff $did(88).state
  setset status monday $did(126).state
  setset status noautoqm $did(830).state
  setset status noawards $did(819).state
  setset status nospellfix $did(817).state
  setset status sayhintnum $did(147).state
  setset status keepask $did(156).state
  setset status shownone $did(143).state
  setset hide score $did(106).state
  setset hide time $did(169).state
  setset hide streak $did(171).state
  setset hide wpm $did(173).state
  setset trivia naoff $did(89)
  setset status hintpause $did(96).state
  setset trivia hintpause $did(97)
  setset trivia limitguess $did(144)
  setset trivia perchint $did(99)
  setset trivia numhint $did(861)
  setset trivia DPH $did(863)
  setset trivia PPQ $did(65)
  var %i = 0
  while (%i < 4) {
    if ($did($calc(149 + %i)).state == 1) setset trivia firsthint %i
    inc %i
  }
  setset trivia ranks $did(148).state
  setset color on $did(116).state
  setset color bon $did(158).state
  setset color 1-bold $did(117).state
  setset color 1-underline $did(118).state
  setset color 2-bold $did(127).state
  setset color 2-underline $did(128).state
  setset team JoinBeforeon $did(330).state
  setset team Joinbefore $did(335)
  setset color 1 $int($did(121))
  setset color 2 $int($did(122))
  setset color 3 $int($did(123))
  setset color 4 $int($did(124))
  varcolors
  var %i = 1
  while (%i <= 8) {
    setset lag $gettok(start.answered.timedout.hint.timed.hintallow.ping.betweenhint, %i, $asc(.)) $int($did($calc(125 + (%i * 10))))
    inc %i
  }
  var %i = $numtok($status.toks, $asc(.))
  while (%i >= 1) {
    setset status $gettok($status.toks, %i, $asc(.)) $did($calc(39 + %i)).state
    dec %i
  }
  setset trivia onjoin $did(138)
  setset trivia default $int($did(299))
  setset trivia odefault
  if ($did(201).state == 1) { setset trivia odefault Unlimited }
  if ($did(202).state == 1) { setset trivia odefault Team }
  setset trivia reset $int($did(215))
  setset trivia dteam $int($did(217))
  setset award
  var %i = 1
  while (%i <= $did(420).lines) {
    setset award %i $did(420,%i)
    inc %i
  }
  setset team 1 $did(380)
  setset team 2 $did(381)
  setset team 3 $did(382)
  setset team 4 $did(383)
  setset team 0victory $did(320)
  setset team 1victory $did(321)
  setset team 2victory