Атрибуты-списки
Атрибуты-списки (такие как 'way' или 'obj') позволяют работать со своим содержимым с помощью набора методов. Атрибуты-списки призваны сохранять в себе списки объектов. На самом деле, вы можете создавать списки для собственных нужд, и размещать их в объектах, например:
room {
nam = 'холодильник';
frost = std.list { 'мороженное' };
}Хотя, обычно, это не требуется. Ниже перечислены методы объектов типа 'список'. Вы можете вызывать их для любых списков, хотя обычно это будут way и obj, например:
ways():disable() -- отключить все переходы
- disable() - отключает все объекты списка;
- enable() - включает все объекты списка;
- close() - закрыть все объекты списка;
- open() - открыть все объекты списка;
- add(объект|имя, [позиция]) - добавить объект;
- for_each(функция, аргументы) - вызвать для каждого объекта функцию с аргументами;
- lookup(имя/тег или объект) - поиск объекта в списке. Возвращает объект и индекс;
- srch(имя/тег или объект) - поиск видимого объекта в списке;
- empty() - вернёт true, если список пуст;
- zap() - очистить список;
- replace(что, на что) - заменить объект в списке;
- cat(список, [позиция]) - добавить содержимое списка в текущий список по позиции;
- del(имя/объект) - удалить объект из списка.
Существуют функции, возвращающие объекты-списки:
- inv([игрок]) - вернуть инвентарь игрока;
- objs([комната]) - вернуть объекты комнаты;
- ways([комната]) - вернуть переходы комнаты.
Конечно, вы можете обращаться к спискам и напрямую:
pl.obj:add 'нож'Объекты в списках хранятся в том порядке, в котором вы их добавите. Однако, если у объекта присутствует числовой атрибут pri, то он играет роль приоритета в списке. Если pri не задан, значением приоритета считается 0. Таким образом, если вы хотите, чтобы какой-то объект был первым в списке, давайте ему приоритет pri < 0. Если в конце списка -- > 0.
obj {
pri = -100;
nam = 'штука';
disp = 'Очень важный предмет инвентаря';
inv = [[Осторожней с этим предметом.]];
}