Skip to content

Атрибуты-списки

Атрибуты-списки (такие как 'way' или 'obj') позволяют работать со своим содержимым с помощью набора методов. Атрибуты-списки призваны сохранять в себе списки объектов. На самом деле, вы можете создавать списки для собственных нужд, и размещать их в объектах, например:

lua
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([комната]) - вернуть переходы комнаты.

Конечно, вы можете обращаться к спискам и напрямую:

lua
	pl.obj:add 'нож'

Объекты в списках хранятся в том порядке, в котором вы их добавите. Однако, если у объекта присутствует числовой атрибут pri, то он играет роль приоритета в списке. Если pri не задан, значением приоритета считается 0. Таким образом, если вы хотите, чтобы какой-то объект был первым в списке, давайте ему приоритет pri < 0. Если в конце списка -- > 0.

lua
obj {
	pri = -100;
	nam = 'штука';
	disp = 'Очень важный предмет инвентаря';
	inv = [[Осторожней с этим предметом.]];
}