# Применение ПОЛЬЗОВАТЕЛЬСКОЙ функции в Stead3
Wol4ik(syscall,22) — All
2017-12-03 15:10:09


Рабочий пример, функция fire может быть вызвана в act, use, used объектов и/или в onenter комнат, или в теле других функций.
fire = function () -- пользовательсяка функция для многократного использования
	p 'Вы находитесь рядом с источником тепла.';
	-- еще здесть могут быть помещены формулы, 
	-- меняющие состояние игры
	-- статус игрока, комнат и объектов.
end;
--
room {
	nam = 'main';
	obj = {'лес'};
}
--
obj {
	nam = 'лес';
	dsc = 'Вы в лесу, на опушке горит {костёр}.';
	act = fire; -- применение пользовательской функции.
};

При смешивании текущей функции с ранее заявленной пользовательской функцией, например в act:

obj {
	nam = 'лес';
	dsc = 'Вы в лесу, на опушке горит {костёр}.';
	act = function() 
             p "Вы приблизились к костру.";
             fire() -- применение пользовательской функции 
        end; -- в теле другой функции.
};

# Re: Применение ПОЛЬЗОВАТЕЛЬСКОЙ функции в Stead3
Peter(syscall,1) — Wol4ik
2017-12-03 15:17:21


> Рабочий пример, функция fire может быть вызвана в act, use, used объектов и/или в onenter комнат, или в теле других функций.

Убрал лишний end во втором фрагменте кода

# Re: Применение ПОЛЬЗОВАТЕЛЬСКОЙ функции в Stead3
Wol4ik(syscall,22) — Wol4ik
2017-12-03 15:21:16


В примере про смешиванее функций не нужен второй end. Так как он уже есть в теле пользовательской функции. Фактически она вносится одной строчкой
fire()
а вот правильная запись второго примера
=====
obj {
nam = 'лес';
dsc = 'Вы в лесу, на опушке горит {костёр}.';
act = function()
p "Вы приблизились к костру.";
fire() -- применение пользовательской функции в теле другой функции.
end;
};
=====

# Re: Применение ПОЛЬЗОВАТЕЛЬСКОЙ функции в Stead3
Wol4ik(syscall,22) — Peter
2017-12-04 03:43:33


При том, хочу отметить, что есть неочевидный нюанс со скобками /ну, для знатоков lua, может быть, очевидный/

1. Если мы приравнивает весь act (use, и т.п.) к пользовательской функции, то пишем ее имя обязательно без скобок: act = fire;

2. А если добавляем в тело другой функции, как дополнение, то обязательно со скобками:
act = function ()
      -- тело текущей функции
         fire() -- имя пользовательской ф-ции со скобками
      end;