recursal/Fanatic-Fandom huggingface dataset:
Nanny Plum

**Nanny Plum** is one of the main characters of the series. She is a fairy residing in the Little Kingdom. She works as a housekeeper for the Little Castle, And is also Princess Holly’s caretaker.

## Personality

Nanny Plum comes off as sarcastic and cynical; at times being dismissive to authority. She can generally be immature and is typically carefree about her actions. Despite this, She can be very friendly and helpful, Especially towards Holly who she is very close to.

She finds it humorous when characters take themselves too seriously; such as the Wise Old Elf. They rival each other due to their differing opinions over the use of magic and their clashing personalities. She loves turning people into frogs and doing nonsense.

## Appearance

She has short black hair tied in a half bun. Her bangs are in a short 'Baby' style. She wears a long purple dress, Purple shoes and is always seen with her wand.

## Trivia

* She is capable of speaking many animal languages including Ladybird and Chicken, But cannot speak several of the more difficult languages, Such as Mole and Aardvark.
* She “Likes vegetables, Especially peas” quoted in the episode “Dinner Party”.
* She currently runs the official Ben & Holly twitter.
* She is an excellent cook, As agreed by a majority of the kingdom.
* Nanny Plum is the only non-royal fairy to live in the Little Castle.
* It was revealed that Nanny Plum sleeps in a bedroom that's full of pink, Stuffed animals & toys. It made its two appearances in “Nanny's Magic Test” & “Nanny Plum and the Wise Old Elf Swap Jobs for One Whole Day”.
* She has the same voice as Miss Rabbit and Mummy Rabbit from Peppa Pig.
* Her favorite and go-to spell to cast on people is the one where she turns people into frogs.
* She gives Holly magic lessons.
* She works night shifts as the Tooth Fairy.
* Her first word was “Bang!".
* She hates seeing Queen Thistle baking cakes.
* She sometimes mess up her magic by making jelly floods.
Minetest.get dir list

## Синтаксис

```
table = minetest.get_dir_list(string path[, boolean is_dir])

```

## Описание

Возвращает список,
содержащий имена файлов и/или каталогов, находящихся в каталоге `path`
.
Если `is_dir == nil`, то возвращаются и файлы, и каталоги, если `true` - только каталоги,
а если `false` - только файлы. Если каталога `path` не существует, возвращается пустая таблица.

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

1. ↑ TODO: уточнить формат таблицы.
2. ↑ TODO: проверить, какой тип адресации используется - абсолютная или относительная.
ImageString

## Назначение

Описывает алгоритм формирования текстуры из графического файла(ов).

## Формат

В простейшем варианте содержит имя графического файла с расширением или без него. Эти два варианта должны дать один и тот же результат:

* `img = "default_dirt.png"`
* `img = "default_dirt"`

Так же поддерживается формирование текстур из имеющихся файлов «на лету». Для этого используются следующие инструменты:

**наложение** одной текстуры на другую выполняется с помощью символа `"^"`, например:

```
img = "default\_dirt.png^default\_grass\_side.png"

```

**группировка** текстур выполняется с помощью круглых скобок и позволяет накладывать сразу несколько текстур:

```
img = "cobble.png^(thing1.png^thing2.png)"

```

**экранирование**
выполняется с помощью символа `"\"` для символов `"^"` и `":"`; оно служит для передачи модификаторам, которые принимают в качестве аргумента текстуры, более сложных комбинаций текстур:

```
img = "cobble.png^[lowpart:50:color.png\^[mask\:trans.png"

```

**модификаторы** добавляются так же, как и текстуры — с помощью символа `"^"`; поддерживаются следующие модификаторы:

* `[crack:<n>:<p>`
* `[combine:<w>x<h>:<x1>,<y1>=<file1>:<x2>,<y2>=<file2>:...`
* `[resize:<w>x<h>`
* `[opacity:<r>`
* `[invert:<mode>`
* `[brighten`
* `[noalpha`
* `[makealpha:<r>,<g>,<b>`
* `[transform<t>`
* `[inventorycube{<top>{<left>{<right>`
* `[lowpart:<percent>:<file>`
* `[verticalframe:<t>:<n>`
* `[mask:<file>`
* `[[sheet:<w>x<h>:<x>,<y>`
* `[colorize:<color>:<ratio>`
* `[multiply:<color>`

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

1. ↑ Как правило, имя графического файла имеет префикс, содержащий имя мода.
2. ↑ Так написано в документации, однако на данный момент это правило, кажется, уже не актуально; по крайней мере, попытки использовать имя текстуры без расширения при регистрации ноды или при описании формы приводят к ошибке.
3. ↑ 3,0 3,1 3,2 TODO: здесь нужно описать (или даже показать, вставив изображения), что получается в результате.
4. ↑ TODO: здесь только список, необходимо добавить описания.
Minetest.register craft predict

## Синтаксис

