ObjectRef

## Описание

Ссылка на так называемые сущности.

Фактически в модах используется не ObjectRef, а его потомки — Player или LuaEntitySAO.

## Методы

```
nil = object:remove()

```

Удаляет сущность`object`.

```
Position = object:get_pos()

```

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

```
nil = object:set_pos(Position pos)

```

Мгновенно перемещает сущность `object` в координаты `pos`.

```
nil = object:move_to(Position pos, boolean continuous = false)

```

Плавно перемещает сущность `object` в координаты `pos`.

```
nil = object:punch(**ObjectRef** puncher, number time_from_last_punch, table tool_capabilities[, any direction)])

```

Имитирует удар (ЛКМ) по сущности `object` от имени сущности `puncher` (допустима ситуация, когда `object == puncher`); таблица `tool_capabilities` определяет параметры инструмента, удар которым имитируется (см. register\_tool()), а `time_from_last_punch` — время, якобы прошедшее с момента последнего удара; `direction` — направление удара.

```
nil = object:right_click(**ObjectRef** clicker))

```

Имитирует обращение (ПКМ) к сущности `object` от имени сущности `clicker`.

```
number = object:get_hp()

```

Возвращает текущее количество HP сущности `object`.

```
nil = object:set_hp(number hp, unknownreason)

```

Устанавливает количество HP сущности `object` равным `hp`.

```
InvRef | nil = object:get_inventory()

```

Возвращает ссылку на инвентарь, закреплённый за сущностью `object`.

```
string | nil = object:get_wield_list()

```

Возвращает наименование раздела инвентаря, прикреплённого к «руке» сущности `object`.

```
number = object:get_wield_index()

```

Возвращает номер слота, который на момент вызова прикреплён к «руке» сущности `object`; при `object:get_wield_list() == nil` возвращает 1.

```
ItemStack = object:get_wielded_item()

```

Возвращает содержимое слота, который на момент вызова прикреплён к «руке» сущности `object`; при `object:get_wield_list() == nil` возвращает пустой стак.

```
boolean = object:set_wielded_item(ItemStack | ItemTable | ItemString | nil item)

```

Задаёт содержимое слота, который на момент вызова прикреплён к «руке» сущности `object`; возвращает `true` в случае успеха, и `false` — если сущность не имеет «руки».

```
nil = object:set_armor_groups(table groups)

```

Задаёт параметры защищённости сущности `object`.

```
table = object:get_armor_groups()

```

Возвращает таблицу с параметрами защищённости сущности `object`.

```
nil = object:set_animation(table range = {x = 1, y = 1}, number frame_speed = 15, number frame_blend = 0, boolean frame_loop = true))

```

Задаёт параметры анимации сущности `object`.

```
table, number, number, boolean = object:get_animation()

```

Возвращает параметры анимации сущности `object`.

```
unknown = object:set_animation_frame_speed(number frame_speed = 15)

```

Задаёт скорость анимации сущности `object`.

```
nil = object:set_attach(**ObjectRef** parent, string bone, Position position, Position rotation)

```

Делает `object` дочерним объектом для `parent`; `position` и `rotation` — соответственно смещение и поворот в локальной (относительно «родителя») системе координат.

```
(**ObjectRef**, string, Position, Position) | nil = object:get_attach()

```

Возвращает родительский объект, а так же смещение и поворот в локальной системе координат; если `object` не имеет родительского объекта, возвращает `nil`.

```
nil = object:set_detach()

```

Удаляет связи «потомок-родитель» для `object`.

```
nil = object:set_bone_position(string bone, Position position, Position rotation)

```

Задаёт положение и поворот кости `bone` сущности `object`.

```
Position, Position = object:get_bone_position(string bone)

```

Возвращает положение и поворот кости `bone` сущности `object`.

```
nil = object:set_properties(table object_property_table))

```

Задаёт статичные свойства сущности `object`.

Таблица `object_property_table` содержит следующие поля:

* `number hp_max = minetest.PLAYER_MAX_HP_DEFAULT` -- максимальное количество HP, только для сущности типа Player;
* `number breath_max = minetest.PLAYER_MAX_BREATH_DEFAULT` -- максимальное количество «дыхания», только для сущности типа Player;
* `number zoom_fov = 0` -- только для сущности типа Player;
* `number eye_height = 1.625` -- только для сущности типа Player;
* `boolean physical = true` -- если `true`, то включена игровая физика;
* `boolean collide_with_objects = true` -- если `true`, то столкновается с другими сущностями, для которых `physical == true`;
* `number weight = 5` -- вес;
* `table collisionbox = {-0.5, 0.0, -0.5, 0.5, 1.0, 0.5}` -- «ящик» столкновений в формате `{xmin, ymin, zmin, xmax, ymax, zmax}`;
* `table selectionbox = collisionbox` -- «ящик» выделения в формате `{xmin, ymin, zmin, xmax, ymax, zmax}`;
* `boolean pointable = true` -- если `true`, то включена возможность выделения;

