# # 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 : \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 $fileif {$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 0while {$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 $fileif {$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"