#################################################################### # # 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 / - activezi / dezactivezi Scrabble #!scrabble - pornesti jocul #!scrabble stop - opresti jocul #!scrabble reset - resetezi topurile #!top / - vizualizezi topurile. #!won - 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 / \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 / \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 : \00304[join $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"