183 lines
9.4 KiB
Markdown
183 lines
9.4 KiB
Markdown
---
|
||
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)
|
||
└── ... файлы мода
|
||
|
||
Не нужно путать модпак и *Игру*.
|
||
У Игры есть собственная структура, которая будет описана в главе Игры.
|