local func nil -- этой переменной позже присвоим нужную функцию local

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
local func=nil -- этой переменной позже присвоим нужную функцию
local module,fname=string.match(infop.func,"(.+)[.](.+)") -- "разбиваем" строку на имя файла и имя функции
if (not fname) and xr_effects[infop.func] then -- если это ничего не дало, и функция, указанная в логике, есть в xr_effects
func=xr_effects[infop.func] -- то назначаем её на выполнение
else
if _G[module] and _G[module][fname] then -- иначе, если существует указанный файл, и в этом файле есть указанная функция
func=_G[module][fname] -- то на выполнение назначаем её
end
end
if not func then -- если функция не присвоена по каким-то причинам (её не существует, или синтаксическая ошибка в указанном файле), то крешнем игру через abort
abort("object '%s': pick_section_from_condlist: function '%s' is " ..
"not defined in xr_effects.sсript or in _G", if_then_else(npc, npc:name(), "nil"), infop.func)
end
-- далее выполняем заданную функцию
-- если есть параметры, то передаём их, если нет - то нет
if infop.params then
func(actor, npc, infop.params)
else
func(actor, npc)
end