All pastes #899751 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-02-11 12:27 UTC
rendered paste body
menu channel {
  -
  Start Unique: {
    dialog -mod unique unique
    set %uchan #
    set %uline 1
    unset %uscore*
    if (!$chan(#).ial) who #
    did -a unique 10 $read(%ufile,%uline)
  }
}

dialog Unique {
  title "Unique Quiz by dodgo"
  size -1 -1 161 160
  option dbu
  list 1, 4 5 95 124, size extsel
  button "Ask Question", 2, 106 29 50 12
  button "Description", 3, 106 6 50 12
  button "Award Selected", 4, 106 57 50 12
  edit "", 5, 135 77 21 10, center
  text "Time Limit:", 6, 107 79 28 8
  button "Quit", 7, 106 117 50 12, ok
  button "End Quiz", 8, 106 89 50 12
  button "Load File", 9, 106 103 50 12
  text "", 10, 4 132 151 28
  button "Stop", 12, 135 43 21 12
  text "time", 13, 110 45 17 8, center
}

on 1:DIALOG:unique:init:0:unset %quizscorehigh

on 1:DIALOG:unique:sclick:3:describe %uchan This is a unique quiz. Points are awarded for each first unique answer. Answers MUST be prefixed by '-' or '='. ONE ATTEMPT per person ONLY.
on 1:DIALOG:unique:sclick:2:uask
on 1:DIALOG:unique:sclick:4:uaward
on 1:DIALOG:unique:sclick:8:uend
on 1:DIALOG:unique:sclick:9:uload
on 1:DIALOG:unique:sclick:12:ustop
on 1:DIALOG:unique:sclick:7:timertime off

on *:TEXT:*:%uchan: if ((%uask == on) && (($left($$1,1) == -) || ($left($$1,1) == =)) && ($nick !isin %uanswered)) { did -a unique 1 $nick -> $right($$1-,-1) | set %uanswered $addtok(%uanswered,$nick,32) }

on *:NICK:{ 
  if (!$dialog(quiz)) halt
  var %nickchange 1
  while (%nickchange <= $did(quiz,1).lines) {
    if ($gettok($did(quiz,1,%nickchange),1,32) != <) did -o quiz 1 %nickchange $replace($did(quiz,1,%nickchange),$nick,$newnick)
    inc %nickchange
  }
}

alias uask {
  unset %uanswered
  unset %ucorrect
  describe %uchan Q: $read(%ufile,%uline)
  inc %uline
  did -b unique 2
  set %uask on
  did -b unique 4
  unset %utime
  did -o unique 13 1 0
  .timertime 0 1 utimer
  did -r unique 10
  did -a unique 10 $read(%ufile,%uline)
  inc %uline
  did -b unique 8
}

alias utimer {
  inc %utime
  did -o unique 13 1 %utime
  if (%utime == $did(unique,5)) ustop
}

alias ustop {
  .timertime off
  set %uask stop
  did -e unique 4
  describe %uchan Time Up ( $+ %utime seconds)
}

alias uaward {
  if (%uask == off) {
    inc %uline 2
    did -r unique 10
    did -a unique 10 $read(%ufile,%uline)
    halt
  }
  var %count 1
  while (%count <= $did(unique,1,0).sel) {
    ucorrect $did(unique,1,$did(unique,1,%count).sel)
    set %ucorrect $addtok(%ucorrect,$chr(32) $+ $gettok($did(unique,1,$did(unique,1,%count).sel),1,32),44)
    inc %count
  }
  did -r unique 1
  did -r unique 10
  did -a unique 10 $read(%ufile,%uline)
  uscoreupdate
  describe %uchan Congrats: %ucorrect
  describe %uchan SCORES: %uscoretally
  unset %quizupdate*
  set %uask off
  did -e unique 2
  did -e unique 8
}

alias ucorrect { 
  set %quizaddress $address($$1,3)
  set %quiz [ $+ [ %quizaddress ] ] $$1
  if (!%uscorehigh) set %uscorehigh 0
  set %quizoldsc %uscorehigh
  set %quiznewsc $calc(%uscorehigh + 1)
  while (%quizoldsc >= 1) {
    if ($istok(%uscore [ $+ [ %quizoldsc ] ] ,%quizaddress,32)) { scoresetup | return }
    dec %quizoldsc
    dec %quiznewsc
  }
  set %uscore1 $addtok(%uscore1,%quizaddress,32) 
  set %quiznewsc 1 
  if (%uscorehigh == 0) set %uscorehigh 1
}

alias scoresetup {
  set %uscore [ $+ [ %quizoldsc ] ] $remtok(%uscore [ $+ [ %quizoldsc ] ] ,%quizaddress,1,32) | set %uscore [ $+ [ %quiznewsc ] ] $addtok(%uscore [ $+ [ %quiznewsc ] ] ,%quizaddress,32)
  if (%quiznewsc > %uscorehigh) set %uscorehigh %quiznewsc
}

alias uscoreupdate {
  if (!%uscorehigh) return
  unset %uscoretally
  set %quizsc 1
  set %quizf %uscorehigh
  :scoreloop
  set %quizt 1
  while (%quizt <= $numtok(%uscore [ $+ [ %quizsc ] ] ,32)) {
    if ($ial($gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32)).nick) set %quizupdate [ $+ [ %quizsc ] ] $addtok(%quizupdate [ $+ [ %quizsc ] ] ,$chr(32) $+ $iif($ial($gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32),1).nick isin %ucorrect,+) $+ $ial($gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32)).nick $+ ,44)
    else set %quizupdate [ $+ [ %quizsc ] ] $addtok(%quizupdate [ $+ [ %quizsc ] ] ,$chr(32) $+ %quiz [ $+ [ $gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32) ] ] ,44)
    inc %quizt
  }
  inc %quizsc
  if (%quizsc != $calc(%uscorehigh + 1)) goto scoreloop
  while (%quizsc > 1) { 
    dec %quizsc
    if (%quizupdate [ $+ [ %quizsc ] ]) set %uscoretally $addtok(%uscoretally,$chr(40) $+ %quizsc $+ $chr(41) $+ $chr(60) $+ $right(%quizupdate [ $+ [ %quizsc ] ] ,-1) $+ $chr(62),32)
  }
}