```
nil = minetest.register_craft_predict(function func)
(stack, player, table craft_grid, craft_inv)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_craft\_predicts.

Функции из этой таблицы будут вызываться при изменении содержимого поля крафта.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `ItemStack stack` - результат крафта;
* `Player player` - игрок, производящий крафт;
* `table craft_grid` - список стаков, лежащих в поле крафта;
* `InvRef craft_inv` - инвентарь, в котором состоит поле крафта.

Если `func` возвращает переменную типа ItemStack, то её значение заменяет результат крафта; если возвращается `nil`, результат крафта остаётся неизменным; другие значения порождают ошибку.

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

1. ↑ TODO: проверить разницу и очерёдность с register\_on\_craft().
Minetest.register on craft

## Синтаксис

```
nil = minetest.register_on_craft(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_crafts.

Функции из этой таблицы будут вызываться в момент крафта.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `ItemStack stack` - результат крафта;
* `Player player` - игрок, производящий крафт;
* `table craft_grid` - список стаков, лежащих в поле крафта;
* `InvRef craft_inv` - инвентарь, в котором состоит поле крафта.

Если `func` возвращает переменную типа ItemStack, то её значение заменяет результат крафта; если возвращается `nil`, результат крафта остаётся неизменным; другие значения порождают ошибку.

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

1. ↑ Эта функция не обрабатывает рецепты типа `cooking` и `fuel`.
2. ↑ TODO: проверить разницу и очерёдность с register\_craft\_predict().
Death

***Back***

Death is the only one of the four horsemen who wishes to be free of her fathers hate and anger. She has no real followers only men and women claiming to act in her interest, she condemns all acts made by these people especially that of summoning the undead. She believes her job is to make sure the souls of the damned are punished and that the souls of the good are to rest easy and not be disturbed. Her and Chrysos are lovers and are in fact married even though they know that they may one day have to fight each other one day.
Minetest.register on player receive fields

## Синтаксис

```
nil = minetest.register_on_player_receive_fields(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_player\_receive\_fields.

Функции из этой таблицы будут вызываться при взаимодействии игрока с формой.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Player player` - игрок, взаимодействующий с формой;
* `string form_name` - наименование, под которым была вызвана форма.
* `table fields` - значения, передаваемые элементами формы.

Функции, зарегистрированные последними, вызываются первыми. Если `func` вернёт `true`, остальные зарегистрированные функции не будут вызваны.

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

1. ↑ TODO: возможно, необходимо уточнить возможные типы взаимодействия.
2. ↑ TODO: необходимо уточнить, какие элементы и в какой форме передают своё состояние
NodeTimerRef

## Описание

Ссылка на таймер для каждого узла. Может быть получена с помощью get\_node\_timer().

## Методы

```
nil = timer:set(number timeout, number elapsed)

```

Задаёт состояние таймера:

* `timeout` -- время ожидания (в секундах, поддерживает дробные значения);
* `elapsed` -- уже прошедшее время (в секундах, поддерживает дробные значения).

Функция узла `on_timer()` будет вызвана через `(timeout - elapsed)` секунд.

```
nil = timer:start(number timeout)

```

Запускает таймер с временем ожидания `timeout`; эквивалентно `timer:set(timeout, 0)`.

```
nil = timer:stop()

```

Останавливает таймер.

```
number = timer:get_timeout()

```

Возвращает текущее время ожидания (в секундах); если таймер отключён, возвращает 0.

```
number = timer:get_elapsed()

```

Возвращает прошедшее время (в секундах); если таймер отключён, возвращает 0.

```
boolean = timer:is_started()

```

Возвращает `true`, если таймер запущен, и `false` — если отключён.

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

1. ↑ TODO: подробнее описать работу таймера — цикличный или разовый, выполняемая функция и т.д.
Minetest.register biome

## Синтаксис

```
number = minetest.register_biome(table biome_definition)

```

## Описание

Регистрирует биом, добавляя его описание в глобальную таблицу minetest.registered\_biomes.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string name`;
* `string node_dust`;
* `string node_top`;
* `number depth_top`;
* `string node_filler`;
* `number depth_filler`;
* `string node_stone`;
* `string node_water_top`;
* `number depth_water_top`;
* `string node_water`;
* `string node_river_water`;
* `string node_riverbed`;
* `number depth_riverbed`;
* `number y_min`;
* `number y_max`;
* `number heat_point`;
* `number humidity_point`.

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

1. ↑ TODO: подробнее описать систему биомов или ссылку на основную статью.
2. ↑ TODO: здесь только список, нужно добавить описания.
Minetest.register on respawnplayer

## Синтаксис

```
nil = minetest.register_on_respawnplayer(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_respawnplayers.

Функции из этой таблицы будут вызываться при возрождении игрока.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Player player` - возрождаемый игрок;

Если `func` возвращает `true`, игрок не будет перемещён к общей точке возрождения.
Minetest.add item

## Синтаксис

```
ObjectRef | nil = minetest.add_item(Position pos, item)

```

## Описание

Добавляет экземпляр ранее зарегистрированного предмета в точку игрового мира `pos`.

Возвращает ссылку на добавленный объект, либо `nil` в случае ошибки.

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

1. ↑ TODO: необходимо указать тип `item`.
2. ↑ TODO: необходимо уточнить отличие от add\_entity().
3. ↑ TODO: в документации указан тип `ObjectRef`, однако скорее всего возможен лишь `LuaEntitySAO`, необходимо проверить.
SecureRandom

## Описание

Интерфейс для crypto-secure PRNG операционной системы.

Его можно создать функцией `SecureRandom()`.

Конструктор возвращает значение `nil`, если безопасное случайное устройство не может быть найдено в системе.

## Методы

```
number = rnd:next_bytes([ number count = 1])

```

Возвращает следующие `count` (по умолчанию 1, максимум 2048) случайных байт в виде строки.
PointedThing

## Назначение

Табличное представление состояния курсора (указателя, "прицела").

## Формат

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

* `string type` -- тип выделенного объекта

* `nothing` -- ничего не выделено;
* `node` -- под курсором — нода;
* `object` -- под курсором — сущность;

* `Position under` -- координаты узла, на который указывает курсор (только при `type == "node"`);
* `Position above` -- координаты узла, от которого указывает курсор (только при `type == "node"`);
* `ObjectRef object` -- сущность, на которую указывает курсор (только при `type == "object"`);
* `number box_id` -- идентификатор поля выбора (счёт начинается от 1);
* `Position intersection_point` -- абсолютные мировые координаты точки в поле выбора, на которое указывает; могут быть в поле выбора, если указатель также находится в поле;
* `Position intersection_normal` -- единичный вектор, указывающий наружу от выбранного поля; является нулевым вектором, если указатель находится внутри поля выбора.

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

1. ↑ 1,0 1,1 1,2 TODO: описание этих полей - довольно грубый перевод документации, требуется доработка; от-туда же: "в настоящее время только Raycast поддерживает эти поля".
ItemStackMetaRef

## Описание

Метаданные стака.

Могут быть получены функцией get\_meta().

## Методы

Наследует все методы MetaDataRef, кроме того имеет собственные:

```
unknown = metadata:set_tool_capabilities(table tool_capabilities)

```

Переопределяет возможности инструмента.

Значение `nil` очистит данные переопределения и восстановит исходное поведение.
Minetest.create detached inventory

## Синтаксис

```
InvRef = **minetest.create\_detached\_inventory**(string name, table callbacks, *string player\_name*])

```

## Описание

Создаёт отдельный инвентарь. Если он уже существовал, то будет очищен.

Если указано `player_name`, то инвентарь будет доступен только этому игроку (по умолчанию — доступен каждому игроку, даже если не используется). Обратите внимание, что этот параметр — просто обходной путь и будет удалён в будущих выпусках.

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

* `function allow_move(inv, from_list, from_index, to_list, to_index, count, player)` -- вызывается, когда игрок пытается переместить предметы в инвентаре; возвращаемое значение интерпретируется как количество элементов, разрешённых для перемещения;
* `function allow_put(inv, listname, index, stack, player)` -- вызывается, когда игрок пытается положить что-то в инвентарь; возвращаемое значение интерпретируется как количество элементов, разрешённых для добавления; если возвращает -1, то количество элементов в инвентаре не меняется;
* `function allow_take(inv, listname, index, stack, player)` -- вызывается, когда игрок пытается взять что-то из инвентаря; возвращаемое значение интерпретируется как количество элементов, разрешённых для изъятия; если возвращает -1, то количество элементов в инвентаре не меняется;
* `function on_move(inv, from_list, from_index, to_list, to_index, count, player)` -- ;
* `function on_put(inv, listname, index, stack, player)` -- ;
* `function on_take(inv, listname, index, stack, player)` -- вызывается после фактического действия, в соответствии с тем, что было разрешено; нет возвращаемого значения.
Minetest.chat send player

## Синтаксис

```
nil = minetest.chat_send_player(string player_name, string message)

```

## Описание

Отправить в чат игроку с именем `player_name` сообщение `message`

.
Игнорируется (не вызывает ошибки), если игрок с таким именем в момент вызова отсутствует на сервере.

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

1. ↑ TODO: раньше попытка вывести не строковое сообщение приводило к падению сервера; проверить, если это так, оставить предупреждение.
2. ↑ TODO: возможно, следует добавить информацию об использовании цвета, либо ссылку на соответствующую статью.
3. ↑ TODO: проверить, срабатывают ли при этом функции, зарегистрированные с помощью register\_on\_chat\_message().
Minetest.rollback get node actions

## Синтаксис

```
table | nil = minetest.rollback_get_node_actions(Position pos, number range, number time, number limit)

```

## Описание

Поиск изменений, внесённых игроками, в радиусе `range` вокруг координаты `pos` за время `time`. Время считается в секундах от момента вызова функции.

Возвращает список, содержащий не более `limit` полей вида `{actor, pos, time, oldnode, newnode}`. Так же может вернуть `nil`.

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

1. ↑ TODO: проверить, является ли `limit` обязательным параметром?
2. ↑ TODO: необходимо расписать типы и значение полей.
3. ↑ TODO: судя по всему, для работы требуется что-то включить в конфигах, иначе всегда возвращается `nil`; необходимо уточнить.
Minetest.register on protection violation

## Синтаксис

```
nil = minetest.register_on_protection_violation(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_protection\_violation.

Функции из этой таблицы будут вызываться при нарушении игроком защиты.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Position pos`;
* `string player_name`.

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

1. ↑ TODO: необходимо подробно описать механизм защиты либо дать ссылку на основную статью по теме.
2. ↑ TODO: дать описание аргументам.
MetaDataRef

## Описание

Ссылка на метаданные.

Фактически в модах используется не **MetaDataRef**, а его потомки — StorageRef, NodeMetaRef, ItemStackMetaRef и PlayerMetaRef.

В описаниях функций **MetaDataRef** указывается, когда ожидается любой из этих типов.

## Методы

```
boolean | nil = metadata:contains(string key)

```

Возвращает `true`, если ключ `key` найден, и `false` — если нет.

Возвращает `nil`, если метаданные отсутствуют.

```
string | nil = metadata:get(string key)

```

Возвращает значение ключа `key` в виде строки.

Возвращает `nil`, если ключ `key` не задан.

```
string = metadata:get_string(string key)

```

Возвращает значение ключа `key` в виде строки.

Возвращает пустую строку, если ключ `key` не задан.

```
unknown = metadata:set_string(string key, string value)

```

Задаёт значение ключа `key` равным строке `value`.

Пустая строка удаляет ключ.

```
number = metadata:get_int(string key)

```

Возвращает 0, если ключ `key` не задан.

```
unknown = metadata:set_int(string key, number value)

```

Задаёт целочисленное значение для ключа `key`.

```
number = metadata:get_float(string key)

```

Возвращает 0, если ключ `key` не задан.

```
unknown = metadata:set_float(string key, number value)

```

Задаёт дробное значение для ключа `key`.

```
boolean = metadata:from_table(table data)

```

Любое не табличное значение очистит метаданные.

Возвращает `true` в случае успеха.

```
table | nil = metadata:to_table()

```

Возвращает `nil` или таблицу, содержащую две другие таблицы:

* `fields` -- хранилище пар ключ-значение;
* `inventory` -- инвентарь в виде таблицы `{list1 = {}, list2 = {}, ...}` (только для NodeMetaRef).

```
boolean = metadata:equals(**MetaDataRef** other)

```

Возвращает `true`, если `metadata` имеют те же пары ключ-значение, что и `other`.
Minetest.register on item eat

## Синтаксис

```
nil = minetest.register_on_item_eat(function(
  number hp_change,
  ItemStack replace_with_item,
  ItemStack stack,
  Player user,
  PointedThing point
))

```

## Описание

Регистрирует функцию, которая будет вызываться с помощью функции, возвращаемой minetest.item\_eat, добавляя её в глобальную таблицу minetest.registered\_on\_item\_eats

.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `hp_change` - изменение HP;
* `replace_with_item` - предмет, который заменит съеденый;
* `stack` - стак, который при съедени был в руке;
* `user` - игрок;
* `point` - определяет направление взгляда игрока.

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

1. ↑ TODO: требуется более внятное описание.
2. ↑ TODO: так же необходима ссылка на основную тему.
3. ↑ TODO: здесь довольно кривые описания, нужно исправлять.
Minetest.register chatcommand

## Синтаксис

```
nil = minetest.register_chatcommand(string cmd, table cmd_definition)

```

## Описание

Регистрирует чат-комманду `cmd`, добавляя её описание в глобальную таблицу minetest.chatcommands.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string params`;
* `string description`;
* `table privs`;
* `function func(string name, string param)`.

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

1. ↑ TODO: здесь только список, нужно добавить описания.
Danulla

Back

Wife of Qostar, Danulla Made the soil, the trees she populated the world with animals of all shapes and sizes all peaceful and living in harmony keeping the balance between predator and prey her animals were the first to grace the face of the world. Danulla loves all living things she despises the undead and anything corrupt though she understands the need for all creatures living and dead she fears the one day the undead will overtake the living.
Minetest.pos to string

## Синтаксис

```
string = minetest.pos_to_string(Position pos[, number number_decimals])

```

## Описание

Конвертирует аргумент `pos` в строку вида `(X,Y,Z)`. Аргумент `number_decimals` должен быть натуральным числом (т.к. задаёт количество знаков после запятой, до которых происходит округление) или нулём (в случае округления до целого).

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

1. ↑ TODO: что будет, если требования к `number_decimals` не выполнены?
PseudoRandom

## Описание

16-битный генератор псевдослучайных чисел.

Использует известный алгоритм LCG, представленный K&R.

Его можно создать функцией `PseudoRandom(seed)`.

## Методы

```
number = rnd:next()

```

Возвращает следующее целое случайное число от 0 до 32767.

```
number = rnd:next(number min, number max)

```

Возвращает следующее целое случайное число от `min` до `max`.

При этом должно выполняться `((max-min) == 32767) or ((max-min) <= 6553)`, в противном случае делает плохое распределение из-за простой реализации.
Sovetskaya Rossiya-class

Finalized plans for the Rossiya

## Sensors

Giuis-2 air-search radar

Rif-A surface-search radar

Iakor fire-control radarsZalp fire-control radarsFut-B fire-control radars

Grot range-finding radarsShtag-B range-finding radars

Soltnse-1P infrared detectors

Gerkules sonar

While the Sovietsky Soyuz-class is viewed as a massive failure, the Sovetskaya Rossiya-class is the most successful class of Russian battleships to date. They were deployed to every theater, and were instrumental in the raids on German Sea refineries.
The Rossiyas were large ships for her armament, comparable to size of the Iowa-class.
The guns were originally destined to be indigenous built B-38, but overruns led to the import of American made 16in guns, used on the much older Colorado-class battleships.

These would be refit after the war with the B-38 16in guns.

Overall, these were fine ships, and vastly improved Soviets maritime presence. In comparison to its peers, it was much larger considering its armament, but was an overall effective design.
After the war, all were either converted to guided missile cruisers, or a hybrid battleship/aircraft carrier design.

Due to the failure of the Sovietsky Soyuz, the Soviet Admiralty would commision an enlarged version of the Sovetskaya armed with 18in, called the Kremlin.

## Ships in Class

* *Sovetskaya Rossiya*
* *Soborna Ukraina*
* *Sovetskaya Belorussiya*
Расширение стандартных библиотек

Эти вспомогательные функции расширяют возможности стандартных библиотек lua:

```
string = dump(any var, table dumped = {})

```

Возвращает значение переменной `var` как строку в читаемом для человека виде.

```
string = dump2(any var, string name = "_", table dumped = {})

```

Возвращает значение переменной `var` как строку в читаемом для человека виде, обрабатывая цикличные ссылки; `name` выводится как имя переменной.

```
number = math.hypot(number x, number y)

```

Возвращает гипотенузу треугольника с катетами `x` и `y`.

```
number = math.sign(number x, number tolerance = 0)

```

Возвращает знак числа `x`; `tolerance` задаёт диапазон, в котором будет возвращён ноль.

* если `x > tolerance`, возвращает 1;
* если `x < -tolerance`, возвращает -1;
* в остальных случаях возвращает 0.

```
table = string.split(
    string text,
    string separator = ",",
    boolean include_empty = false,
    number max_splits = -1,
    boolean sep_is_pattern = false
)

```

Делит строку `text` на элементы таблицы по подстроке `separator`.

* `max_splits` ограничивает количество элементов (отрицательное значение снимает ограничение);
* если `include_empty == false`, пустые значения не включаются в возвращаемую таблицу;
* если `sep_is_pattern == true`, `separator` интерпретируется как регулярное выражение, в противном случае — как простая строка.

```
string = string.trim(string text)

```

Удаляет пробелы, табуляцию и перенос строки в начале и в конце текста.

```
table = table.copy(table var)

```

Возвращает глубокую копию таблицы.

```
number = table.indexof(table list, any val)

```

Возвращает индекс элемента `val` в таблице `list`; если искомый элемент в таблице отсутствует, возвращает -1.

```
number = table.insert_all(table tab, table other_tab)

```

Добавляет все значения из таблицы `other_tab` в таблицу `tab`, использует`#tab + 1` для новых индексов.

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

1. ↑ TODO: возможно, нужно будет разбить по одной статье на функцию, как функций minetest.\*
2. ↑ TODO: разобраться с назначением таблицы `dumped`, раньше была строка, используемая как отступ.
3. ↑ TODO: не понятно, какую роль играет `dumped`, требуется уточнить.
4. ↑ На самом деле функция несколько отличается от классической `(x^2+y^2)^0.5`, вероятно для большей точности; подробнее можно посмотреть в исходном коде.
5. ↑ TODO: это дословный перевод документации, требуется уточнить.
6. ↑ Почему-то эта функция исчезла из документации, но она всё ещё работает в предрелизной версии 5.0.0-dev.
Youkoso Japari Park e!: Capítulo 04

## Capítulo 04

El capítulo 4 es el nombre del cuarto capítulo del manga de Youkoso Japari Park e!.

 Resumen

Serval planea organizar una fiesta de bienvenida para Nana-san, recurre a Caracal para que le explique y ayude sobre esas actividades, ¡Intentarán dar lo mejor de ellas!.

## Personajes

* Serval
* Caracal
* Nana
* Zorro Rojo
* Mirai
* Koala
* Lobo Gris
* Ibis Nipón
Minetest.register decoration

## Синтаксис

```
number = minetest.register_decoration(table decor_definition)

```

## Описание

Регистрирует декорации, добавляя их описание в глобальную таблицу minetest.registered\_decorations.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string deco_type` тип декорации

* `simple`;
* `schematic`;

* `string place_on`;
* `number sidelen`;
* `number fill_ratio`;
* `table noise_params`;
* `table biomes`;
* `number y_min`;
* `number y_max`;
* `string spawn_by`;
* `number num_spawn_by`;
* `string flags`;

Следующие поля допустимы только при `deco_type == "simple"`:

* `string decoration`;
* `number height`;
* `number height_max`;
* `number param2`;

Следующие поля допустимы только при `deco_type == "schematic"`:

* `string | table schematic`;
* `table replacements`;
* `number rotation`.

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

1. ↑ TODO: подробнее описать систему декораций или ссылку на основную статью.
2. ↑ TODO: здесь только список, нужно добавить описания.
NodeTable

## Назначение

Табличное представление ноды, установленной в игровом мире.

## Формат

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

* `string name` -- наименование ноды;
* `number param1` -- целое 8-битное число, интерпретация которого зависит от значения поля `paramtype`, заданного при регистрации ноды;
* `number param2` -- целое 8-битное число, интерпретация которого зависит от значения полей `paramtype2`, `drawtype` и `liquidtype`, заданных при регистрации ноды.

При передаче какой-либо функции аргумента типа **NodeTable** поля `param1` и `param2` обычно являются необязательными и по умолчанию равны 0.

Помимо указанных полей, в таблицу могут быть добавлены и другие, однако они не будут обрабатываться движком и не запишутся в базу данных. Для записи дополнительных данных используйте NodeMetaRef.

## Примеры

```
-- простые ноды, вроде этого камня, обычно не требуют дополнительных параметров
node\_stone = {name = "default:stone"}

-- здесь уже указаны все параметры, однако метаданные всё равно придется обрабатывать отдельно
node\_chest = {name = "default:chest", param1 = 14, param2 = 1}

```
Minetest.check password entry

## Синтаксис

```
boolean = **minetest.check\_password\_entry**(name, entry, password)

```

## Описание

Возвращает `true`, если `password entry` для игрока с именем `name` соответствует, `false` в противном случае. `password entry` - это представление пароля, генерируемое движком как результат вызова `get_auth()`. Используйте эту функцию только для того, чтобы сделать возможным вход через пароль для внешних протоколов, такие как IRC; другие виды использования не одобряются.

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

1. ↑ TODO: необходимо указать типы аргументов.
PerlinNoiseMap

## Описание

Быстрый массовый генератор шума Перлина.

Его можно создать одной из функцией get\_perlin\_map() или `PerlinNoiseMap(noiseparams, size)`.

`size = {x = dimx, y = dimy, z = dimz}`, причём компонент z опускается для 2D-шума, а для 3D-шума он должен быть больше 1 (в противном случае возвращается `nil`).

Для каждой функции с дополнительным параметром `buffer` — если значение `buffer` не равно `nil`, эта таблица будет использоваться для хранения результата вместо создания новой таблицы.

## Методы

```
table = noise:get_2d_map(Position pos)

```

Возвращает значения 2D-шума в виде массива `size.x` на `size.y`, начиная от точки `pos` (координата z не требуется).

```
table = noise:get_3d_map(Position pos)

```

Возвращает значения 3D-шума в виде массива `size.x` на `size.y` на `size.z`, начиная от точки `pos`.

```
table = noise:get_2d_map_flat(Position pos[, table buffer])

```

Возвращает значения 2D-шума в виде одномерного массива длиной `size.x * size.y`, начиная от точки `pos` (координата z не требуется).

```
table = noise:get_3d_map_flat(Position pos[, table buffer])

```

То же, что и `noise:get_2d_map_flat`, но для 3D-шума.

```
unknown = noise:calc_2d_map(Position pos)

```

Вычисляет карту 2D-шума, начиная с точки `pos` (координата z не требуется). Результат сохраняется внутри.

```
unknown = noise:calc_3d_map(Position pos)

```

Вычисляет карту 3D-шума, начиная с точки `pos`. Результат сохраняется внутри.

```
table = noise:get_map_slice(Position slice_offset, Position slice_size[, table buffer])

```

Возвращает в виде массива фрагмент результатов последних вычисленных шумов.
Результирующий срез начинается с координат `slice_offset` и занимает часть `slice_size`.
Вот пример, чтобы захватить 2-слойную горизонтальную 2D плоскость шума, начиная со смещения буфера y = 20:

`noisevals = noise:get_map_slice({y = 20}, {y = 2})`

Важно отметить, что координаты смещения `slice_offset` начинаются с 1 и относятся к начальной позиции последнего вычисленного шума. Чтобы получить один вертикальный столбец шума, начиная с координат карты `x = 1023, y = 1000, z = 1000`:

`noise:calc_3d_map({x = 1000, y = 1000, z = 1000})`

`noisevals = noise:get_map_slice({x = 24, z = 1}, {x = 1, z = 1})`
Minetest.log

## Синтаксис

```
nil = minetest.log([ string level, ]string message)

```

## Описание

Отправляет в лог сообщение `message`. По умолчанию уровень лога `none`, но аргументом `level` может быть указано иное: `error`, `warning`, `action`, `info` или `verbose`.

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

1. ↑ TODO: необязательный аргумент на первом месте? нужно проверить.
2. ↑ TODO: возможно, описать применение каждого из вариантов.
Minetest Dev Wiki

## Для чтения

* Общая информация
* Типы данных
* Библиотеки

## Для редактирования

* Планы
* Прогресс
* Шаблоны
* Оформление функций
* Песочница

## Предыстория и цель проекта

...да, у разработчиков **Minetest** есть своя вики. Когда-то там даже было несколько страниц по-русски и кнопка «Create account». Правда, когда я туда пришёл первый раз, регистрация уже не работала, и через какое-то время кнопку убрали. Чуть позже исчезли и переводы страниц на русский язык. Можно было, конечно, пользоваться тем, что есть, но информация обновлялась от случая к случаю и далеко не всегда была полной и понятной. Документация в самом **Minetest** тоже была и остаётся далёкой от идеала.

В связи с этим была создана **Minetest Dev вики**, цель которой — собрание максимально полной и актуальной информации о написании модов для **Minetest**.

Narrnika (обсуждение)

21:45, 10 марта 2019 г.
PcgRandom

## Описание

32-разрядный генератор псевдослучайных чисел.

Использует PCG32, алгоритм семейства перестановочных конгруэнтных генераторов, предлагающий очень сильную случайность.

Его можно создать функцией `PcgRandom(seed)` или `PcgRandom(seed, sequence)`.

## Методы

```
number = rnd:next()

```

Возвращает следующее целое случайное число от -2147483648 до 2147483647.

```
number = rnd:next(number min, number max)

```

Возвращает следующее целое случайное число от `min` до `max`.

```
number = rnd:rand_normal_dist(number min, number max[, number num_trials = 6])

```

Возвращает нормально распределённое случайное число от `min` до `max`.

Это только грубое приближение нормального распределения:

* `mean = (max - min) / 2`
* `variance = (((max - min + 1) ^ 2) - 1) / (12 * num_trials)`

Увеличение `num_trials` улучшает точность приближения.
Minetest.register craftitem

## Синтаксис

```
nil = minetest.register_craftitem(string name, table item_definition)

```

## Описание

Регистрирует новый предмет под именем `name`, добавляя его описание в глобальные таблицы minetest.registered\_items и minetest.registered\_craftitems.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string description`;
* `table groups`;
* `string inventory_image`;
* `string wield_image`;
* `Position wield_scale`;
* `number stack_max = 99`;
* `number range = 4`;
* `boolean liquids_pointable = false`;
* `table tool_capabilities`;
* `string node_placement_prediction`;
* `table sound`;
* `function on_place(ItemStack stack, Player placer, PointedThing point) = minetest.item_place`;
* `function on_secondary_use(ItemStack stack, Player user, PointedThing point)`;
* `function on_drop(ItemStack stack, Player dropper, Position pos) = minetest.item_drop`;
* `function on_use(ItemStack stack, Player user, PointedThing point)`;
* `function after_use(ItemStack stack, Player user, NodeTable node, table dig_params)`.

## Примеры

```
minetest.register\_craftitem("default:stick", {
	description = "Stick",
	inventory\_image = "default\_stick.png",
	groups = {stick = 1, flammable = 2},
})

```

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

1. ↑ TODO: здесь только список, необходимо добавить описания.
Minetest.add entity

## Синтаксис

```
ObjectRef | nil = minetest.add_entity(Position pos, string name[, table staticdata])

```

## Описание

Добавляет экземпляр ранее зарегистрированной под именем `name` сущности с начальными данными `staticdata` в точку игрового мира `pos`.

Возвращает ссылку на добавленный объект, либо `nil` в случае ошибки.

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

1. ↑ TODO: в документации указан тип `ObjectRef`, однако скорее всего возможен лишь `LuaEntitySAO`, необходимо уточнить.
Minetest.register tool

## Синтаксис

```
nil = minetest.register_tool(string name, table item_definition)

```

## Описание

Регистрирует новый инструмент под именем `name`, добавляя его описание в глобальные таблицы minetest.registered\_items и minetest.registered\_tools.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `description = string` по умолчанию считается равным пустой строке;
* `groups = table` по умолчанию считается равным пустой таблице;
* `inventory_image = string`
* `wield_image = string` по умолчанию считается равным ;
* `wield_scale = Position` по умолчанию считается равным ;
* `stack_max = number` по умолчанию считается равным 99;
* `range = number` по умолчанию считается равным 4;
* `liquids_pointable = boolean` по умолчанию считается равным `false`;
* `tool_capabilities = table`
* `node_placement_prediction = string` по умолчанию считается равным `nil`;
* `sound = table`
* `on_place = function(ItemStack stack, Player placer, PointedThing point)` по умолчанию считается равным `minetest.item\_place`;
* `on_secondary_use = function(ItemStack stack, Player user, PointedThing point)` по умолчанию считается равным `nil`;
* `on_drop = function(ItemStack stack, Player dropper, Position pos)` по умолчанию считается равным `minetest.item\_drop`;
* `on_use = function(ItemStack stack, Player user, PointedThing point)` по умолчанию считается равным `nil`;
* `after_use = function(ItemStack stack, Player user, NodeTable node, table dig_params)` по умолчанию считается равным `nil`;

## Примеры

```
minetest.register\_tool("default:pick\_stone", {
	description = "Stone Pickaxe",
	inventory\_image = "default\_tool\_stonepick.png",
	tool\_capabilities = {
		full\_punch\_interval = 1.3,
		max\_drop\_level=0,
		groupcaps={
			cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1},
		},
		damage\_groups = {fleshy=3},
	},
	sound = {breaks = "default\_tool\_breaks"},
})

```

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

1. ↑ TODO: нужна ссылка на основную статью.
2. ↑ TODO: здесь только предварительный список, необходимо отсортировать и сгруппировать его; так же необходимо добавить описания.
Minetest.deserialize

## Синтаксис

```
table = **minetest.deserialize**(string string)

```

## Описание

Преобразовывает строку, полученную с помощью serialize().

Строка загружается в пустой изолированной среде. Функции будут загружены, но не смогут получить доступ к глобальной среде.

То есть:

`minetest.deserialize('return {["foo"] = "bar"}')` вернёт таблицу `{["foo"] = "bar"}`,

а `minetest.deserialize('print("foo")')` вернёт `nil` и вызовет ошибку доступа к глобальной среде.
Minetest.register on prejoinplayer

## Синтаксис

```
nil = minetest.register_on_prejoinplayer(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_prejoinplayers.

Функции из этой таблицы будут вызываться при попытке подключения игрока к серверу.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `string name` - имя подключающегося игрока;
* `string ip` - IP подключающегося игрока.

Если `func` вернёт строку, то игрок не будет подключён, а эта строка будет показана ему в виде сообщения (предполагается, что строка описывает причины отказа).
Minetest.add node level

## Синтаксис

```
unknown = minetest.add_node_level(Position pos, number level)

```

## Описание

Увеличивает уровень ноды в точке `pos` на величину `level`.

По умолчанию уровень равен 1.

Если результат больше максимально допустимого уровня, то устанавливается максимальный уровень.

Значение `level` может быть отрицательным для уменьшения уровня.

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

1. ↑ TODO: необходимо уточнить возврат функции.
2. ↑ TODO: необходимо проверить, точно ли уровень, или всё же значение `level`.
3. ↑ TODO: необходимо проверить, что будет при достижении 0.
Minetest.register on leaveplayer

## Синтаксис

```
nil = minetest.register_on_leaveplayer(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_leaveplayers.

Функции из этой таблицы будут вызываться при отключении игрока от сервера.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Player player` - сущность, представляющая игрока;
* `boolean timed_out` - принимает значение `true`, если игрок был отключён по тайм-ауту.

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

1. ↑ Функции не вызываются, если причиной отключения было выключение сервера.
Minetest.register on shutdown

## Синтаксис

```
nil = minetest.register_on_shutdown(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_shutdown.

Функции из этой таблицы будут вызываться при выключении сервера.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

1. ↑ Имеется ввиду штатное выключение; падение сервера из-за ошибки не вызовет эту функцию.
Minetest.register craft

## Синтаксис

```
nil = minetest.register_craft(table craft_definition)

```

## Описание

Регистрирует рецепт крафта.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string type` тип рецепта

* `shaped`;
* `shapeless`;
* `toolrepair`;
* `cooking`;
* `fuel`;

* `ItemString output`;
* `table | string recipe`;
* `table replacements`;
* `number additional_wear` только для `type == "toolrepair"`;
* `number cooktime` только для `type == "cooking"`;
* `number burntime` только для `type == "fuel"`.

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

1. ↑ TODO: судя по всему, в глобальных таблицах рецепты не хранятся, нужно уточнить и, если это так, найти где они лежат.
2. ↑ TODO: здесь только список, нужно добавить описания.
Minetest.register on dieplayer

## Синтаксис

```
nil = minetest.register_on_dieplayer(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_dieplayers.

Функции из этой таблицы будут вызываться при смерти игрока.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Player player` - погибший игрок.
Minetest.compress

## Синтаксис

```
string = **minetest.compress**(string data, string method, ...)

```

## Описание

Сжимает данные `data`, используя метод сжатия `method`.

В настоящее время поддерживается только метод "deflate" (zlib).

Далее указываются специфические для выбранного метода параметры.

Для "deflate" это уровень сжатия от 0 до 9, либо `nil`.
Minetest.register on placenode

## Синтаксис

```
nil = minetest.register_on_placenode(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_placenodes.

Функции из этой таблицы будут вызываться в момент размещения ноды в игровом мире.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Position pos` - координаты ноды;
* `NodeTable new_node` - параметры установленной ноды;
* `Player placer` - игрок, устанавливавший ноду;
* `NodeTable old_node` - параметры заменённой ноды;
* `ItemStack stack` - стак, бывший в руке игрока в момент установки.
* `PointedThing point` - задаёт направление, с которого происходила установка.

Если `func` возвращает `false` или `nil`, из стака в руке отнимается одна нода, в противном случае стак не изменяется (но его можно изменить в самой функции).

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

1. ↑ TODO: согласно документации, использовать эти функции не рекомендуется, предпочтительнее использовать `on_construct` и `after_place_node` при регистрации ноды; нужно уточнить, как эти два варианта взаимодействуют между собой.
2. ↑ В том числе обрабатываются события, вызванные с помощью item\_place() или place\_node().
3. ↑ TODO: уточнить ситуацию, когда нода установлена не игроком.
Minetest.request shutdown

## Синтаксис

```
nil = minetest.request_shutdown()
nil = minetest.request_shutdown(string message)
nil = minetest.request_shutdown(string message, boolean reconnect)
nil = minetest.request_shutdown(string message, boolean reconnect, number delay)

```

## Описание

Выключает сервер.

При этом вызываются функции, зарегистрированные с помощью register\_on\_shutdown().

Игрокам после отключения от сервера приходит сообщение `message` (если оно не указано, будет показано сообщение по умолчанию `"Server shutting down"`). Если `reconnect == true`, то к сообщению будет прикреплена кнопка `"Переподключиться"`.

Положительное значение `delay` задаёт отсрочку выключения (в секундах), отрицательное — отменяет текущий запрос на выключение (более короткий вариант отмены: cancel\_shutdown\_requests()). Если `delay == 0` или не определено, сервер будет выключен сразу.
Minetest.register lbm

## Синтаксис

```
nil = minetest.register_lbm(table lbm_definition)

```

## Описание

Регистрирует LBM, добавляя его описание в глобальную таблицу minetest.registered\_lbms.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

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

* `string label`;
* `string name`;
* `table nodenames`;
* `boolean run_at_every_load`;
* `function action(Position pos, NodeTable node)`.

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

1. ↑ TODO: нужно более подробное описание или ссылка на основную статью.
2. ↑ TODO: здесь только список, нужно добавить описания.
Future And Past Wiki

## Introduction to Future And Past Wiki

Future and Past (FAP) is A "fanmade" anime series. It is held on by three Indian students;
Srishti Sinha, Shinjini Bagchi and Ushnika Roy.

## Welcome to the Wiki

Greetings Dear Friends~ Happy Day to you~ Start By Viewing our pages!

## Pages created so far

* Fun and Games
* Future And Past Wiki
* General Discussion
* Main Page
* Misami Ryu
* New on Wikia starter pages
* News and Announcements
* Omai Mitsuki
* Questions and Answers
* Saki Sakiguchi
* Shi Ren
* Yuka Hanasaki
Minetest.rollback revert actions by

## Синтаксис

```
boolean, table = minetest.rollback_revert_actions_by(string actor, number time)

```

## Описание

Отмена последнего действия пользователя `actor`, совершённого не более чем `time` секунд назад.

В случае успеха возвращает `true` и таблицу с лог-сообщениями, иначе — `false` и пустую таблицу.

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

1. ↑ TODO: согласно документации, аргумент `actor` должен иметь вид `player:name` или `liquid`, нужно уточнить.
2. ↑ TODO: судя по всему, для работы требуется что-то включить в конфигах, иначе и всё время возвращается `false` и пустая таблица; необходимо уточнить.
Minetest.register privilege

## Синтаксис

```
nil = minetest.register_privilege(string name, string | table priv_definition)

```

## Описание

Регистрирует привилегию `name`, добавляя её описание в глобальную таблицу minetest.registered\_privileges.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Строка `priv_definition` интерпретируется как описание привилегии (используется при выводе справки командой `help`).

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

* `string description` - описание привилегии (аналогично строке `priv_definition`);
* `boolean give_to_singleplayer = true` - если равно `true`, то привилегия даётся по умолчанию в одиночном режиме игры; если же установлено значение `false`, в одиночной игре привилегия изначально отключена (можно включить, например, командой `grantme`);
* `boolean give_to_admin = give_to_singleplayer`;
* `function on_grant(name, granter_name)`;
* `function on_revoke(name, revoker_name)`.

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

1. ↑ TODO: описание полей неполное и нуждается в доработке.
Minetest.register on punchnode

## Синтаксис

```
nil = minetest.register_on_punchnode(function func)

```

## Описание

Регистрирует функцию `func`, добавляя её в глобальную таблицу minetest.registered\_on\_punchnodes.

Функции из этой таблицы будут вызываться при при ударе по ноде.

**ВАЖНО**: функции регистрации работают только во время инициализации; вызов во время игровой сессии порождает ошибку и падение сервера.

Регистрируемая функция использует следующие аргументы:

* `Position pos` - координаты ноды;
* `NodeTable node` - параметры ноды;
* `Player puncher` - игрок, который нанёс удар;
* `PointedThing point` - определяет направление удара.

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

1. ↑ В том числе обрабатываются события, вызванные с помощью minetest.node\_punch или minetest.punch\_node.
2. ↑ TODO: уточнить ситуацию, когда удар нанесён не игроком.