; *********************************************************** ; * Trivia Script Written by Urza * ; * Email: Urza23@hotmail.com * ; * Planned updates: Add input events for local usage * ; * Usage: right click a channel and click Trivia Options * ; * to view the options dialog * ; * !trivia on/off to start/end trivia * ; * !hint for hints * ; * !next to go to the next question * ; * !repeat to repeat the last question * ; * !trivia help to view this commands list * ; * Notes: If questions file does not exist 6 defaults are * ; * loaded * ; *********************************************************** menu Channel,menubar { Trivia Options: dialog $iif($dialog(TriviaOptions),-v,-m) TriviaOptions TriviaOptions } dialog -l TriviaOptions { title "Trivia Options" size -1 -1 164 207 option dbu tab "Options", 1, 0 -1 161 188 box "Times", 2, 4 14 153 73, tab 1 text "", 3, 93 33 54 49, tab 1 text "Before first question:", 4, 8 24 60 8, tab 1 edit "", 5, 70 23 15 10, tab 1 text "To answer questions:", 6, 8 34 60 8, tab 1 edit "", 7, 70 33 15 10, tab 1 text "Between questions:", 8, 8 44 60 8, tab 1 edit "", 9, 70 43 15 10, tab 1 text "Before !next allowed:", 10, 8 54 60 8, tab 1 edit "", 11, 70 53 15 10, tab 1 text "Before hints allowed:", 12, 8 64 60 8, tab 1 edit "", 13, 70 63 15 10, tab 1 box "Allow/Restrict", 14, 4 90 152 92, tab 1 check "Hints", 15, 8 111 29 10, tab 1 text "Restrict to:", 16, 45 112 29 8, tab 1 combo 17, 75 110 60 10, tab 1 drop check "Hint 1: Shows answer spacing", 18, 45 121 95 10, tab 1 check "Hint 2: Shows Vowels", 19, 45 130 85 10, tab 1 check "Hint 3: Shows first half of the answer", 20, 45 139 107 10, tab 1 check "Hint 4: Shows first half of each word", 21, 45 148 101 10, tab 1 check "!Next", 22, 8 158 29 10, tab 1 text "Restrict to:", 23, 45 160 29 8, tab 1 combo 24, 75 158 60 10, tab 1 drop text "Enable/Disable Trivia - Restrict to:", 69, 7 99 84 8, tab 1 edit "", 68, 70 73 15 10, tab 1 text "Between hints:", 67, 8 74 60 8, tab 1 combo 70, 92 98 60 10, tab 1 drop combo 92, 75 170 60 10, tab 1 drop text "Restrict to:", 91, 45 172 29 8, tab 1 check "!Repeat", 90, 8 170 29 10, tab 1 tab "Options 2", 66 check "Allow answer anywhere in line", 25, 8 129 86 10, tab 66 check "Enable spell check. Answer must be", 26, 8 144 95 10, tab 66 edit "", 27, 103 145 15 10, tab 66 text "% right.", 28, 119 146 23 8, tab 66 check "Disable after ", 71, 8 114 40 10, tab 66 edit "", 72, 50 115 15 10, tab 66 text "Unanswered questions", 73, 67 116 65 8, tab 66 check "Maximum of ", 74, 8 99 40 10, tab 66 edit "", 75, 48 99 15 10, tab 66 text "Guesses per user", 76, 65 100 51 8, tab 66 box "Colours", 77, 4 16 153 62, tab 66 text "Colour 1:", 78, 8 26 25 8, tab 66 combo 79, 36 25 56 10, tab 66 drop check "Bold", 80, 95 24 22 10, tab 66 check "Underline", 81, 118 24 37 10, tab 66 check "Background", 82, 95 34 40 10, tab 66 combo 87, 36 55 55 10, tab 66 drop text "Colour 2:", 89, 7 56 25 8, tab 66 combo 88, 36 65 55 10, tab 66 drop check "Background", 84, 94 64 40 10, tab 66 check "Bold", 86, 94 54 22 10, tab 66 check "Underline", 85, 117 54 37 10, tab 66 combo 83, 36 35 56 10, tab 66 drop box "Assorted Options", 93, 5 90 152 69, tab 66 link "Restore default options", 94, 5 175 100 10, tab 66 tab "Access", 29 box "Current Trivia Games", 30, 4 14 153 80, tab 29 text "Trivia is currently running in the following rooms:", 31, 7 23 132 9, tab 29 list 32, 7 33 147 45, tab 29 size vsbar button "Disable in this channel", 33, 47 79 66 12, tab 29 box "Trivia Access", 34, 3 95 153 90, tab 29 text "Allowed:", 35, 6 104 60 8, tab 29 center combo 36, 6 113 61 50, tab 29 size button "Add", 37, 70 113 20 12, tab 29 button "Delete", 38, 70 136 20 12, tab 29 text "Blocked:", 39, 92 104 60 8, tab 29 center combo 40, 92 113 60 50, tab 29 size radio "Disable by default, Allow only in specified channels", 41, 8 163 134 10, tab 29 radio "Enable by default, Block in specified channels", 42, 8 172 132 10, tab 29 tab "Questions", 43 text "Questions:", 44, 4 14 31 8, tab 43 list 45, 4 22 154 57, tab 43 size hsbar vsbar button "Add", 46, 4 82 40 15, tab 43 button "Edit", 47, 63 82 40 15, tab 43 button "Delete", 48, 118 82 40 15, tab 43 text "Answers:", 49, 6 99 25 8, tab 43 list 50, 4 108 154 50, tab 43 size hsbar vsbar button "Add", 51, 4 161 40 15, tab 43 button "Edit", 52, 63 161 40 15, tab 43 button "Delete", 53, 118 161 40 15, tab 43 link "Click here to view the questions file", 100, 40 177 87 10, tab 43 tab "Points", 54 box "Select score set", 55, 4 14 154 44, tab 54 radio "Overall Scores", 56, 8 24 50 10, tab 54 radio "Network Scores", 57, 8 34 50 10, tab 54 combo 58, 64 34 89 10, tab 54 drop radio "Channel Scores", 59, 8 44 50 10, tab 54 combo 60, 64 44 89 10, tab 54 drop list 61, 3 62 154 105, tab 54 size button "Give Points", 62, 4 171 42 12, tab 54 button "Remove points ", 63, 115 171 42 12, tab 54 button "Set points to", 64, 60 171 42 12, tab 54 button "Close", 65, 122 192 37 12, ok } on *:dialog:TriviaOptions:init:*: { did -a $dname 17,24,70,92 Op and above did -a $dname 17,24,70,92 Halfop and above did -a $dname 17,24,70,92 Voice and above did -a $dname 17,24,70,92 Anybody did -a $dname 3 Enter the desired time in seconds for each option. $& If left blank or an invalid entry is made the defaults will be used did -b $dname 58,60 var %x = 1, %colours = white,black,blue,green,red,dark red,purple,orange,yellow, $& light green,aqua,cyan,light blue,pink,grey,light grey while (%x <= $numtok(%colours,44)) { did -a $dname 79,83,87,88 $gettok(%colours,%x,44) inc %x } var %x = 1, %total = $ini(TriviaOptions.ini,Allowed,0) while (%x <= %total) { did -a $dname 36 $ini(TriviaOptions.ini,Allowed,%x) inc %x } var %x = 1, %total = $ini(TriviaOptions.ini,Blocked,0) while (%x <= %total) { did -a $dname 40 $ini(TriviaOptions.ini,Blocked,%x) inc %x } var %x = 1, %total = $lines(Questions.txt) while (%x <= %total) { var %question = $gettok($read(Questions.txt,%x),1,124) did -a $dname 45 %question inc %x } var %x = 1, %total = $hfind(TriviaScores,*.Global*.*,0,w) while (%x <= %total) { var %item = $hfind(TriviaScores,*.Global.*,%x,w), %network = $gettok(%item,1,46) var %pos = $pos(%item,.Global.,1), %network = $left(%item,$calc(%pos - 1)) if (!$istok(%added,%network,124)) did -a $dname 58 %network var %added = $addtok(%added,%network,124) inc %x } unset %added did -c $dname 58 1 var %x = 1, %total = $hfind(TriviaScores,*.#*.*,0,w) while (%x <= %total) { var %item = $hfind(TriviaScores,*.#*.*,%x,w) var %pos = $pos(%item,.#,1), %network = $left(%item,$calc(%pos - 1)) var %lasttok = $calc($numtok(%item,46) - 1), %firsttok = $calc($numtok(%network,46) + 1) var %chan = $gettok(%item,$+(%firsttok,-,%lasttok),46) if (!$istok(%added,$+(%network,%chan),124)) did -a $dname 60 %chan $+($chr(40),%network,$chr(41)) var %added = $addtok(%added,$+(%network,%chan),124) inc %x } did -c $dname 60 1 LoadOptions LoadGames } on *:dialog:TriviaOptions:sclick:*: { ; End a Game if ($did == 94) { DefaultOptions LoadOptions } elseif ($did == 33) { if ($did(32).sel) { var %item = $did(32).seltext, %chan = $gettok(%item,1,32) var %net = $remove($gettok(%item,2-,32),$chr(40),$chr(41)) var %cid = $getcid(%net) StopTriv %chan %cid scid %cid msg %chan $c2($me) $c1(has stopped trivia) } else var %x = $input(Error: You need to select a game to end first,oh,Error) } ; Add Channel to access elseif ($did == 37) { var %access = $readini(TriviaOptions.ini,Options,AccessType) var %did = $iif(%access == Enable,40,36), %item = $did(%did) var %x = 1, %total = $did(%did).lines while (%x <= %total) { if (%item == $did(%did,%x)) halt inc %x } did -a $dname %did %item writeini TriviaOptions.ini $iif(%access == Enable,Blocked,Allowed) %item 1 } ; Delete Channel from access elseif ($did == 38) { var %access = $readini(TriviaOptions.ini,Options,AccessType) var %did = $iif($readini(TriviaOptions.ini,Options,AccessType) == Enable,40,36), %item = $did(%did) did -d $dname %did $did(%did).sel remini TriviaOptions.ini $iif(%access == Enable,Blocked,Allowed) %item } ; Load Answers elseif ($did == 45) { did -r $dname 50 var %line = $read(Questions.txt,$did(45).sel), %answers = $numtok(%line,124), %x = 2 while (%x <= %answers) { did -a $dname 50 $gettok(%line,%x,124) inc %x } } ; Add Question elseif ($did == 46) { var %question = $$input(Enter the question you would like to add.,ekq,Enter Question) var %answer = $$input(Your question has been added. $crlf $+ $& Enter the first answer to this question $crlf $+ $& Further answers can be added using the add button below the Answers section,ekq,Add Answer) did -a $dname 45 %Question did -c $dname 45 $did(45).lines did -r $dname 50 did -a $dname 50 %answer write Questions.txt $+(%question,$chr(124),%answer) } ; Edit Question elseif ($did == 47) { if ($did(45).sel) { var %line = $v1, %Question = $did(45).seltext, %answers = $gettok($read(Questions.txt,%line),2-,124) var %NewQuestion = $$input(Enter the new question,ekq,Enter Question,%Question) write -ol $+ %line Questions.txt %NewQuestion $+ $iif(%answers,$chr(124) $+ %answers) did -o $dname 45 %line %NewQuestion did -c $dname 45 %line } else var %x = $input(Error: you need to select a question to edit first,ho,Error) } ; Delete Question elseif ($did == 48) { if ($did(45).sel) { var %line = $v1 write -dl $+ %line Questions.txt did -d $dname 45 %line did -r $dname 50 } else var %x = $input(Error: you need to select a question to delete first,ho,Error) } ; Add Answer elseif ($did == 51) { if ($did(45).sel) { var %lineNum = $v1, %line = $read(Questions.txt,%linenum) var %answer = $$input(Enter the answer you would like to add.,ekq,Enter Answer) write -ol $+ %lineNum Questions.txt $+(%line,$chr(124),%answer) did -a $dname 50 %answer } else var %x = $input(Error: You need to select a question before adding answers,ho,Error) } ; Edit Answer elseif ($did == 52) { if ($did(50).sel) && ($did(45).sel) { var %lineNum = $did(45).sel, %line = $read(Questions.txt,%lineNum) var %AnswerNum = $did(50).sel, %answer = $did(50).seltext, %token = $calc(%AnswerNum + 1) var %NewAnswer = $$input(Enter the new answer,ekq,Enter Answer,%answer) write -ol $+ %lineNum Questions.txt $puttok(%line,%NewAnswer,%token,124) did -o $dname 50 %AnswerNum %NewAnswer did -c $dname 50 %AnswerNum } else var %x = $input(Error: You need to select an answer to edit first,ho,Error) } ; Delete Answer elseif ($did == 53) { if ($did(50).lines == 1) var %x = $input(Error: A question must always have atleast one answer. $crlf $+ $& Use the edit button if you want to change this answer,oh,Error) elseif ($did(50).sel) && ($did(45).sel) { var %lineNum = $did(45).sel, %line = $read(Questions.txt,%lineNum) var %AnswerNum = $did(50).sel, %answer = $did(50).seltext, %token = $calc(%AnswerNum + 1) var %x = $deltok(%line,%token,124) write -ol $+ %lineNum Questions.txt $deltok(%line,%token,124) did -d $dname 50 %AnswerNum } else var %x = $input(Error: You need to select an answer to delete first,ho,Error) } ; Run Questions file elseif ($did == 100) run Questions.txt ; Score radio buttons elseif ($did isnum 56-60) { did -r $dname 61 if ($did isnum 57-58) { var %search = $+($did(58),.Global.*) did -b $dname 60 did -e $dname 58 } elseif ($did isnum 59-60) { var %chan = $gettok($did(60),1,32) var %network = $remove($gettok($did(60),2-,32),$chr(40),$chr(41)) var %search = $+(%network,.,%chan,.*) did -b $dname 58 did -e $dname 60 } else { var %search = Global.* did -b $dname 58,60 } ShowPoints %search } ; Edit Points elseif ($did isnum 62-64) { if ($did(61).sel) { ;62 = Add, 63 = Remove, 64 = Set to if ($did == 62) var %points = $$input(How many points would you like to give?,kqe,Give Points) elseif ($did == 63) var %points = $$input(How many points would you like to take away?,keq,Remove Points) else var %points = $$input(What would you like to set the points to?,keq,Set Points) var %nick = $gettok($did(61).seltext,1,32) if ($did(56).state == 1) var %search = Global.* elseif ($did(57).state == 1) var %search = $+($did(58),.Global.*) else { var %chan = $gettok($did(60),1,32) var %network = $remove($gettok($did(60),2-,32),$chr(40),$chr(41)) var %search = $+(%network,.,%chan,.*) } var %item = $+($left(%search,-1),%nick) if ($did == 62) && (%points isnum 1-) hinc TriviaScores %item %points elseif ($did == 63) && (%points isnum 1-) hdec TriviaScores %item %points elseif ($did == 64) && (%points isnum) hadd TriviaScores %item %points elseif ($did == 63) var %x = $input(Error: You must enter a number,oh,Error) else var %x = $input(Error: You must enter a positive number,oh,Error) ShowPoints %search } else var %x = $input(Error: You must select a user first,oh,Error) } SaveOptions LoadOptions } on *:dialog:TriviaOptions:close:*: { SaveOptions } on *:start: { if (!$hget(TriviaScores)) { hmake TriviaScores 100 if ($exists(TriviaScores.hsh)) hload TriviaScores TriviaScores.hsh } .timerTRIVIABACKUP 0 600 if ($hget(TriviaScores)) hsave TriviaScores TriviaScores.hsh } on *:text:*:#: { tokenize 32 $strip($1-) if ($readini(TriviaOptions.ini,Options,accesstype) == disable) { if ($checklist(allowed,$chan)) || ($checklist(allowed,$+($network,.,$chan))) var %status = allow else var %status = block } else { if ($checklist(blocked,$chan)) || ($checklist(blocked,$+($network,.,$chan))) var %status = block else var %status = allow } if (%status == block) halt if ($1 == !trivia) { if ($istok(on|start|begin,$2,124)) { if ($CheckPermissions(OnOff)) halt elseif ($timer($+(TRIVIA.,$chan,.,$cid))) msg $chan $c1(Trivia is already running) else { if (!$exists(Questions.txt)) DefaultQuestions if (!$exists(TriviaOptions.ini)) DefaultOptions msg $chan $c2($nick) $c1(has started trivia. First question in) $c2($GetTime(FirstQ)) $c1(seconds) $+(.timerTRIVIA.,$chan,.,$cid) 1 $GetTime(FirstQ) AskQuestion $chan if ($dialog(TriviaOptions)) LoadGames if (!$hget(TriviaScores)) { hmake TriviaScores 100 if ($exists(TriviaScores.hsh)) hload TriviaScores TriviaScores.hsh .timerTRIVIABACKUP 0 600 if ($hget(TriviaScores)) hsave TriviaScores TriviaScores.hsh } } } elseif ($istok(off|stop|end,$2,124)) { if ($CheckPermissions(OnOff)) halt elseif (!$timer($+(TRIVIA.,$chan,.,$cid))) msg $chan $c1(Trivia is not running) else { msg $chan $nick has stopped trivia. StopTriv $chan $cid } } elseif ($istok(help|commands,$2,124)) { .notice $nick Trivia commands list has been sent via query (PM) .msg $nick Trivia Commands List .msg $nick !trivia on/off to start/end trivia .msg $nick !hint for hints .msg $nick !next to go to the next question .msg $nick !repeat to repeat the last question } } elseif ($1 == !hint) { if ($CheckPermissions(Hints)) halt if ($($+(%,TRIVIAquestion.,$chan,$cid),2)) { var %QTime = $GetTime(AnswerQ), %BeforeHint = $GetTime(BeforeHint) var %MaxSecondsLeft = $calc(%QTime - %BeforeHint) var %secssofar = $calc($timer($+(TRIVIA.,$chan,.,$cid)).secs - %maxsecondsleft) if ($timer($+(TRIVIA.,$chan,.,$cid)).secs > %MaxSecondsLeft) { msg $chan $c1(You must wait for atleast) $c2(%secssofar) $& $c1(more seconds before hints are allowed) } elseif ($($+(%,HINT.,$chan,$cid),2)) { msg $chan $c1(You must wait for atleast) $c2($($+(%,HINT.,$chan,$cid),2)) $c1(seconds before another hint is allowed) } else { msg $chan $c1($MakeHint($chan)) $& $+($c1($chr(40)),$c2($timer($+(TRIVIA.,$chan,.,$cid)).secs) $c1(seconds remaining),$c1($chr(41))) set -z $+(%,HINT.,$chan,$cid) $GetTime(BetweenHints) } } elseif ($timer($+(TRIVIA.,$chan,.,$cid))) { msg $chan $c1(I cant give a hint if no question has been asked.) $& $+($c1($chr(40)),$c1(next question in) $c2($timer($+(TRIVIA.,$chan,.,$cid)).secs) $c1(seconds),$c1($chr(41))) } } elseif ($1 == !repeat) { if ($CheckPermissions(Repeat)) halt if ($($+(%,TRIVIAquestion.,$chan,$cid),2)) { msg $chan $c1(The last question asked was:) $c1($($+(%,TRIVIAquestion.,$chan,$cid),2)) $& $+($c1($chr(40)),$c2($timer($+(TRIVIA.,$chan,.,$cid)).secs) $c1(seconds remaining),$c1($chr(41))) } elseif ($timer($+(TRIVIA.,$chan,.,$cid))) { msg $chan $c1(No question has been asked.) $& $+($c1($chr(40)),$c1(next question in) $c2($timer($+(TRIVIA.,$chan,.,$cid)).secs) $c1(seconds),$c1($chr(41))) } } elseif ($1 == !next) { if ($CheckPermissions(Next)) halt if ($($+(%,TRIVIAquestion.,$chan,$cid),2)) { var %QTime = $GetTime(AnswerQ), %BeforeNext = $GetTime(BeforeNext) var %MaxSecondsLeft = $calc(%QTime - %BeforeNext) var %secssofar = $calc($timer($+(TRIVIA.,$chan,.,$cid)).secs - %maxsecondsleft) if ($timer($+(TRIVIA.,$chan,.,$cid)).secs > %MaxSecondsLeft) { msg $chan $c1(You must wait for atleast) $c2(%secssofar) $& $c1(more seconds before using this command) } else AskQuestion $chan } elseif ($timer($+(TRIVIA.,$chan,.,$cid))) AskQuestion $chan } elseif ($1 == !score) { if (chan* iswm $2) || ($2 == server) var %nick = $nick else var %nick = $iif($2,$2,$nick) if ($2 == server) || ($3 == server) { var %rank = $getrank(%nick,$network).server var %search = $+($network,.Global.,%nick) } elseif (chan* iswm $2) || (chan* iswm $3) { var %rank = $getrank(%nick,$network,$chan).chan var %search = $+($network,.,$chan,.,%nick) } else var %rank = $getrank(%nick), %search = $+(Global.,%nick) var %points = $hget(TriviaScores,%search) if (%rank) msg $chan %nick is currently ranked %rank %type with %points points else msg $chan $c2(%nick) $c1(has not scored any points %type) } elseif ($1 == !Top5) { if ($2 == server) var %search = $+($network,.Global.*), %type = on $network elseif (chan* iswm $2) var %search = $+($network,.,$chan,.*), %type = on $chan else var %search = Global.*, %type = overall var %x = 1, %total = $hfind(TriviaScores,%search,0,w) write -c Temp.txt while (%x <= %total) { var %item = $hfind(TriviaScores,%search,%x,w) write Temp.txt %item $hget(TriviaScores,%item) inc %x } filter -ffcteu 2 32 temp.txt SortedTemp.txt var %x = 1 while (%x <= 5) { var %line = $read(SortedTemp.txt,%x), %nick = $gettok(%line,1,32), %pts = $gettok(%line,2,32) var %tokens = $numtok(%nick,46), %nick = $gettok(%nick,%tokens,46) if (%line) var %results = %results $+($c2(%x),$c1($chr(41))) $c2(%nick) $+($c1([),$c2(%pts) $c1(pts),$c1(])) else var %x = 5 inc %x } if (%results) msg $c2($chan) $c1(Current top 5 %type $+ :) %results else msg $chan $c1(Nobody has scored any points $iif(%search != overall,%type)) .remove Temp.txt .remove SortedTemp.txt } elseif ($timer($+(TRIVIA.,$chan,.,$cid))) { if ($($+(%,GUESSES.,$nick,$chan,$cid),2) >= $readini(TriviaOptions.ini,Options,MaxGuesses)) { if ($v1 == $v2) { notice $nick $c1(You have had too many guesses. Any further guesses will not count) } halt } elseif ($CheckAnswers($nick,$chan,$1-)) { var %answer = $v1 $+(.timerTRIVIA.,$chan,.,$cid) off unset $+(%,TRIVIA*.,$chan,$cid) msg $chan $c1(Congratulations) $c2($+($nick,.)) $c1(The answer was) $c2(%answer) msg $chan $c1(Next question in) $c2($GetTime(BetweenQ)) $c1(seconds) hinc TriviaScores $+(Global.,$nick) hinc TriviaScores $+($network,.Global.,$nick) hinc TriviaScores $+($network,.,$chan,.,$nick) $+(.timerTRIVIA.,$chan,.,$cid) 1 $GetTime(BetweenQ) AskQuestion $chan } elseif ($readini(TriviaOptions.ini,Options,MaxGuessesState) == 1) { if ($($+(%,TRIVIAquestion.,$chan,$cid),2)) { inc $+(%,GUESSES.,$nick,$chan,$cid) } } } } on *:part:#: { if ($nick == $me) { unset $+(%,TRIVIA*.,$chan,$cid) $+(.timerTRIVIA.,$chan,.,$cid) off } } on *:exit: { hsave TriviaScores TriviaScores.hsh unset %TRIVIA* } alias -l AskQuestion { var %chan = $1, %line = $read(Questions.txt) unset $+(%,GUESSES.,*,$(%chan,2),$cid) set $+(%,TRIVIAquestion.,%chan,$cid) $gettok(%line,1,124) set $+(%,TRIVIAanswers.,%chan,$cid) $gettok(%line,2-,124) msg %chan $c1($($+(%,TRIVIAquestion.,%chan,$cid),2)) $+(.timerTRIVIA.,%chan,.,$cid) 1 $GetTime(AnswerQ) NextQuestion %chan } alias -l c1 { return $makecol(1,$1-) } alias -l c2 { return $makecol(2,$1-) } alias -l CheckAnswers { var %nick = $1, %chan = $2 tokenize 32 $3- var %answers = $($+(%,TRIVIAanswers.,%chan,$cid),2) if ($readini(TriviaOptions.ini,Options,AnswerAnywhere) == 1) { var %x = 1, %AnswerToks = $numtok(%answers,124), %SentToks = $0 while (%x <= %AnswerToks) { var %y = 1, %Answer = $gettok(%Answers,%x,124), %TokensInAnswer = $numtok(%answer,32) while (%y <= %SentToks) { var %z = 0, %check while (%z < %TokensInAnswer) { var %Check = %check $($+($,$calc(%y + %z)),2) if ($readini(Triviaoptions.ini,Options,SpellCheck) == 1) { var %accuracy = $readini(TriviaOptions.ini,Options,SpellCheckAccuracy) } else var %accuracy = 100 if ($compare(%Check,%answer) >= %accuracy) return %answer inc %z } inc %y } inc %x } } else { var %x = 1, %AnswerToks = $numtok(%answers,124) while (%x <= %answertoks) { var %answer = $gettok(%answers,%x,124) if ($readini(Triviaoptions.ini,Options,SpellCheck) == 1) { var %accuracy = $readini(TriviaOptions.ini,Options,SpellCheckAccuracy) } else var %accuracy = 100 if ($compare($1-,%answer) >= %accuracy) return %answer inc %x } } } alias -l checklist { var %list = $1, %item = $2, %x = 1, %total = $ini(TriviaOptions.ini,%list,0) while (%x <= %total) { var %citem = $ini(TrivaOptions.ini,%list,%x) if (%item == %citem) return $true inc %x } return $false } alias -l CheckPermissions { var %item = $1 if ($readini(TriviaOptions.ini,Allow,%item) == 0) { msg $chan $c1(This command is currently disabled) return halt } if ($Readini(TriviaOptions.ini,Restrict,%item) < 4) { var %Restrict = $v1 if (%Restrict == 1) && ($nick !isop $chan) var %block = 1, %Restriction = Op and above elseif (%restrict == 2) && ($nick !isop $chan) && ($nick !ishelp $chan) { var %block = 1, %Restriction = HalfOps and above } elseif (%restrict == 3) && ($nick isreg $chan) var %block = 1, %Restriction = Voice and above if (%block) { msg $chan $c1(This command is currently restricted to users with) $c2(%Restriction) return halt } } } alias Compare { if ($len($1) > $len($2)) var %longest = $1, %length = $len($1), %shortest = $2 else var %longest = $2, %length = $len($2), %shortest = $1 var %x = 1, %match = 0 while (%x <= %length) { if ($mid($1,%x,1) isin $mid($2,$calc(%x - 1),3)) inc %match inc %x } var %score = $calc(%match / %length * 100) return %score } alias -l DefaultQuestions { write questions.txt "7x" was used to refer to the secret ingredient of what drink|coca cola write questions.txt "And the big wheel keep on turning neon burning up above and I'm just high on the world come on and take the low ride with me girl on the....." What's the Dire Straits song title?|tunnel of love write questions.txt "Beverly Hills Cop", when Axel Foley enters the hotel, he uses an alias. Who does he say he works for, and who does he say he's going to interview?|Rolling Stone,Michael Jackson write questions.txt "Little Boy" & "Fat Man" were the first|atomic bombs write questions.txt "Louis, 1 think this is the beginning of a beautiful friendship" are the last words of which film|casablanca write questions.txt "Never Say Never,"|Romeo Void } alias -l GetCid { var %x = 1, %total = $scon(0) while (%x <= %total) { scon %x if ($network == $1) return $cid inc %x } } alias getrank { ;$getrank(N,NETWORK,CHANNEL).[CHAN|SERVER] if ($2) var %network = $2 if ($3) var %chan = $3 if ($prop == server) var %search = $+($network,.Global.*) elseif ($prop == chan) var %search = $+($network,.,$chan,.*) else var %search = Global.* var %x = 1, %total = $hfind(TriviaScores,%search,0,w) if ($1 == 0) return %total write -c Temp.txt while (%x <= %total) { var %item = $hfind(TriviaScores,%search,%x,w) write Temp.txt %item $hget(TriviaScores,%item) inc %x } filter -ffcteu 2 32 temp.txt SortedTemp.txt if ($1 isnum) { var %data = $read(SortedTemp.txt,$1), %nick = $gettok(%data,1,32), %pts = $gettok(%data,2,32) var %tokens = $numtok(%nick,46), %nick = $gettok(%nick,%tokens,46) if (%data) var %return = %nick } else { var %search = $replace(%search,*,$1) var %data = $read(SortedTemp.txt,s,%search), %rank = $readn if (%data) var %return = %rank } .remove Temp.txt .remove SortedTemp.txt return %return } alias -l GetTime { return $readini(TriviaOptions.ini,Times,$1) } alias -l LoadGames { var %x = 1, %total = $timer(0) while (%x <= %total) { var %timer = $timer(%x) if ($regex(%timer,/TRIVIA\.(#.+).([0-9]+)/Si)) { var %chan = $regml(1), %network = $scid($regml(2)).network did -a TriviaOptions 32 %chan $+($chr(40),%network,$chr(41)) } inc %x } } alias -l makecol { var %colour = $+(colour,$1) var %fg = $calc($readini(TriviaOptions.ini,%colour,Text) -1), %fg = $iif($len(%fg) == 1,0 $+ %fg,%fg) if ($readini(TriviaOptions.ini,%colour,BgState) == 1) { var %bg = $calc($readini(TriviaOptions.ini,%colour,BackGround) -1), %bg = $iif($len(%bg) == 1,0 $+ %bg,%bg) } var %bold = $readini(TriviaOptions.ini,%colour,Bold) var %underline = $readini(TriviaOptions.ini,%colour,Underline) var %col = $+($iif(%bold,),$iif(%underline,),,%fg,$iif(%bg,$chr(44) $+ %bg)) return $+(%col,$2,$iif(%bold,),$iif(%underline,)) } alias -l MakeHint { var %chan = $1, %answer = $gettok($($+(%,TRIVIAanswers.,%chan,$cid),2),1,124) var %x = 1 while (%x <= 4) { var %hints = %hints $readini(TriviaOptions.ini,Hints,%x) inc %x } inc $+(%,TRIVIAhint.,%chan,$cid) while ($gettok(%hints,$($+(%,TRIVIAhint.,%chan,$cid),2),32) == 0) inc $+(%,TRIVIAhint.,%chan,$cid) if ($($+(%,TRIVIAhint.,%chan,$cid),2) == 1) return Answer Spacing: $StarString(%answer) elseif ($($+(%,TRIVIAhint.,%chan,$cid),2) == 2) { var %x = 1, %length = $len(%answer) while (%x <= %length) { var %letter = $mid(%answer,%x,1) if (%letter == $chr(32)) var %VowelString = %VowelString $+ - elseif (%letter isletter aeiou) var %VowelString = %VowelString $+ %letter else var %VowelString = %VowelString $+ * inc %x } return Vowels: $replace(%VowelString,-,$chr(32)) } elseif ($($+(%,TRIVIAhint.,%chan,$cid),2) == 3) { var %length = $len(%answer), %Fhalf = $int($calc(%length / 2)), %LHalf = $calc(%length - %Fhalf) var %Hint = $left(%answer,%Fhalf) $+ $StarString($right(%answer,%LHalf)) return Hint: %Hint } else { var %x = 1, %tokens = $numtok(%answer,32) while (%x <= %tokens) { var %token = $gettok(%answer,%x,32) var %length = $len(%token), %Fhalf = $int($calc(%length / 2)), %LHalf = $calc(%length - %Fhalf) var %Hint = %Hint $left(%token,%Fhalf) $+ $StarString($right(%token,%LHalf)) inc %x } return Hint: %Hint } } alias -l NextQuestion { var %chan = $1 unset $+(%,TRIVIA*.,$(%chan,2),$cid) unset $+(%,GUESSES.,*,$(%chan,2),$cid) if ($readini(TriviaOptions.ini,Options,idleDisableState) == 1) { inc $+(%,MISSED.,%chan,$cid) if ($($+(%,MISSED.,$(%chan,2),$cid),2) >= $readini(TriviaOptions.ini,Options,IdleDisable)) { msg %chan $c1(Too many unanswered questions. Automatically disabling trivia.) StopTriv %chan $cid halt } } msg %chan $c1(Nobody got that one? Next question in) $c2($GetTime(BetweenQ)) $c1(seconds) $+(.timerTRIVIA.,%chan,.,$cid) 1 $GetTime(BetweenQ) AskQuestion %chan } alias -l ShowPoints { var %search = $1 var %x = 1, %total = $hfind(TriviaScores,%search,0,w) write -c Temp.txt did -r TriviaOptions 61 while (%x <= %total) { var %item = $hfind(TriviaScores,%search,%x,w) write Temp.txt %item $hget(TriviaScores,%item) inc %x } filter -ffcteu 2 32 temp.txt SortedTemp.txt var %x = 1, %lines = $lines(SortedTemp.txt) while (%x <= %lines) { var %line = $read(SortedTemp.txt,%x), %nick = $gettok(%line,1,32), %pts = $gettok(%line,2,32) var %tokens = $numtok(%nick,46), %nick = $gettok(%nick,%tokens,46) did -a $dname 61 %nick $+($chr(40),%pts point $+ $iif(%pts != 1,s),$chr(41)) inc %x } .remove temp.txt .remove SortedTemp.txt } alias -l StopTriv { var %chan = $1, %cid = $2 unset $+(%,TRIVIA*.,$(%chan,2),$(%cid,2)) unset $+(%,MISSED.,$(%chan,2),$(%cid,2)) unset $+(%,GUESSES.*,$(%chan,2),$(%cid,2)) $+(.timerTRIVIA.,$(%chan,2),.,$(%cid,2)) off if ($dialog(TriviaOptions)) LoadGames } alias -l StarString { var %x = 1, %tokens = $numtok($1-,32) while (%x <= %tokens) { var %y = 1, %length = $len($gettok($1-,%x,32)) var %StarString = %StarString $str(*,%length) inc %x } return %StarString } alias -l DefaultOptions { writeini TriviaOptions.ini Times FirstQ 10 writeini TriviaOptions.ini Times AnswerQ 60 writeini TriviaOptions.ini Times BetweenQ 5 writeini TriviaOptions.ini Times BeforeNext 30 writeini TriviaOptions.ini Times BeforeHint 10 writeini TriviaOptions.ini Times BetweenHints 10 writeini TriviaOptions.ini Allow Hints 1 writeini TriviaOptions.ini Allow Next 1 writeini TriviaOptions.ini Allow Repeat 1 writeini TriviaOptions.ini Restrict OnOff 3 writeini TriviaOptions.ini Restrict Hints 4 writeini TriviaOptions.ini Restrict Next 4 writeini TriviaOptions.ini Restrict Repeat 4 writeini TriviaOptions.ini Hints 1 1 writeini TriviaOptions.ini Hints 2 1 writeini TriviaOptions.ini Hints 3 1 writeini TriviaOptions.ini Hints 4 1 writeini TriviaOptions.ini Options AnswerAnywhere 0 writeini TriviaOptions.ini Options SpellCheck 1 writeini TriviaOptions.ini Options SpellCheckAccuracy 80 writeini TriviaOptions.ini Options MaxGuessesState 0 writeini TriviaOptions.ini Options MaxGuesses 5 writeini TriviaOptions.ini Options IdleDisableState 1 writeini TriviaOptions.ini Options IdleDisable 5 writeini TriviaOptions.ini Colour1 Text 15 writeini TriviaOptions.ini Colour1 Background 2 writeini TriviaOptions.ini Colour1 BgState 0 writeini TriviaOptions.ini Colour1 Bold 0 writeini TriviaOptions.ini Colour1 Underline 0 writeini TriviaOptions.ini Colour2 Text 5 writeini TriviaOptions.ini Colour2 Background 2 writeini TriviaOptions.ini Colour2 BgState 0 writeini TriviaOptions.ini Colour2 Bold 0 writeini TriviaOptions.ini Colour2 Underline 0 writeini TriviaOptions.ini Options AccessType Disable } alias -l SaveOptions { var %dname = TriviaOptions writeini TriviaOptions.ini Times FirstQ $iif($did(%dname,5) isnum,$ifmatch,10) writeini TriviaOptions.ini Times AnswerQ $iif($did(%dname,7) isnum,$ifmatch,60) writeini TriviaOptions.ini Times BetweenQ $iif($did(%dname,9) isnum,$ifmatch,5) writeini TriviaOptions.ini Times BeforeNext $iif($did(%dname,11) isnum,$ifmatch,30) writeini TriviaOptions.ini Times BeforeHint $iif($did(%dname,13) isnum,$ifmatch,10) writeini TriviaOptions.ini Times BetweenHints $iif($did(%dname,68) isnum,$ifmatch,10) writeini TriviaOptions.ini Allow Hints $did(%dname,15).state writeini TriviaOptions.ini Allow Next $did(%dname,22).state writeini TriviaOptions.ini Allow Repeat $did(%dname,90).state writeini TriviaOptions.ini Restrict OnOff $did(%dname,70).sel writeini TriviaOptions.ini Restrict Hints $did(%dname,17).sel writeini TriviaOptions.ini Restrict Next $did(%dname,24).sel writeini TriviaOptions.ini Restrict Repeat $did(%dname,90).sel writeini TriviaOptions.ini Hints 1 $did(%dname,18).state writeini TriviaOptions.ini Hints 2 $did(%dname,19).state writeini TriviaOptions.ini Hints 3 $did(%dname,20).state writeini TriviaOptions.ini Hints 4 $did(%dname,21).state writeini TriviaOptions.ini Options AnswerAnywhere $did(%dname,25).state writeini TriviaOptions.ini Options SpellCheck $did(%dname,26).state writeini TriviaOptions.ini Options SpellCheckAccuracy $iif($did(%dname,27) isnum 1-100,$ifmatch,80) writeini TriviaOptions.ini Options MaxGuessesState $did(%dname,74).state writeini TriviaOptions.ini Options MaxGuesses $iif($did(%dname,75) isnum 1-,$ifmatch,5) writeini TriviaOptions.ini Options IdleDisableState $did(%dname,71).state writeini TriviaOptions.ini Options IdleDisable $iif($did(%dname,72) isnum 1-,$ifmatch,5) writeini TriviaOptions.ini Colour1 Text $did(%dname,79).sel writeini TriviaOptions.ini Colour1 Background $did(%dname,83).sel writeini TriviaOptions.ini Colour1 BgState $did(%dname,82).state writeini TriviaOptions.ini Colour1 Bold $did(%dname,80).state writeini TriviaOptions.ini Colour1 Underline $did(%dname,81).state writeini TriviaOptions.ini Colour2 Text $did(%dname,87).sel writeini TriviaOptions.ini Colour2 Background $did(%dname,88).sel writeini TriviaOptions.ini Colour2 BgState $did(%dname,84).state writeini TriviaOptions.ini Colour2 Bold $did(%dname,86).state writeini TriviaOptions.ini Colour2 Underline $did(%dname,85).state writeini TriviaOptions.ini Options AccessType $iif($did(%dname,41).state == 1,Disable,Enable) } alias -l LoadOptions { var %dname = TriviaOptions did -ra %dname 5 $readini(TriviaOptions.ini,Times,FirstQ) did -ra %dname 7 $readini(TriviaOptions.ini,Times,AnswerQ) did -ra %dname 9 $readini(TriviaOptions.ini,Times,BetweenQ) did -ra %dname 11 $readini(TriviaOptions.ini,Times,BeforeNext) did -ra %dname 13 $readini(TriviaOptions.ini,Times,BeforeHint) did -ra %dname 68 $readini(TriviaOptions.ini,Times,BetweenHints) did $iif($readini(TriviaOptions.ini,Allow,Hints) == 1,-c,-u) %dname 15 did $iif($readini(TriviaOptions.ini,Allow,Hints) == 1,-e,-b) %dname 17,18,19,20,21 did $iif($readini(TriviaOptions.ini,Allow,Next) == 1,-c,-u) %dname 22 did $iif($readini(TriviaOptions.ini,Allow,Next) == 1,-e,-b) %dname 24 did $iif($readini(TriviaOptions.ini,Allow,Repeat) == 1,-c,-u) %dname 90 did $iif($readini(TriviaOptions.ini,Allow,Repeat) == 1,-e,-b) %dname 92 did -c %dname 70 $iif($readini(TriviaOptions.ini,Restrict,OnOff),$ifmatch,4) did -c %dname 17 $iif($readini(TriviaOptions.ini,Restrict,Hints),$ifmatch,4) did -c %dname 24 $iif($readini(TriviaOptions.ini,Restrict,Next),$ifmatch,4) did -c %dname 92 $iif($readini(TriviaOptions.ini,Restrict,Repeat),$ifmatch,4) did $iif($readini(TriviaOptions.ini,Hints,1) == 1,-c,-u) %dname 18 did $iif($readini(TriviaOptions.ini,Hints,2) == 1,-c,-u) %dname 19 did $iif($readini(TriviaOptions.ini,Hints,3) == 1,-c,-u) %dname 20 did $iif($readini(TriviaOptions.ini,Hints,4) == 1,-c,-u) %dname 21 did $iif($readini(TriviaOptions.ini,Options,AnswerAnywhere) == 1,-c,-u) %dname 25 did $iif($readini(TriviaOptions.ini,Options,SpellCheck) == 1,-c,-u) %dname 26 did $iif($readini(TriviaOptions.ini,Options,SpellCheck) == 1,-e,-b) %dname 27 did -ra %dname 27 $readini(TriviaOptions.ini,Options,SpellCheckAccuracy) did -c %dname 79 $readini(TriviaOptions.ini,Colour1,Text) did -c %dname 83 $readini(TriviaOptions.ini,Colour1,Background) did $iif($readini(TriviaOptions.ini,Colour1,BgState) == 1,-c,-u) %dname 82 did $iif($readini(TriviaOptions.ini,Colour1,BgState) == 1,-e,-b) %dname 83 did $iif($readini(TriviaOptions.ini,Colour1,Bold) == 1,-c,-u) %dname 80 did $iif($readini(TriviaOptions.ini,Colour1,Underline) == 1,-c,-u) %dname 81 did -c %dname 87 $readini(TriviaOptions.ini,Colour2,Text) did -c %dname 88 $readini(TriviaOptions.ini,Colour2,Background) did $iif($readini(TriviaOptions.ini,Colour2,BgState) == 1,-c,-u) %dname 84 did $iif($readini(TriviaOptions.ini,Colour2,BgState) == 1,-e,-b) %dname 88 did $iif($readini(TriviaOptions.ini,Colour2,Bold) == 1,-c,-u) %dname 86 did $iif($readini(TriviaOptions.ini,Colour2,Underline) == 1,-c,-u) %dname 85 did $iif($readini(TriviaOptions.ini,Options,MaxGuessesState) == 1,-c,-u) %dname 74 did $iif($readini(TriviaOptions.ini,Options,MaxGuessesState) == 1,-e,-b) %dname 75 did -ra %dname 75 $readini(TriviaOptions.ini,Options,MaxGuesses) did $iif($readini(TriviaOptions.ini,Options,IdleDisableState) == 1,-c,-u) %dname 71 did $iif($readini(TriviaOptions.ini,Options,IdleDisableState) == 1,-e,-b) %dname 72 did -ra %dname 72 $readini(TriviaOptions.ini,Options,IdleDisable) did -c %dname $iif($readini(TriviaOptions.ini,Options,AccessType) == Disable,41,42) did -e %dname $iif($readini(TriviaOptions.ini,Options,AccessType) == Disable,36,40) did -b %dname $iif($readini(TriviaOptions.ini,Options,AccessType) == Disable,40,36) }