Случайный вопрос выбирается этой частью кода в процедуре
::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 берется первый элемент этой строки, который будет первым словом вопроса, а ответом становятся все остальные слова. В общем, она всю логику разрушает.