Привет!
Давно уже хотел портировать часть функций метапарсера в классику. Сегодня я это сделал: https://github.com/instead-hub/stead3-modules/tree/master/extlib
Что есть? Словарь. Таким образом, можно делать стандартные реакции в зависимости от типа объекта. На данный момент поддерживаются:
- генерация описаний предметов, если у них не задан dsc (или dsc вернул false);
- supporter;
- container;
- transparent;
- concealed;
- openable;
- switchable;
- item (вещь можно брать и класть);
- дополнительные обработчики у obj: onact, onuse, oninv - которые вызываются перед стандартными.
Демонстрация:
loadmod 'extlib-ru' obj { -"винтовка"; nam = "винтовка"; onuse = function(s, w) if w ^ 'ваза' then p [[Бах!]]; remove(w) return end return false end; }:attr 'item' obj { -"телевизор"; nam = "телевизор"; }:attr 'switchable'; obj { -"стол"; nam = "стол"; }:attr 'supporter': with { 'винтовка', 'ваза', 'коробка', 'телевизор' } obj { -"коробка"; nam = "коробка"; }:attr 'openable,container'; obj { -"ваза"; nam = "ваза"; }:attr 'container,item':with 'цветок' obj { -"цветок"; nam = "цветок"; }:attr 'item'; room { nam = 'main'; title = "extlib demo"; obj = { 'стол' }; }
Для сообщений стандартной библиотеки применяется такой-же язык шаблонов как и у метапарсера:
--"видеть" ex.msg.EXAM = "{#Me} не {#word/видеть,#me,нст} {#vo/{#first/пр}} ничего необычного.";
В общем, как и всегда, надеюсь, что это кому-то понадобится на практике.
P.S. Конечно, модуль будет дорабатываться. Stay tuned!