;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) }
}