ItemStack

## Описание

Представление стака в виде объекта C++.

Может быть получен функцией `ItemStack`, которая в качестве аргумента принимает `nil`, другой **ItemStack**-объект, ItemString или ItemTable.

## Методы

```
boolean = stack:is_empty()

```

Возвращает `true`, если стак пуст.

```
string = stack:get_name()

```

Возвращает наименование объектов, из которых состоит стак.

```
boolean = stack:set_name(string item_name)

```

Задаёт наименование объектов, из которых состоит стак.

```
number = stack:get_count()

```

Возвращает количество объектов в стаке.

```
boolean = stack:set_count(number count)

```

Задаёт количество объектов в стаке.

```
number = stack:get_wear()

```

Возвращает износ инструмента (от 0 до 65535), или 0 — для стака не-инструментов.

```
boolean = stack:set_wear(number wear)

```

Задаёт износ инструмента.

```
ItemStackMetaRef = stack:get_meta()

```

Возвращает ссылку на метаданные стака.

```
boolean = stack:clear()

```

Очищает стак, делая его пустым.

```
boolean = stack:replace(**ItemStack** | ItemTable | ItemString item_stack)

```

Заменяет содержимое стака.

```
ItemString = stack:to_string()

```

Возвращает стак в строковом формате.

```
ItemTable = stack:to_table()

```

Возвращает стак в табличном формате.

```
number = stack:get_stack_max()

```

Возвращает максимально допустимое (в зависимости от содержимого) количество объектов в стаке.

```
number = stack:get_free_space()

```

Возвращает оставшееся свободное место в стаке (равнозначно `stack:get_stack_max() - stack:get_count()`).

```
boolean = stack:is_known()

```

Возвращает `true`, если содержимое стака зарегистрировано.

```
table = stack:get_definition()

```

Возвращает таблицу свойств объекта, из которого состоит стак.

```
table = stack:get_tool_capabilities()

```

Возвращает таблицу специальных свойств инструмента (если эти свойства не были определены при регистрации, возвращаются свойства руки как инструмента).

```
boolean = stack:add_wear(number amount)

```

Добавляет износ к уже имеющемуся и возвращает `true`; если стак состоит не из инструмента — возвращает `false`.

```
**ItemStack** = stack:add_item(**ItemStack** | ItemTable | ItemString new_stack)

```

Добавляет содержимое `new_stack` в `stack`, возвращает остаток.

```
boolean = stack:item_fits(**ItemStack** | ItemTable | ItemString new_stack)

```

Возвращает `true`, если содержимое `new_stack` можно добавить к `stack` без остатка.

```
**ItemStack** = stack:take_item(number count = 1)

```

Удаляет из `stack` объекты в количестве `count`, возвращает их как новый стак.

```
**ItemStack** = stack:peek_item(number count = 1)

```

Копирует из `stack` объекты в количестве `count`, возвращает их как новый стак.

## Устаревшие методы

Следующие методы устарели и не должны использоваться (но могут встретиться в старых модах):

```
string = stack:get_metadata()

```

Возвращает строку с метаданными стака.

```
boolean = stack:set_metadata(string metadata)

```

Задаёт строку метаданных для стака.

## Примечания

1. ↑ 1,0 1,1 1,2 1,3 1,4 TODO: всё время возвращает `true`, разобраться, когда может вернуть `false`.
2. ↑ TODO: уточнить, что будет при использовании для не-инструмента
3. ↑ TODO: уточнить, износ или прочность (не понятно, ухудшается или улучшается инструмент при положительном значении `amount`.