RedHeavenHeroЭто из-за вызова коллбека с параметром. По-умолчанию скриптовая машина просто добавляет две скобки (и параметры, в некоторых случаях) к имени и исполняет получившийся код. Если же вызывать коллбек с пользовательскими параметрами, то исполняемый код выходит каким-то таким:
'Dragon("'..hero..'")()'
то есть после вызова функции Dragon будет еще вызван результат, возвращенный из нее, а так как функция ничего не возвращает, то и получается ошибка попытки вызова nil.
Лечится добавлением двух минусов
QuestionBox(path.."tom2.txt",'Dragon("'..hero..'")--')
тогда исполняемый код будет иметь вид:
'Dragon("'..hero..'")--()'
то есть, лишние скобки будут закомментированы.