I've tried inserting pub_word at the ends of the main procs, but it never goes back to that proc pub_word. So i don't know what to do.
Here's his game code in its entirety:
Code: Select all
################## Written by Murf 10/10/97 ##################
## ##
## Requires wordlist.txt and wscore file ##
## I have included a wordlist file, but if you want to write ##
## your own, the format is ##
## <word to scramble>:<clue> ##
## ##
## ##
## ##
## The only commands are: ##
## ##
## !word -- starts the game ##
## !score -- spews the top ten scorers ##
## !wordswitch -- turns it on or off ##
## !wordanswer -- turn the answer on or off ##
## Check www.blueday.org/eggdrop.html ##
## Contact murf@mindless.com with questions ##
###############################################################
## NOTES
# Scores are kept globally
# Scores are only kept for those in the bot's user list.
# The special user used to track various things, is added
# by the script.
## REVISION HISTORY
# Feb 12 2006 -- Fixed the score, it didn't work with under 10 entries -- Mat
# Mar 26 2002 -- Fixed adding new channel
# Dec 18 2000 -- Fixed the score again. It was totally broken, not listing
# anything close to the top 10 scorers
# -- fixed problem with possible duplicate entries in the score
# file is users change case of their nicks
# July 9 2000 -- Added switch to say/not say the answer if no one gets it.
# -- Got rid of all the 'putchan's
# July 2 2000 -- Fixed bug in the_score that didn't account for
# less than 10 people in the score list.
# -- Fixed bug in the_score that failed to check for
# non-existent score file.
## BINDS
bind pub -|- !score the_score
bind pub -|- !word pub_word
bind time - "05 03 % % %" wo_refresh_time
bind msg o !wordgame word_onoff
bind msg o !wordanswer answer_onoff
## VARIABLES, set these.
# This is the file that holds the wordlist, set it to whatever
set wlistfile /home/gronk/eggdrop/scripts/wordlist.txt
# This file keeps scores again call it whatever
set wscorefile /home/gronk/eggdrop/scripts/wscore
# This special user is added to the bots userlist and used to track
# where each chan is in the wordlist
set specuser specialwd
# Say the answer if no one gets it
# 0 is don't say it / 1 is say it
set ansonoff 1
## ----------------Leave the rest alone----------------------------------
# This variable tells whether the script is being run. It will only allow
# the game to be played in one channel at a time, otherwise too many timers
# too much confusion.
# Occasionally, the script may become confused during desynchs and says its
# running when it isn't. You must reset this variable to 0. Don't worry
# it doesnt happen often. Obviously leave it set to 0 here
set winuse 0
# This variable is the place in the wordlist. Its initialized to 0 don't
# mess with it. I tried randomizing this, but found this worked better,
# but its not hard to randomize if you like that better.
set word_list_count 0
# On off switch for the annoying people
# 0 is off/ 1 is on
set glonoff 1
# Global channel variable, initialized to null, leave alone
set chan ""
# Initializes global wordlist to null, leave it alone
set words ""
# ----------CODE--------------------------------------------------------
# Procedure to turn on/off whether the answer is given if no one
# gets it.
proc answer_onoff {nick uhost handle args} {
global ansonoff botnick
set onoff [string tolower [ string trim [lindex [split $args] 0] "{}" ]]
if {$onoff == "on"} {
set ansonoff 1
putserv "NOTICE $nick :Wordgame will now tell you losers the answers ;-P"
return
}
if {$onoff == "off"} {
set ansonoff 0
putserv "NOTICE $nick :Wordgame will no longer tell you losers the answers"
return
}
putserv "NOTICE $nick :USAGE: /msg $botnick !wordanswer on\/off"
return
}
# Had to add an on off switch cause some pple started annoying me
proc word_onoff {nick uhost handle args} {
global botnick glonoff
set onoff [string tolower [ string trim [lindex [split $args] 0] "{}" ]]
if {$onoff == "on"} {
set glonoff 1
putserv "NOTICE $nick :Wordgame is turned on"
return
}
if {$onoff == "off"} {
set glonoff 0
putserv "NOTICE $nick :Wordgame is turned off"
return
}
putserv "NOTICE $nick :USAGE: /msg $botnick !wordswitch on\/off"
return
}
# This is the main proc, it spews the word and sets the timers to do the
# rest.
proc pub_word {nick uhost handle channel args} {
global wscorefile wlistfile words word_list_count answer winuse \
chan letone lettwo letters specuser glonoff
if {$glonoff == 0} {
putserv "PRIVMSG $channel :Sorry, wordgame is turned off, try again later"
return
}
set chn [string tolower $channel]
if {$word_list_count == 0} {
if {![validuser $specuser]} {
set channels [channels]
adduser $specuser specuser!special@word.special.org
foreach chann $channels {
setuser $specuser XTRA wcount.$chann 0
}
}
set word_list_count [getuser $specuser XTRA wcount.$chn]
if {$word_list_count == ""} {
setuser $specuser XTRA wcount.$chn 0
set $word_list_count 0
}
set words ""
set fd [open $wlistfile r]
while {![eof $fd]} {
lappend words [gets $fd]
}
close $fd
}
if {($winuse == 1) && ([string compare $chn $chan] != 0)} {
putserv "PRIVMSG $chn :Sorry, they're already playing in $chan, go join in. I'll tell em your coming, $nick."
return 0
} elseif {($winuse == 1) && ([string compare $chn $chan] == 0)} {
putserv "PRIVMSG $chan :HEY! One word at a time!"
return 0
} elseif {$winuse == 0} {
set chan $chn
set winuse 1
set word_pair [lindex $words $word_list_count]
set answer [lindex [split $word_pair :] 1]
set word_split [split $word_pair :]
set letters [lreplace $word_split 1 1]
set let_split [split $letters {}]
set letone [lindex $let_split 0]
set slettwo $letone
set slettwo [join [lappend slettwo [lindex $let_split 1]]]
regsub { } $slettwo {} lettwo
set i [llength $let_split]
set smixed ""
set tmixed ""
for {set j 0} {$j < $i} {incr j} {
set k [rand [llength $let_split]]
set smixed $tmixed
set smixed [lappend smixed [lindex $let_split $k]]
set let_split [lreplace $let_split $k $k]
regsub { } $smixed {} tmixed
}
set mixed $tmixed
bind pub - $letters pub_gotit
putserv "PRIVMSG $chan :Unscramble ---> \0036 $mixed "
incr word_list_count
if {$word_list_count >= [expr [llength $words] -1]} {
set word_list_count "0"
}
setuser $specuser XTRA wcount.$chn $word_list_count
utimer 60 noone_gotit
utimer 15 clue_1
utimer 30 clue_2
utimer 45 clue_3
}
}
# All the timers expired and no one got it. Spew to chan.
proc noone_gotit {} {
global winuse chan letters ansonoff
if {$ansonoff} {
putserv "PRIVMSG $chan :Nobody got it...it\'s \0034$letters"
} else {
putserv "PRIVMSG $chan :Nobody got it...\0034losers!"
}
unbind pub - $letters pub_gotit
set winuse 0
set chan ""
#############################################
pub_word # this doesnt work
#############################################
}
# List of things to say when a validuser wins
set winsay {
"must be a fluke"
"you rule!!"
"how's that VD comin along?"
"can I be your friend?"
"you're such a badass!"
"must have gotten all the easy ones!"
"but you still suck!"
"you must be on \0034fire!!"
"cheater!"
}
# Somebody won, spew to chan and update score file. Scores are kept for both
# daily and cumulative. Once anyone hits 500 all scores are reset.
proc pub_gotit {nick uhost handle channel args} {
global wscorefile words letters answer winuse chan winsay
putserv "PRIVMSG $chan :Woohoo $nick!! You got it...\0034$letters"
kill_timers
unbind pub - $letters pub_gotit
if {![validuser $handle]} {
set winuse 0
set chan ""
return 0
}
if {![file exists $wscorefile]} {
set fd [open $wscorefile w]
close $fd
}
set fd [open $wscorefile r]
set j 0
while {![eof $fd]} {
lappend score [gets $fd]
set j [incr j]
}
set i [expr $j - 1]
set score [lreplace $score $i $i]
close $fd
for {set k 0} {$k < $i} {incr k 3} {
set scnick [lindex $score $k]
if {[string tolower $handle] == [string tolower $scnick]} {
set newd [expr [lindex $score [expr $k + 1]] + 1]
set newf [expr [lindex $score [expr $k + 2]] + 1]
set score [lreplace $score [expr $k + 1] [expr $k + 2] $newd $newf]
set dscore [lindex $score [expr $k + 1]]
set rand_say [lindex $winsay [rand [llength $winsay]]]
putserv "PRIVMSG $chan :$nick you've won $dscore times today, $rand_say"
if {$newf == 500} {
putserv "PRIVMSG $chan :OH MY GAWD!! $scnick just scored 500 since time began!"
set score [lreplace $score 1 2 0 0]
for {set k 1} {$k < $i} {incr k 2} {
set score [lreplace $score $k $k 0]
incr k
set score [lreplace $score $k $k 0]
}
putserv "PRIVMSG $chan :\001ACTION sprinkles bot dust and time begins again!"
}
set winuse 0
set chan ""
set fd [open $wscorefile w]
foreach line $score {
puts $fd $line
}
close $fd
return 0
}
}
putserv "PRIVMSG $chan :$nick this is your first ever win!!!...Don't you feel pathetic!"
set score [lappend score $handle]
set score [lappend score 1]
set score [lappend score 1]
set fd [open $wscorefile w]
foreach line $score {
puts $fd $line
}
close $fd
set winuse 0
set chan ""
#############################################
pub_word # this doesnt work
#############################################
}
}
proc the_score {nick uhost handle channel args} {
global botnick wscorefile words answer winuse chan
if {($winuse == 1) && ($chan == $channel)} {
putserv "PRIVMSG $chan :Sheesh! Can't you see we're playing here!!"
return 0
}
if {![file exists $wscorefile]} {
putserv "PRIVMSG $chan : No one has scored yet!"
return
}
set fd [open $wscorefile r]
set j 0
while {![eof $fd]} {
lappend score [gets $fd]
incr j
}
set i [expr $j - 1]
set score [lreplace $score $i $i]
close $fd
set looptest [llength $score]
for {set k 0} {$k < $looptest} {incr k 3} {
set wosnick [lindex $score $k]
set dscore [lindex $score [expr $k + 1]]
set fscore [format "%d" [lindex $score [expr $k + 2]]]
lappend tempsortscore [format "%.20d %d %s" $fscore $dscore $wosnick]
}
set tempsortscore [lsort -decreasing $tempsortscore]
for {set i 0} {$i < 10} {incr i} {
set tiscore [lindex $tempsortscore $i]
if {$tiscore != ""} {
set newtempsortscore [string trimleft [lindex $tiscore 0] 0]
append sortscore [format "\0034 %s\.\003 %s\(%d\/%d\) " [expr {$i + 1}] [lindex $tiscore 2] $newtempsortscore [lindex $tiscore 1]]
}
}
set slength [llength $sortscore]
putserv "PRIVMSG $channel :The top 10 Scramble scorers are (Total/Daily):"
putserv "PRIVMSG $channel :$sortscore"
}
# Give clue word
proc clue_1 {} {
global chan answer
set clue $answer
putserv "PRIVMSG $chan :Clue --->\00312 $clue"
}
# Give first letter of the word
proc clue_2 {} {
global chan letone
set clue $letone
putserv "PRIVMSG $chan :First letter --->\00312 $clue"
}
# Give the second letter
proc clue_3 {} {
global chan lettwo
set clue $lettwo
putserv "PRIVMSG $chan :First two letters --->\00312 $clue"
}
# Kill all remaining timers when someone wins.
proc kill_timers {} {
global chan
foreach j [utimers] {
if {[lindex $j 1] == "noone_gotit"} {
killutimer [lindex $j 2]
}
if {[lindex $j 1] == "clue_1"} {
killutimer [lindex $j 2]
}
if {[lindex $j 1] == "clue_2"} {
killutimer [lindex $j 2]
}
if {[lindex $j 1] == "clue_3"} {
killutimer [lindex $j 2]
}
}
return 0
}
# Its 3:00 am, clear the daily scores.
proc wo_refresh_time {m h d mo y} {
global wscorefile
set fd [open $wscorefile r]
set j 0
while {![eof $fd]} {
lappend score [gets $fd]
set j [incr j]
}
set i [expr $j - 1]
set score [lreplace $score $i $i]
close $fd
set score [lreplace $score 1 1 0]
for {set k 1} {$k < $i} {incr k 3} {
set score [lreplace $score $k $k 0]
}
set fd [open $wscorefile w]
foreach line $score {
puts $fd $line
}
close $fd
return 1
}
putlog "Wordgame by murf loaded"