minetest_modding_book/_ru/basics/getting_started.md

183 lines
9.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Основы
layout: default
root: ../..
idx: 1.1
description: Как создать проект мода, включая init.lua, mod.conf и прочее.
redirect_from:
- /ru/chapters/folders.html
- /ru/basics/folders.html
---
## Введение <!-- omit in toc -->
При создании модов очень важно понимать структуру проекта мода. В этой главе
вы узнаете как работает моддинг в Minetest и создадите свой первый мод.
- [Что такое Игры и что такое Моды?](#what-are-games-and-mods)
- [Где хранятся моды?](#where-are-mods-stored)
- [Создание первого мода](#creating-your-first-mod)
- [Директория](#mod-directory)
- [mod.conf](#modconf)
- [init.lua](#initlua)
- [Итого](#summary)
- [Зависимости](#dependencies)
- [Модпаки](#mod-packs)
## Что такое Игры и что такое Моды?
Сила Minetest — в возможности легко создавать игры без необходимости создания
собственной воксельной графики, воксельных алгоритмов или крутого сетевого
кода.
В Minetest Игра — это набор модулей, работающих вместе и создающих контент и
игровую механику.
Модуль (или мод) — это набор скриптов и материалов.
Конечно, можно создать игру только из одного мода, но такое встречается редко,
ведь так труднее настраивать и заменять отдельные элементы игры, не затрагивая
всё остальное.
Кроме того, вы можете распространять свой мод без привязки к конкретной игре.
В этом случае он также будет называться *модом* в традиционном смысле —
модификация. Такие моды изменяют или добавляют различные элементы игры.
Как моды в составе игры, так и просто сторонние моды используют один и тот же
API.
В этой книге описаны основы Minetest API, и она подходит как для разработчиков
игр, так и для моддеров.
## Где хранятся моды?
<a name="mod-locations"></a>
У каждого мода есть своя директория, в которой лежат Lua-код, текстуры,
модели и звуки. Minetest ищет моды в нескольких определённых папках.
В документации эти папки обозначаются как *mod load paths*.
Для каждой созданной карты или сохранённой игры Minetest ищет моды в трёх
местах в следующем порядке:
1. Моды Игры: Эти моды являются неотъемлимой частью Игры.
Папки: `minetest/games/minetest_game/mods/`, `/usr/share/minetest/games/minetest/`
2. Глобальные моды: место куда почти всегда устанавливаются моды.
Если не уверены, кладите их сюда.
Папка: `minetest/mods/`
3. Моды Мира: эти моды относятся к конкретной созданной карте.
Папка: `minetest/worlds/world/worldmods/`
`minetest` — это директория для пользовательских фалов. Чтобы её найти,
запустите Minetest и нажмите "Папка данных пользователя" на вкладке
"Подробней".
Во время загрузки модов Minetest проверяет по порядку каждое из перечисленных
расположений. Если он обнаружит несколько модов с одинаковым именем, то мод,
найденный позже, заменит собой предыдущий. Таким образом можно подменять моды
игры, помещая мод с таким же названием в папку Глобальных модов.
## Создание первого мода
### Директория
Перейдите в глобальную папку модов (Подробней > Папка данных пользователя > mods)
и создайте новую папку под названием "mymod". `mymod` — это имя мода.
У каждого мода должно быть уникальное *имя*, технический идентификатор (id),
по которому можно ссылаться на этот мод. Имя мода может состоять из букв, цифр
и подчёркиваний. Хорошее имя даёт представление о том, что делает мод.
Директория, в которой лежат компоненты мода, должна иметь такое же имя.
Моды можно искать по их имени на сайте [content.minetest.net](https://content.minetest.net).
mymod
├── textures
│   └── mymod_node.png
├── init.lua
└── mod.conf
Обязательным является только файл init.lua. Тем не менее, рекомендуется
добавлять файл mod.conf и другие компоненты в зависимости от функционала мода.
### mod.conf
Создайте файл mod.conf следующего содержания:
```
name = mymod
description = Adds foo, bar, and bo.
depends = default
```
Этот файл содержит мета-данные мода, такие как имя, описание и прочее.
### init.lua
Создайте файл init.lua следующего содержания:
```lua
print("This file will be run at load time!")
core.register_node("mymod:node", {
description = "This is a node",
tiles = {"mymod_node.png"},
groups = {cracky = 1}
})
core.register_craft({
type = "shapeless",
output = "mymod:node 3",
recipe = { "default:dirt", "default:stone" },
})
```
Файл init.lua запускается при загрузке мода.
### Итого
Этот мод носит имя "mymod". Он содержит два текстовых файла: init.lua
и mod.conf. Скрипт выводит сообщение, а затем регистрирует новый рецепт крафта
(об этом будет написано дальше). У этого мода указана единственная зависимость
от [мода default](https://content.minetest.net/metapackages/default/), который,
обычно, является частью Minetest Game. Также есть текстура для блока в папке
textures/.
## Зависимости
Зависимости указываются, если перед загрузкой нода необходимо загрузить другой
мод. Моду могут потребоваться код, предметы или ещё что-нибудь из другого мода.
Существует два типа зависимостей: жёсткие и необязательные.
В обоих случаях требуемый мод загружается первым. Если требуемый мод
недоступен, жёсткая зависимость не позволит загрузить мод, в то время как
при необязательной зависимости мод всего лишь потеряет часть функций.
Необязательные зависимости полезны в случаях, когда вы хотите добавить
поддержку другого мода: например, вы можете добавлять дополнительный контент,
если пользователь решит задействовать оба мода одновременно.
Несколько зависимостей перечисляются через запятую в файле mod.conf.
depends = modone, modtwo
optional_depends = modthree
## Модпаки
Несколько модов могут быть собраны в модпак, который позволяет распространять
эти моды вместе. Модпак позволяет загрузить и установить несколько модов
за раз, без необходимости скачивать их по одному.
modpack1
├── modpack.conf (обязательный) — обозначает, что это модпак
├── mod1
│   └── ... файлы мода
└── mymod (optional)
   └── ... файлы мода
Не нужно путать модпак и *Игру*.
У Игры есть собственная структура, которая будет описана в главе Игры.