Привет!
Давно уже хотел портировать часть функций метапарсера в классику. Сегодня я это сделал: 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!
extlib.png