Страница 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:
"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
У тебя база в обычном формате "Вопрос?|ответ"?
Попробуй весь код заменить на это:
"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