* `string visual` -- тип визуализации;

* `"cube"` -- ;
* `"sprite"` -- ;
* `"upright_sprite"` -- ;
* `"mesh"` -- ;
* `"wielditem"` -- ;
* `"item"` -- ;

* `Position visual_size = {x = 1, y = 1, z = 1}`;
* `string mesh = "model"` -- имя файла 3D-модели;
* `table textures` -- количество текстур зависит от типа визуализации;
* `table colors` -- количество цветов зависит от типа визуализации;
* `boolean use_texture_alpha = false` -- если `true`, то текстуры используют альфа-канал; не для `visual == "upright_sprite" or visual == "wielditem"`; в настоящее время не стабильно;
* `table spritediv = {x = 1, y = 1}` -- определяет количество столбцов и строк в таблице спрайтов;
* `table initial_sprite_basepos = {x = 0, y = 0}` -- определяет начальный кадр в таблице спрайтов;
* `boolean is_visible = true` -- видимость;
* `boolean makes_footstep_sound = false` -- звуки шагов;
* `number automatic_rotate = 0` -- постоянное вращение (градусы в секунду);
* `number stepheight = 0` -- высота шага;
* `number automatic_face_movement_dir = 0.0` -- ;
* `number automatic_face_movement_max_rotation_per_sec = -1` -- ;
* `boolean backface_culling = true` -- ;
* `number glow = 0` -- светимость текстуры;
* `string nametag = ""` -- текст «над головой»;
* `ColorSpec nametag_color` -- цвет текста «над головой»;
* `string infotext = ""` -- отображается при выделении сущности;
* `boolean static_save = true` -- .

```
table = object:get_properties()

```

Возвращает статичные свойства сущности `object` в виде таблицы (см. `object:set_properties`).

```
boolean = object:is_player()

```

Возвращает `true` для сущности типа Player, и `false` — для остальных.

```
table = object:get_nametag_attributes()

```

Возвращает параметры надписи над сущностью `object` в виде таблицы (см. `object:set_nametag_attributes`).

```
boolean = object:set_nametag_attributes(table attributes)

```

Задаёт параметры надписи над сущностью `object`.

Таблица `attributes` содержит следующие поля:

* `ColorSpec color = {r=255, g=255, b=255, a=255}` -- цвет надписи;
* `string text = ""` -- текст надписи.

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

1. ↑ Хотя формально является методом `ObjectRef`, для `Player` игнорируется, т.е. применим только к `LuaEntitySAO`.
2. ↑ TODO: не понятно, как на это влияет аргумент `continuous`, необходимо проверить.
3. ↑ TODO: в документации нет описания по этому параметру, сказано только, что может быть `nil` — т.е. необязателен; судя по всему, им должно задаваться направление удара в виде Position, однако ранее без ошибок принимались любые значения, необходимо проверять.
4. ↑ TODO: скорее всего, суть "имитации" в вызове соответствующих функций, нужно уточнять — каких и с какими параметрами.
5. ↑ TODO: необходимо уточнить тип и назначение аргумента.
6. ↑ 6,0 6,1 TODO: судя по всему, инвентарь закрепляется только за объектами `Player`, при вызове для `LuaEntitySAO` возвращает `nil` — необходимо уточнить.
7. ↑ TODO: ранее был замечен баг — если в момент вызова в руке ничего не было, то `item` появляется в руке, но не в инвентаре; при этом его можно использовать, но нельзя выкинуть; необходимо перепроверить.
8. ↑ 8,0 8,1 TODO: необходимо добавить подробное описание этих параметров.
9. ↑ 9,0 9,1 TODO: необходимо добавить подробное описание этих параметров.
10. ↑ TODO: необходимо уточнить возврат функции.
11. ↑ TODO: предположительно, нужно проверить.
12. ↑ 12,0 12,1 12,2 12,3 TODO: видимо под `bone` подразумеваются наименования костей 3D-модели; нужно добавить больше информации по этой теме.
13. ↑ TODO: описание полей неполное и по большей части является примерным переводом документации, поэтому нуждается в проверке и доработке.