Страница 1 из 1

Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 03 фев 2014 14:56
Pitstopper
Здравствуйте, уважаемые! Есть скомпиленный бот Eggdrop 1.6.21 (скомпилен с поддержкой tcl 8.6) и викторина Quiz.tcl (модификация v1.15 by Kreon, на основе v2.0.4 by hex and Drakon, не-MySQL версия игры, Lite-издание.) , взятая с вашего сайта. С некоторых пор викторина стала задавать некоторые вопросы одним словом. В базе - нормальный вопрос. Викторина задает его, но он состоит из одного слова.
Подскажите, граждане, где может быть подвох? Что я делаю не так?

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 03 фев 2014 18:05
tvrsh
Случайный вопрос выбирается этой частью кода в процедуре ::tpub::question:
TCL: [ Скачать ] [ Скрыть ]
                "get" {
                        # random question
                        if {![info exists qpos] || ![llength $qpos]} {
                                putlog "Out of questions, rehashing..."
                                if {![question rehash]} {
                                        putlog "No questions available, eek."
                                        return {}
                                }
                        }
                        set idx [expr int(rand() * [llength $qpos])]
                        set fpos [lindex $qpos $idx]
                        set qpos [lreplace $qpos $idx $idx]

                        if {[catch {open $conf(fnquestions) r} fileID]} { return {} }
                        seek $fileID $fpos start
                        set line [gets $fileID]
                        set line [split [string trim $line] |]
                        set line "[toupper [string range $line 0 0]][string range $line 1 end]"
                        close $fileID
                        lappend game(qid2qpos) "$game(qid) $fpos"
                        return [list [lindex $line 0] [split [lrange $line 1 end] ,]]
                }

Код возвращает список из двух элементов, в первом сам вопрос, во втором ответ на него. Попробуй закомментировать строку
                        set line "[toupper [string range $line 0 0]][string range $line 1 end]"

Что она делает и зачем я не совсем понимаю, переводит в верхний регистр вопрос и слепляет его с ответом, превращая в строку. После чего, в return берется первый элемент этой строки, который будет первым словом вопроса, а ответом становятся все остальные слова. В общем, она всю логику разрушает.

СообщениеДобавлено: 03 фев 2014 22:40
Pitstopper
Спасибо за помощь. Сейчас проверить работоспособность не могу, но завтра обязательно. По результатам отпишусь.

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 04 фев 2014 09:47
Pitstopper
Попробовал, закомментировал эту строку. Не сработало. Так и продолжает задавать вопросы одним словом.

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 04 фев 2014 18:25
tvrsh
У тебя база в обычном формате "Вопрос?|ответ"?
Попробуй весь код заменить на это:
TCL: [ Скачать ] [ Скрыть ]
                "get" {
                        # random question
                        if {![info exists qpos] || ![llength $qpos]} {
                                putlog "Out of questions, rehashing..."
                                if {![question rehash]} {
                                        putlog "No questions available, eek."
                                        return {}
                                }
                        }
                        set idx [expr int(rand() * [llength $qpos])]
                        set fpos [lindex $qpos $idx]
                        set qpos [lreplace $qpos $idx $idx]

                        if {[catch {open $conf(fnquestions) r} fileID]} { return {} }
                        seek $fileID $fpos start
                        set line [gets $fileID]
                        close $fileID
                        lappend game(qid2qpos) "$game(qid) $fpos"
                        return [split [string trim $line] "|"]
                }
 

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 05 фев 2014 08:47
Pitstopper
Да, база в обычном формате. Заменил код на ваш кусок - результат нулевой. Попробую потавить другую викторину. Посмотрю на результат.

P.S. - забыл добавить. Всё это началось, когда я пересобрал бота с поддержкой TCL 8.6. Библиотеки собирал локально, в домашней папке, конфигурил бота по readme в папке с ботом. Всё заработало, а вот викторинка - нет.

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 05 фев 2014 10:20
Pitstopper
Попробовал поставить другую викторину - ту, которая Викторина v2.4 модификация v1.8 by Sergio + new addons. Та же печаль. Видимо, дело не в викторинах, а в какой-то связке моего бота с TCL 8.6. Потому как без TCL 8.6 всё работает... Кроме обработчика ссылок etitle.tcl. Ради него только и затеялся собирать бота с TCL. Подскажите, граждане, как же ж быть жеж? Что "покрутить" чтобы либо завести викторинку, либо поиметь обработчик ссылок типа etitle.tcl, но без необходимости TCL 8.6?

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

СообщениеДобавлено: 05 фев 2014 18:07
tvrsh
Попробуй title_pub.tcl