alias uend {
  if (!%uscorehigh) halt
  set %quizsc 1
  set %quizf %uscorehigh
  :finalloop
  set %quizt 1
  while (%quizt <= $numtok(%uscore [ $+ [ %quizsc ] ] ,32)) {
    tablenicks $ial($gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32)).nick
    inc %quizt
  }
  inc %quizsc
  if (%quizsc != $calc(%uscorehigh + 1)) goto finalloop
  table
}

alias tablenicks {
  if ($ial($gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32)).nick) set %quizfinal [ $+ [ %quizsc ] ] $addtok(%quizfinal [ $+ [ %quizsc ] ] , $chr(32) $+ $$1 ,44)
  else set %quizfinal [ $+ [ %quizsc ] ] $addtok(%quizfinal [ $+ [ %quizsc ] ] , $chr(32) $+ %quiz [ $+ [ $gettok(%uscore [ $+ [ %quizsc ] ] ,%quizt,32) ] ] ,44)
}

alias table {
  describe %uchan - FINAL SCORES -
  describe %uchan SCORE ---- NICKS
  .timershow -m 0 250 show
}

alias show {
  if (%quizfinal [ $+ [ %quizf ] ] ) describe %uchan < %quizf > $str(-,$calc(5 - $len(%quizf))) %quizfinal [ $+ [ %quizf ] ]
  dec %quizf
  if (%quizf == 0) {
    .timershow off
    unset %quizfinal*
    did -r unique 1
    unset %uscore*
  }
}

alias uload {
  set %ufile $$sfile($mircdir,Choose quiz file,Start Asking!)
  set %uline 1
  did -a unique 10 $read(%ufile,%uline)
}