proc ::tpub::place5 {hand} { set place -1 if {![info exists list]} { set list [users list8] } for {set i 0} {$i < [llength $list]} {incr i} { if {![string compare -nocase $hand [lindex [lindex $list $i] 0]]} { set place $i break } } incr place return $place } proc ::tpub::cmd_дуэль {nick chan text} { return [cmd_duel $nick $chan $text] } proc ::tpub::cmd_duel {nick chan text} { variable conf; variable game if {$text == "?help?"} { return [usage $nick $chan дуэль "" "начинает дуэль с другим игроком."] } if {![info exists game]} { putmsg $chan "\00305$nick\00310, викторина не запущена - воспользуйся командой \00304\002!start\002" return 0 } if {[info exists game(duel)] && $game(duel) >= 1} { putnot $nick "\00306Дуэль уже идет.\003" return 0 } else { set game(dqnum) [lindex [split $text] 0] if {$game(dqnum) < 5 || $game(dqnum) > 15} { set game(dqnum) 5 } set nick [nick2hand $nick] if {$nick == "*"} { putmsg $chan "\00305$nick\00310, Вы не можете начать дуэль. Вы не опозналы ботом." return 0 } lappend game(du) $nick putmsg $chan "\00304[expr {[users isremort $nick] ? "\002$nick\002" : $nick}] \00306объявляет о начале дуэли до \00304$game(dqnum) \00306ответов. Используйте \00304\002!ок\002 \00306чтобы принять участие в ней. У Вас около минуты на раздумья.\003" set game(duel) 1 set game(duel_nick1) "$nick" timer 1 [list tpub::checkduel $chan] } } proc ::tpub::cmd_ок {nick chan text} { return [cmd_ok $nick $chan $text] } proc ::tpub::cmd_ok {nick chan text} { variable conf; variable game if {$text == "?help?"} { return [usage $nick $chan ок "" "принять вызов начавшего дуэль игрока."] } if {![info exists game]} { putmsg $chan "\00305$nick\00310, викторина не запущена - воспользуйся командой \00304\002!start\002" return 0 } set hand [nick2hand $nick] if {$hand == "*"} { putmsg $chan \00305$nick\00310, Вы не можете согласиться дуэль. Вы не опозналы ботом." return 0 } if {[llength $game(du)] == 1 } { if {[lindex $game(du) 0] == $hand} { putnot $nick "\00303[expr {[users isremort $hand] ? "\002$hand\002" : $hand}]\00306, ты не можешь начать дуэль с самим собой.\003" return 0 } lappend game(du) $hand } else { putnot $nick "\00306Дуэль уже идет.\003" return 0 } #putmsg $chan "\00303[expr {[users isremort $hand] ? "\002$hand\002" : $hand}] \00306принял вызов \00304[expr {[users isremort $begduel] ? "\002$begduel\002" : $begduel}]\00303.\003" #putlog $game(du) set game(duel_nick2) "$hand" #tpub::checkduel $chan } proc ::tpub::checkduel { chan } { variable conf; variable game # проверим, а на канале ли человек начавший дуэль set nick [hand2nick [lindex $game(du) 0]] if {[onchan $nick $conf(channels)] != "1"} { putmsg $chan "\00306Дуэль прекращена так как \00304[expr {[users isremort $nick] ? "\002$nick\002" : $nick}] \00306ушел с канала.\003" set game(du) "" set game(duel) 0 return 0 } # посмотрим, сколько осталось людей в дуэли if {![llength $game(du)] || [llength $game(du)] < 2} { putmsg $chan "\00306Никто не осмелился принять вызов \00304[expr {[users isremort [lindex $game(du) 0]] ? "\002[lindex $game(du) 0]\002" : [lindex $game(du) 0]}]\00306.\003" set game(du) "" set game(duel) 0 return 0 } else { putmsg $chan "\00306Начинается дуэль до \00303$game(dqnum)\00306 ответов между \00304[expr {[users isremort [lindex $game(du) 0]] ? "\002[lindex $game(du) 0]\002" : [lindex $game(du) 0]}] \00306и \00303[expr {[users isremort [lindex $game(du) 1]] ? "\002[lindex $game(du) 1]\002" : [lindex $game(du) 1]}]\00306.\003" set game(duel) 2 set game(duel_t1) 0 set game(duel_t2) 0 } }