# # Black Scrabble 1.1 TCL # #Un joc in care vi se ofera litere si trebuie sa faceti cuvinte cu ele #Dispune de top general/runde, autovoice la primii 3 din top precum #si functie de auto turn off in caz ca numai joaca nimeni :) # #Comenzi : # #!scrabble <on> / <off> - activezi / dezactivezi Scrabble #!scrabble - pornesti jocul #!scrabble stop - opresti jocul #!scrabble reset - resetezi topurile #!top <general> / <runde> - vizualizezi topurile. #!won <user> - vizualizezi statistici user. #!game - arata literele curente din care veti forma cuvinte. # #INSTALARE : # #Puneti Scrabble.db in directorul principal al eggdrop-ului ( eggdrop de obicei ) #iar tcl-ul BlackScrabble.tcl in scripts #Adaugati in config source scripts/BlackScrabble.tcl # # have Fun # # BLackShaDoW ProductionS # WwW.TclScripts.Net
#Seteaza aici ce flaguri pot activa/dezactiva/reseta Scrabble
set scrabble(flags) "mn|mM"
#Aici setezi dupa cate runde in care nu exista activitate sa se #opreasca jocul automat ?
set scrabble(end_rounds) "5"
# # The End is Near :) #
bind pub - !scrabble start:scrabble bind pubm - * preia:cuvant bind pub - !top top:scrabble bind pub - !won won:scrabble bind pub - !game arata:litere bind join - * top:3:join
set scrabble(file) "Scrabble.db" set scrabble(userfile) "Scrabble_stats.db" setudef flag scrabble
if {!file exists $scrabble(userfile)} {
set file [open $scrabble(userfile) w] close $file
}
if {!file exists $scrabble(file)} {
set file [open $scrabble(file) w] close $file
}
proc arata:litere {nick host hand chan arg} {
global scrabble
if {!channel get $chan scrabble} {
puthelp "NOTICE $nick :\00312Scrabble\003 nu este activat." return 0
} if {info exists scrabble(word:$chan)} {
puthelp "PRIVMSG $chan :\00301Literele curente sunt :\003 \00300,12$scrabble(word:$chan)\003"
} }
proc won:scrabble {nick host hand chan arg} {
global scrabble set user [lindex [split $arg] 0]
if {!channel get $chan scrabble} {
puthelp "NOTICE $nick :\00312Scrabble\003 nu este activat." return 0
}
if {$user == ""} { set user $nick }
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1] set get_nick [lindex [split $line] 0]
if {string match -nocase $chan $channel && string match -nocase $get_nick $user} {
set found_nrg 1 lappend points [join [lindex [split $line] 3]] lappend rounds [join [lindex [split $line] 4]]
} }
if {info exists found_nrg} {
puthelp "PRIVMSG $chan :\00312$user\003 \00301are\003 \00304$points\003 \00301puncte si\003 \00304$rounds\003 \00301runde castigate.\003"
} else {
puthelp "NOTICE $nick :\00301Nu am gasit informatii.\003" }
}
proc top:scrabble {nick host hand chan arg} {
global scrabble set option [lindex [split $arg] 0]
if {!channel get $chan scrabble} {
puthelp "NOTICE $nick :\00312Scrabble\003 nu este activat." return 0
}
if {$option == ""} {
puthelp "NOTICE $nick :\00301Use\003 \00312!top <general> / <runde>\003" return 0
}
switch -exact -- $option { general {
puthelp "PRIVMSG $chan :Top \00312Scrabble\003 General este :" afiseaza:topscrabble $chan "general"
} runde {
puthelp "PRIVMSG $chan :Top \00312Scrabble\003 Runde este :" afiseaza:topscrabble $chan "runde" }
default {
puthelp "NOTICE $nick :\00301Use\003 \00312!top <general> / <runde>\003" } }
}
proc afiseaza:topscrabble {chan type} {
global scrabble set counter 0 array set topscr [list] set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1] set nick [lindex [split $line] 0]
if {$type == "general"} { set top_point lindex [split $line 3] } else { set top_point lindex [split $line 4] }
if {string match -nocase $channel $chan} { if {$top_point != "0"} {
lappend topscr($top_point) $nick } }
} foreach t_scr [lsort -integer -decreasing [array names topscr] {
set counter [expr $counter + 1]
if {$counter < 11} {
lappend the_line \00304- $counter -\003 : [join $topscr($t_scr) ,] \00312\[$t_scr\]\003
} } if {info exists the_line} {
puthelp "PRIVMSG $chan :[join $the_line]"
} else {
puthelp "PRIVMSG $chan :None" }
}
proc start:scrabble {nick host hand chan arg} {
global scrabble set option [lindex [split $arg] 0]
if {matchattr $hand $scrabble(flags) $chan} { if {string equal -nocase "reset" $option} {
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1]
if {string match -nocase $channel $chan} {
lappend arguments [join $channel] }
} if {info exists arguments} { resetare:top $chan $arguments }
puthelp "NOTICE $nick :\00301Resetez topurile..\003" return 0
} if {string equal -nocase "on" $option} {
channel set $chan +scrabble puthelp "PRIVMSG $chan :\00312Scrabble\003 este activat. Pentru a juca tasteaza \00304!scrabble\003" return 0
}
if {string equal -nocase "off" $option} {
channel set $chan -scrabble scrabble:stop $chan puthelp "PRIVMSG $chan :\00312Scrabble\003 este dezactivat." return 0 }
}
if {!channel get $chan scrabble} {
puthelp "NOTICE $nick :\00312Scrabble\003 nu este activat." return 0
}
if {string equal -nocase "version" $option} {
puthelp "PRIVMSG $chan :Versiune \00312Scrabble 1.0\003 by \0034BLaCkShaDoW\003. Pentru alte informatii -> \00312WwW.TclScripts.Net\003" return 0
}
if {string equal -nocase "stop" $option} {
puthelp "PRIVMSG $chan :\00312Scrabble\003 a fost oprit." scrabble:stop $chan return 0
} if {info exists scrabble($chan:run)} {
puthelp "NOTICE $nick :\00301Scrabble ruleaza deja.\003" return 0
}
puthelp "PRIVMSG $chan :Porneste Jocul de \00312Scrabble\003..." afiseaza:scrabble $chan set scrabble($chan:run) 1
}
proc afiseaza:scrabble {chan} {
global scrabble
if {info exists scrabble(stop:it:$chan)} {
unset scrabble(stop:it:$chan) return 0
}
set file [open $scrabble(file) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"] set scrabble(current_word:$chan) [lindex $words [rand [llength $words]]] set scrabble(word:$chan) [scrabble:process $scrabble(current_word:$chan)] set length_word [string length $scrabble(current_word:$chan)] switch -exact -- $length_word { 4 { set timer_seconds 60 } 5 { set timer_seconds 65 } 6 { set timer_seconds 75 } 7 { set timer_seconds 85 } 8 { set timer_seconds 95 } 9 { set timer_seconds 100 } default { set timer_seconds 120 }
}
if {$data == ""} {
puthelp "PRIVMSG $chan :Nu sunt cuvinte in baza de date. \00312Scrabble\003 oprit." scrabble:stop $chan return 0
}
puthelp "PRIVMSG $chan :Ghiciti min. 4 litere : \00300,12$scrabble(word:$chan)\003 - \00304$timer_seconds\003 secunde la dispozitie." utimer $timer_seconds [list again:scrabble $chan] set scrabble($chan:the_time) $timer_seconds
}
proc again:scrabble {chan} {
global scrabble alege:castigator $chan verifica:top:3 $chan reset:for:new $chan afiseaza:scrabble $chan
}
proc verifica:top:3 {chan} {
global scrabble array set topscr [list] set counter 0 set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1] set host [lindex [split $line] 2]
set top_point lindex [split $line 3] if {string match -nocase $channel $chan} {
lappend topscr($top_point) $host
} }
foreach t_scr lsort -integer -decreasing [array names topscr] { set counter [expr $counter + 1 if {$counter <= 3} { lappend top_3 join $topscr($t_scr)
}
}
if {info exists top_3} { foreach read_host $top_3 { foreach user chanlist $chan {
set get_host *!*@[lindex [split [getchanhost $user $chan] "@"] 1]
if {string match -nocase $read_host $get_host} { lappend valid_users join $user
} }
}
if {info exists valid_users} { foreach user $valid_users { if {(!isop $user $chan) && (!isvoice $user $chan)} {
pushmode $chan +v $user lappend now_voice [join $user] } }
} if {info exists now_voice} { if {llength $now_voice > 1} {
puthelp "PRIVMSG $chan :\00312[join $now_voice ", "]\003 primesc \00304VOICE (+)\003 deoarece se afla in \00312Top 3 Scrabble\003 ."
} else {
puthelp "PRIVMSG $chan :\00312$now_voice\003 primeste \00304VOICE (+)\003 deoarece se afla in \00304Top 3 Scrabble\003." } } }
}
proc top:3:join {nick host hand chan} {
global scrabble
if {!channel get $chan scrabble} {
return 0
}
set get_host "*!*@[lindex [split $host @] 1]" array set topscr [list] set counter 0 set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1] set host [lindex [split $line] 2]
set top_point lindex [split $line 3] if {string match -nocase $channel $chan} {
lappend topscr($top_point) $host }
} foreach t_scr lsort -integer -decreasing [array names topscr] { set counter [expr $counter + 1 if {$counter <= 3} { lappend top_3 join $topscr($t_scr)
}
}
if {info exists top_3} { foreach read_host $top_3 { if {string match -nocase $get_host $read_host} {
set found_reg 1 utimer 3 [list pushmode $chan +v $nick] }
} if {info exists found_reg} {
utimer 3 [list puthelp "PRIVMSG $chan :\00312$nick\003 primeste \00304VOICE (+)\003 deoarece se afla in \00304Top 3 Scrabble\003 ."] } }
}
proc alege:castigator {chan} {
global scrabble array set winner [list] set nicks ""
if {info exists scrabble($chan:round_players)} { foreach m $scrabble($chan:round_players) { if {info exists scrabble($m:current_points)} {
lappend winner($scrabble($m:current_points)) $m
} }
foreach eq [lsort -integer -increasing [array names winner] { set max "$eq" }
if {info exists max} { foreach nick chanlist $chan { if {!isbotnick $nick} {
set get_host *!*@[lindex [split [getchanhost $nick $chan] "@"] 1]
foreach hosts $winner($max) { if {string match -nocase $get_host $hosts} {
lappend nicks $nick } }
} } puthelp "PRIVMSG $chan :Castigatorii rundei sunt : \00304join $nicks ", "\003 cu \00312$max\003 puncte"
runda:castigata $chan $winner($max) } set scrabble(is:played:$chan) 1 } puthelp "PRIVMSG $chan :Raspunsul alternativ era: \00312$scrabble(current_word:$chan)\003"
}
proc runda:castigata {chan args} {
global scrabble set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach host $args { foreach line $words {
set channel [lindex [split $line] 1] set get_host [lindex [split $line] 2]
if {string match -nocase $chan $channel && string match -nocase $get_host $host} {
lappend current_hosts [join $get_host] } } } runda:noua $chan $current_hosts
}
proc runda:noua {chan hosts} {
global scrabble
foreach host $hosts { if {$host != ""} {
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"] set i [lsearch -glob $words "* $chan $host *"]
if {$i > -1} {
set line [lindex $words $i] lappend total_general [lindex [split $line] 3] lappend runda_curenta [lindex [split $line] 4] set delete [lreplace $words $i $i] set file [open $scrabble(userfile) "w"] puts $file [join $delete "\n"] close $file } }
foreach nick chanlist $chan {
set get_host *!*@[lindex [split [getchanhost $nick $chan] "@"] 1]
if {string match -nocase $get_host $host} {
set the_nick $nick } }
}
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file
if {$data == ""} {
set file [open $scrabble(userfile) "w"] close $file
} if {info exists total_general && info exists runda_curenta} {
set file [open $scrabble(userfile) a] puts $file "$the_nick $chan $host [join $total_general] [expr [join $runda_curenta] + 1]" close $file }
}
proc reset:for:new {chan} {
global scrabble
if {info exists scrabble($chan:round_players)} { foreach m $scrabble($chan:round_players) { if {info exists scrabble($m:current_points)} {
unset scrabble($m:current_points) } }
}
if {info exists scrabble(current_word:$chan)} {
unset scrabble(current_word:$chan)
}
if {info exists scrabble(word:$chan)} {
unset scrabble(word:$chan)
}
if {info exists scrabble($chan:the_time)} {
unset scrabble($chan:the_time)
}
if {info exists scrabble($chan:round_words)} {
unset scrabble($chan:round_words)
}
if {info exists scrabble($chan:round_players)} {
unset scrabble($chan:round_players)
}
if {!info exists scrabble(is:played:$chan)} {
if {!info exists scrabble(no:playing:$chan)} {
set scrabble(no:playing:$chan) 0
}
set scrabble(no:playing:$chan) [expr $scrabble(no:playing:$chan) + 1]
} else {
if {info exists scrabble(no:playing:$chan)} {
unset scrabble(no:playing:$chan) } }
if {info exists scrabble(no:playing:$chan)} {
if {$scrabble(no:playing:$chan) >= $scrabble(end_rounds)} { puthelp "PRIVMSG $chan :\00312Scrabble\003 s-a oprit automat.Pentru a juca din nou tastati \00304!scrabble\003 . Va multumesc" unset scrabble(no:playing:$chan)
if {info exists scrabble(is:played:$chan)} {
unset scrabble(is:played:$chan)
}
set scrabble(stop:it:$chan) 1 scrabble:stop $chan } } if {[info exists scrabble(is:played:$chan)]} { unset scrabble(is:played:$chan) }
}
proc scrabble:process {word} {
global scrabble set split_word [split $word ""] set correct_word 0
while {$split_word != ""} {
set char_position [rand [llength $split_word]] set char [lindex $split_word $char_position] lappend rand_chars [join $char] set split_word [lreplace $split_word $char_position $char_position]
}
return $rand_chars
}
proc preia:cuvant {nick host hand chan arg} {
global scrabble
if {!channel get $chan scrabble} {
return 0
}
set cuvant_dat [join [lindex [split $arg] 0]] set correct_word 0 set the_word 0 set mask "*!*@[lindex [split $host @] 1]"
if {!info exists scrabble($chan:run) && !info exists scrabble(word:$chan)} {
return 0
}
if {string length $cuvant_dat > 3} { if {info exists scrabble($chan:round_words)} { if {lsearch -exact [string tolower $scrabble($chan:round_words) [string tolower $cuvant_dat] > -1} {
puthelp "NOTICE $nick :\00301Cuvantul\003 \00312$cuvant_dat\003 \00301a mai fost spus odata..\003" return 0 }
}
set split_word [string toupper [split $cuvant_dat ""]] set split_word_one $split_word set split_current [split $scrabble(current_word:$chan) ""] set file [open $scrabble(file) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach char $split_current {
if {[lsearch -exact $split_word $char] > -1} { set position [lsearch -exact $split_word $char] set correct_word [expr $correct_word + 1] set split_word [lreplace $split_word $position $position] }
}
foreach char $split_word_one {
if {[lsearch -exact $split_current $char] > -1} { set position [lsearch -exact $split_current $char] set the_word [expr $the_word + 1] set split_current [lreplace $split_current $position $position] }
} if {$correct_word > 3} { if {(lsearch -glob $words [string toupper $cuvant_dat] > -1) && ([string length $cuvant_dat == $correct_word)} {
lappend scrabble($chan:round_words) [join $cuvant_dat]
if {info exists scrabble($chan:round_players)} { if {lsearch -exact $scrabble($chan:round_players) $mask < 0} {
lappend scrabble($chan:round_players) [join $mask] }
} else {
lappend scrabble($chan:round_players) [join $mask]
}
if {($split_current == "") && (string length $cuvant_dat == string length $scrabble(current_word:$chan))} { set punctaj 500 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj
return 0
}
switch -exact -- $correct_word { 4 { set punctaj 30 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj } 5 { set punctaj 35 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj } 6 { set punctaj 40 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj } 7 { set punctaj 50 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj } 8 { set punctaj 60 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj }
9 { set punctaj 90 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj }
default { set punctaj 120 scrabble:punctaj $nick $chan $mask $punctaj anunta:punctaj $nick $chan $mask $cuvant_dat $punctaj
} } } } } }
proc scrabble:punctaj {nick chan mask punctaj} {
global scrabble set counter 0 set read_points 0 set read_round 0 set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set counter [expr $counter + 1] set channel [lindex [split $line] 1] set usermask [lindex [split $line] 2]
if {string match -nocase $mask $usermask && string match -nocase $channel $chan} {
set read_points [lindex [split $line] 3] set read_round [lindex [split $line] 4]
if {$line != ""} {
set counter [expr $counter - 1] set delete [lreplace $words $counter $counter] set files [open $scrabble(userfile) "w"] puts $files [join $delete "\n"] close $files } }
}
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file
if {$data == ""} {
set file [open $scrabble(userfile) "w"] close $file
}
set file [open $scrabble(userfile) "a"] puts $file "$nick $chan $mask [expr $read_points + $punctaj] $read_round" close $file if {[info exists scrabble($mask:current_points)]} { set scrabble($mask:current_points) [expr $scrabble($mask:current_points) + $punctaj]
} else {
set scrabble($mask:current_points) 0 set scrabble($mask:current_points) [expr $scrabble($mask:current_points) + $punctaj]
}
}
proc anunta:punctaj {nick chan mask cuvant_dat punctaj} {
global scrabble set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"]
foreach line $words {
set channel [lindex [split $line] 1] set usermask [lindex [split $line] 2] set punctaj_citit [lindex [split $line] 3] set runde [lindex [split $line ] 4]
if {string match -nocase $mask $usermask && string match -nocase $channel $chan} {
set exists_user 1 }
}
if {info exists exists_user && info exists scrabble($chan:the_time)} {
puthelp "PRIVMSG $chan :\00312$nick\003 cu \00300,12$cuvant_dat\003 a obtinut \00304$punctaj\003 puncte in \00304[expr $scrabble($chan:the_time) - [get:scrabble:time $chan]]\003 secunde . Total puncte : \00312$punctaj_citit\003 - Runda aceasta : \00312$scrabble($mask:current_points)\003 - Runde Castigate : \00312$runde\003 . Au mai ramas \00304[get:scrabble:time $chan]\003 secunde" }
}
proc scrabble:stop {chan} {
global scrabble
if {info exists scrabble($chan:round_players)} { foreach m $scrabble($chan:round_players) { if {info exists scrabble($m:current_points)} {
unset scrabble($m:current_points) } }
}
if {info exists scrabble($chan:round_players)} {
unset scrabble($chan:round_players)
}
if {info exists scrabble($chan:run)} {
unset scrabble($chan:run)
}
if {info exists scrabble($chan:the_time)} {
unset scrabble($chan:the_time)
}
if {info exists scrabble(current_word:$chan)} {
unset scrabble(current_word:$chan)
}
if {info exists scrabble(word:$chan)} {
unset scrabble(word:$chan)
}
if {info exists scrabble($chan:round_words)} {
unset scrabble($chan:round_words)
}
foreach tmr utimers { if {string match "*again:scrabble*" [join [lindex $tmr 1]} { killutimer lindex $tmr 2
} }
}
proc get:scrabble:time {chan} {
global scrabble
foreach tmr utimers { if {string match "*again:scrabble $chan*" [join [lindex $tmr 1]} { set time_left lindex $tmr 0
}
}
return $time_left
}
proc resetare:top {chan arguments} {
global scrabble
foreach arg $arguments { if {$arg != ""} {
set file [open $scrabble(userfile) "r"] set data [read -nonewline $file] close $file set words [split $data "\n"] set i [lsearch -glob $words "* $arg *"]
if {$i > -1} {
set line [lindex $words $i] set delete [lreplace $words $i $i] set file [open $scrabble(userfile) "w"] puts $file [join $delete "\n"] close $file } } } set file [open $scrabble(userfile) "r"] set data [read -nonewline $file]
if {$data == ""} {
set file [open $scrabble(userfile) "w"] close $file }
}
putlog "Black Scrabble 1.1 By BLaCkShaDoW Loaded"