AlekseySЕсть проблема: вот код
function portal(hero)
if GetObjectOwner(hero) == 1 then
if GetObjectiveState("tom") == OBJECTIVE_UNKNOWN then
MessageBox(path.."tom1.txt")
end
if GetObjectiveState("tom") == OBJECTIVE_ACTIVE then
QuestionBox(path.."tom2.txt",'Dragon("'..hero..'")')
end
end
end
Trigger(OBJECT_TOUCH_TRIGGER, "portal","portal")
function Dragon(hero)
local week = ceil(GetDate(DAY) / 7)
sleep(3)
--
StartCombat(hero,nil,3,84, diff * week, 84, diff * week, 84, diff * week,nil,'BattleResult',nil,nil)
end
все хорошо работает, но...(см. скрин)
Что может это вызывать? Просто хочется, чтобы консоль была чиста, а не выдавала ошибку.
Это из-за вызова коллбека с параметром. По-умолчанию скриптовая машина просто добавляет две скобки (и параметры, в некоторых случаях) к имени и исполняет получившийся код. Если же вызывать коллбек с пользовательскими параметрами, то исполняемый код выходит каким-то таким:
'Dragon("'..hero..'")()'
то есть после вызова функции Dragon будет еще вызван результат, возвращенный из нее, а так как функция ничего не возвращает, то и получается ошибка попытки вызова nil.
Лечится добавлением двух минусов
QuestionBox(path.."tom2.txt",'Dragon("'..hero..'")--')
тогда исполняемый код будет иметь вид:
'Dragon("'..hero..'")--()'
то есть, лишние скобки будут закомментированы.