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