Need help on storing scores - 01/10/22 05:17 PM
I have this Fam Feud script that's working pretty neatly until my computer lost power and then when I restarted the bot, apparently it did not save the scores and had to start all over again. I am not sure how to check but I do see a buildscore alias that I thought should store the score somewhere but idk. i am still new to scripting and I couldn't figure this out yet.
Appreciate any help from yall big-time scripters!
Appreciate any help from yall big-time scripters!
Code
;Family Feud ;Runs a channel-wide game of Family Feud with questions and answers specified in a txt file (Default .txt file name is FamFeud.txt) ;Fam Feud text File: https://drive.google.com/file/d/1lTvLQ0Yi3W4FkTXs-0WBCCllLQ-p_dnj/view?usp=sharing ;Enjoy :D /* ------------- Commands: !start number ------------- Starts the game "!start 1" starts a 1 round game, "!start unlimited or !start" starts an unlimited game ------------- !stop -- Stops the game ------------- !score -- Notices a user his/her score ------------- !scores -- Messages the scores to the channel (Also messaged at the end of each round) ------------- */ ;Reads from a text file and grabs a random line's Question and answers in the format: Question*Answer1-Answer2-Answer3-Answer4-Answer5-Answer6-Answer7-Answer8 on *:LOAD:/FFsetchan $?="Type the name of the channel you would like Family Feud to be active in (Including #)" menu nicklist,channel,status,menubar,query { Family Feud .$iif(%FF.on != 2,Start):/FFStart $me $chan $?="How many rounds? For unlimited rounds say unlimited." .$iif(%FF.on == 2,Stop):/FFStop $me $chan .Set Family Feud Channel:/FFsetchan $?="Type the name of the channel you would like Family Feud to be active in (Including #)" } alias FFsetchan { set %chanFF $1 } alias question { set %FF.line $read(FamFeud.txt) set %FF.num $pos(%FF.line, *, 1) set %FF.length $len(%FF.line) set %FF.numA %FF.length - %FF.num set %FF.numQ %FF.num - 1 set %FF.dashes $count(%FF.line, -) set %FF.answers $right(%FF.line, %FF.numA) set %FF.question $left(%FF.line, %FF.numQ) set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a1 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) if ( %FF.dashes > 0 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a2 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes > 1 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a3 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes > 2 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a4 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes > 3 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a5 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes > 4 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a6 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes > 5 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a7 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } if ( %FF.dashes == 0 ) { set %FF.a1 %FF.answers } if ( %FF.dashes == 1 ) { set %FF.a2 %FF.answers } if ( %FF.dashes == 2 ) { set %FF.a3 %FF.answers } if ( %FF.dashes == 3 ) { set %FF.a4 %FF.answers } if ( %FF.dashes == 4 ) { set %FF.a5 %FF.answers } if ( %FF.dashes == 5 ) { set %FF.a6 %FF.answers } if ( %FF.dashes == 6 ) { set %FF.a7 %FF.answers } if ( %FF.dashes == 7 ) { set %FF.a8 %FF.answers } if ( %FF.dashes > 7 ) { set %FF.numcom $pos(%FF.answers, -, 1) - 1 set %FF.numcom2 $len(%FF.answers) - $pos(%FF.answers, -, 1) set %FF.a8 $left(%FF.answers, %FF.numcom) set %FF.answers $right(%FF.answers, %FF.numcom2) } inc %FF.dashes ;I was having issues with my other answer variables and timers so I just made a second set for the check alias. set %FF.answerz 0 set %FF.a12 %FF.a1 set %FF.a22 %FF.a2 set %FF.a32 %FF.a3 set %FF.a42 %FF.a4 set %FF.a52 %FF.a5 set %FF.a62 %FF.a6 set %FF.a72 %FF.a7 set %FF.a82 %FF.a8 if (%FF.roundsplayed != $null) { msg %chanFF 10Round %FF.roundsplayed / %FF.rounds $+ 8 $chr(124) $+ $chr(124) 10Question ( $+ $readn $+ / $+ $lines(FamFeud.txt) $+ ):4 %FF.question } else { msg %chanFF 10Question ( $+ $readn $+ / $+ $lines(FamFeud.txt) $+ ):4 %FF.question } msg %chanFF 10There are4 %FF.dashes 10answers! } alias game { if (%FF.roundsplayed == $null || %FF.roundsplayed <= %FF.rounds) { question .timer1 1 60 game2 .timer3 1 40 remaining } else { FFstop } } alias game2 { if ( %FF.dashes == 1 ) { msg %chanFF 10That's it! The answer was:4 %FF.a12 } if ( %FF.dashes == 2 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 and %FF.a22 } if ( %FF.dashes == 3 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , and %FF.a32 } if ( %FF.dashes == 4 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , %FF.a32 $+ , and %FF.a42 } if ( %FF.dashes == 5 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , %FF.a32 $+ , %FF.a42 $+ , and %FF.a52 } if ( %FF.dashes == 6 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , %FF.a32 $+ , %FF.a42 $+ , %FF.a52 $+ , and %FF.a62 } if ( %FF.dashes == 7 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , %FF.a32 $+ , %FF.a42 $+ , %FF.a52 $+ , %FF.a62 $+ , and %FF.a72 } if ( %FF.dashes == 8 ) { msg %chanFF 10That's it! The answers were (in order):4 %FF.a12 $+ , %FF.a22 $+ , %FF.a32 $+ , %FF.a42 $+ , %FF.a52 $+ , %FF.a62 $+ , %FF.a72 $+ , and %FF.a82 } buildscores if (%FF.roundsplayed != $null) { inc %FF.roundsplayed } unset %FF.a* if (%FF.roundsplayed > %FF.rounds) { FFstop } if (%FF.on == 2) { msg %chanFF %FF.scoreoutput } if (%FF.on == 2) { .timer2 1 10 game } ;7 second delay between questions. } alias remaining { set %FF.remain 10The remaining answers are:4 if ( %FF.a1 != $null ) { set %FF.remain %FF.remain #1 } if ( %FF.a2 != $null ) { set %FF.remain %FF.remain #2 } if ( %FF.a3 != $null ) { set %FF.remain %FF.remain #3 } if ( %FF.a4 != $null ) { set %FF.remain %FF.remain #4 } if ( %FF.a5 != $null ) { set %FF.remain %FF.remain #5 } if ( %FF.a6 != $null ) { set %FF.remain %FF.remain #6 } if ( %FF.a7 != $null ) { set %FF.remain %FF.remain #7 } if ( %FF.a8 != $null ) { set %FF.remain %FF.remain #8 } msg %chanFF %FF.remain } on *:TEXT:!start*:%chanFF:{ if ($2 != $null) { FFstart $nick $chan $2 } else { FFstart $nick $chan unlimited } } alias FFstart { if ( %FF.on != 2 ) { msg %chanFF 10,1A game has been started by $1 msg %chanFF 10,1Game commands: 4,1!start <number> 10,1"8,1!start 110,1" starts a 1 round game, "4,1!start unlimited10,1 or 4,1!start10,1" starts an unlimited game ; 4,1!stop 10,1- Stops the game ; 4,1!score 10,1- Notices a user his/her score ; 4,1!scores 10,1- Messages the scores to the channel (Also messages at the end of each round) set %FF.answerz 0 set %FF.on 2 set %FF.roundsplayed 1 if ($3 == unlimited) { unset %FF.roundsplayed } else { set %FF.rounds $3 } game } else { .notice $1 The game's already going, maybe you should try answering some questions now. } } on *:TEXT:!stop:%chanFF:{ FFstop $nick $chan } alias FFstop { if ( %FF.on == 2 ) { if ($1 != $null) msg %chanFF 10Game stopped by $1 $+ . else msg %chanFF 10Game over! buildscores msg %chanFF %FF.scoreoutput .timer1 off .timer2 off .timer3 off unset %FF.* } else { .notice $1 Stop what? } } on *:TEXT:!score:%chanFF:{ if ( %FF.on == 2 && %chanFF == $chan ) { if ( %FF.score. [ $+ [ $nick ] ] != $null ) { .notice $nick Your score is %FF.score. [ $+ [ $nick ] ] $+ . } else { .notice $nick Your score is 0. } } else { .notice $nick There's no game going on, dumbass. } } ;Text events for all 8 answers on *:TEXT:%FF.a1:%chanFF:{ msg %chanFF 10Survey says,4 50 points10!4 $nick 10got the 4#1 10answer,4 %FF.a1 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 50 unset %FF.a1 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a2:%chanFF:{ msg %chanFF 10Survey says,4 35 points10!4 $nick 10got the 4#2 10answer,4 %FF.a2 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 35 unset %FF.a2 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a3:%chanFF:{ msg %chanFF 10Survey says,4 28 points10!4 $nick 10got the 4#3 10answer,4 %FF.a3 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 28 unset %FF.a3 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a4:%chanFF:{ msg %chanFF 10Survey says,4 20 points10!4 $nick 10got the 4#4 10answer,4 %FF.a4 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 20 unset %FF.a4 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a5:%chanFF:{ msg %chanFF 10Survey says,4 15 points10!4 $nick 10got the 4#5 10answer,4 %FF.a5 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 15 /unset %FF.a5 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a6:%chanFF:{ msg %chanFF 10Survey says,4 10 points10!4 $nick 10got the 4#6 10answer,4 %FF.a6 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 10 unset %FF.a6 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a7:%chanFF:{ msg %chanFF 10Survey says,4 8 points10!4 $nick 10got the 4#7 10answer,4 %FF.a7 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 8 unset %FF.a7 set %FF.answerz %FF.answerz + 1 check %FF.answerz } on *:TEXT:%FF.a8:%chanFF:{ msg %chanFF 10Survey says,4 5 points10!4 $nick 10got the 4#8 10answer,4 %FF.a8 $+ 10! inc %FF.score. [ $+ [ $nick ] ] 5 unset %FF.a8 set %FF.answerz %FF.answerz + 1 check %FF.answerz } alias buildscores { set %FF.count 0 set %FF.added 0 set %FF.totalnicks $nick(%chanFF,0,a) set %FF.highest 0 set %FF.highestnick $me set %FF.x $var(%FF.score.*, 0) set %FF.scoreoutput 10Scores: while (%FF.added < %FF.x) { while (%FF.count <= %FF.totalnicks) { set %FF.testnick $nick(%chanFF,%FF.count,a) if (%FF.score. [ $+ [ %FF.testnick ] ] != $null) && (%FF.score. [ $+ [ %FF.testnick ] ] >= %FF.highest) && (%FF.testnick !isin %FF.scoreoutput) { set %FF.highest %FF.score. [ $+ [ %FF.testnick ] ] set %FF.highestnick %FF.testnick } inc %FF.count } if (%FF.highest != 0) { set %FF.scoreoutput %FF.scoreoutput 04 $+ %FF.highestnick $+ 10:04 %FF.highest 08 $+ $chr(124) } set %FF.highest 0 set %FF.highesttnick $me inc %FF.added set %FF.count 0 } set %FF.chop $calc($len(%FF.scoreoutput) - 1) set %FF.scoreoutput $left(%FF.scoreoutput,%FF.chop) if (%FF.scoreoutput == 10Scores:) set %FF.scoreoutput 10Nobody has any points! } ;Checks to see if all answers have been said before time limit is up alias check { if ( $1 == %FF.dashes ) { .timer1 off .timer3 off game2 } } ;Accounts for nickname changes mid-game. on *:NICK:{ if ( %FF.score. [ $+ [ $nick ] ] != $null ) { set %FF.score. [ $+ [ $newnick ] ] %FF.score. [ $+ [ $nick ] ] unset %FF.score. [ $+ [ $nick ] ] } } ;Notices the scores of players in the channel in order to the person that said !scores on *:TEXT:!scores:%chanFF:{ buildscores .notice $nick %FF.scoreoutput } ON *:TEXT:!famfeudhelp*:#: { if ($nick isop #) && ($me isop #) { timer 1 2 msg # Family Feud Commands: timer 1 3 msg # !start number - Starts the game (!start 1 starts a 1 round game, while !start unlimited or !start starts an unlimited game) timer 1 4 msg # !stop - Stops the game timer 1 5 msg # !score - Notices a user his/her score ; !scores - Messages the scores to the channel (Also messaged at the end of each round) } }