##################################################################################### # # eggdrop.70region.ru - помощь по eggdrop/windrop/tcl в Томске. # # Скрипт для проведения дуэлей на канале :) # # Команды: # !duel - вызвать на дуэль # # Установка: # - положить скрипт в директрорию бота scripts # - в eggdrop.conf прописать source scripts/duel.tcl # - в директории scripts создать директорию duel # - rehash боту # # Отключить\включить на канале: .chanset #chan +\-nopubduel # # 1.0 [21-03-2008] - первая версия # 1.1 [22-03-2008] - добавлена возможность уведомления входящих о прошедщей дуэли # 1.2 [13-04-2008] - исправлены меленькие недочеты # 1.3 [15-04-2008] - теперь информация о прошедших дуэлях пишется для каждого канала в свой файл (Спасибо PeoneEr`y за идею;) # # duel.tcl by djes@RusNet # ##################################################################################### namespace eval duel {} setudef flag nopubduel foreach p [array names duel *] { catch {unset duel($p) } } ###---------### #| Настройки |# ###---------### #Префикс команд set duel(pref) "!" #Список команд set duel(cmd) "ду дуэль стреляться" #Через сколько секунд можно снова дуэлитсья set duel(timers) 180 #Оповещать входящих о последних результатах дуэли? (1-да; 0-нет) set duel(greet) 1 #Директория где хранить последних дуэлянтов set duel(file_dir) "scripts/duel/" ###-------------------------------------------### #| Ниже не чего не меняйте, если не знаете TCL |# ###-------------------------------------------### set duel(last) 0 set duel(go) 0 set duel(name) "duel.tcl" set duel(ver) "1.3" set duel(autors) "djes@RusNet " foreach bind [split $duel(cmd) " "] { bind pub - "$duel(pref)$bind" ::duel::1 } bind pubm - * ::duel::2 bind join - "*" ::duel::3 proc ::duel::1 { nick host hand chan text } { global duel botnick if {[channel get $chan nopubduel]} { putserv "notice $nick :Шэриф запретил дуэли на канале $chan" return } if { $text == "" } { putserv "privmsg $chan :$nick, выбирите второго дуэлянта" return } if { $text == $nick } { putserv "privmsg $chan :$nick, Дурак что ли?" return } if { $text == $botnick } { putserv "privmsg $chan :$nick, ты так не шути" return } if { [expr [unixtime] - $duel(last)] < $duel(timers) } { putserv "notice $nick :Еще не все трупы убрали после прошлой дуэли.. подожди [expr $duel(timers) - ([unixtime] - $duel(last))] сек." return } else { set duel(last) [unixtime] } set duel(zadira) $nick set duel(jertva) [lindex $text 0] if {![onchan $duel(jertva) $chan]} { putserv "privmsg $chan :$nick, не вижу ника $duel(jertva) на канале $chan..." } else { putserv "privmsg $chan :$duel(jertva), тебя вызывает на дуэль $duel(zadira). Принимаешь вызов? (1-да, 2-нет)" set duel(go) 1 } } proc ::duel::2 { nick host hand chan text } { global duel if { $duel(go) == 1 && $nick == $duel(jertva) } { } else { return } if { $text == 1 } { putserv "privmsg $chan :$duel(jertva), ты принял вызов.." putserv "privmsg $chan :\00304Начинается дуэль! \002Дуэлятны к оружию!\002\003" set kto [rand 12] if { $kto >= 7 } { putserv "kick $chan $duel(jertva) :\00304Ты промахнулся.. $duel(zadira) был точнее!\003" putserv "privmsg $chan :$duel(zadira),\00304 поздравляю!\003 Ты выиграл дуэль!" set duel(win) $duel(zadira) set duel(looz) $duel(jertva) } if { $kto <= 6 } { putserv "kick $chan $duel(zadira) :\00304Ты промахнулся.. $duel(jertva) был точнее!\003" putserv "privmsg $chan :$duel(jertva),\00304 поздравляю!\003 Ты выиграл дуэль!" set duel(win) $duel(jertva) set duel(looz) $duel(zadira) } set duel(go) 0 set file [open $duel(file_dir)$chan.duel w+] puts $file $duel(win) puts $file $duel(looz) close $file return } if { $text == 2 } { putserv "privmsg $chan :$duel(jertva), трус.." set duel(go) 0 return } } proc ::duel::3 { nick host hand chan } { global duel if {[channel get $chan nopubduel]} {;return} if { $duel(greet) == 1 && [llength $duel(file_dir)$chan.duel] > -1 } { set file [open $duel(file_dir)$chan.duel r] set data [read $file] close $file set lines [split $data \n] set win [lindex $lines 0] set looz [lindex $lines 1] putserv "notice $nick :\00305В последней дуэле на канале \00312$chan\00305 победу праздновал \00303$win\00305 одержавший победу над \00303$looz\00305. Если хочешь оспорить звание лучшего дуэлятна юзай \00304!дуэль ник\003" } else { return } } putlog "$duel(name) v$duel(ver) by $duel(autors) -Loaded-"