2024-11-29 07:55:28 +03:00
|
|
|
|
---
|
2024-11-29 07:57:26 +03:00
|
|
|
|
title: Основы
|
2024-11-29 07:55:28 +03:00
|
|
|
|
layout: default
|
|
|
|
|
root: ../..
|
|
|
|
|
idx: 1.1
|
2024-11-29 07:57:26 +03:00
|
|
|
|
description: Как создать проект мода, включая init.lua, mod.conf и прочее.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
redirect_from:
|
2024-11-29 07:57:26 +03:00
|
|
|
|
- /ru/chapters/folders.html
|
|
|
|
|
- /ru/basics/folders.html
|
2024-11-29 07:55:28 +03:00
|
|
|
|
---
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Введение <!-- omit in toc -->
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
При создании модов очень важно понимать структуру проекта мода. В этой главе
|
|
|
|
|
вы узнаете как работает моддинг в Minetest и создадите свой первый мод.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
- [Что такое Игры и что такое Моды?](#what-are-games-and-mods)
|
|
|
|
|
- [Где хранятся моды?](#where-are-mods-stored)
|
|
|
|
|
- [Создание первого мода](#creating-your-first-mod)
|
|
|
|
|
- [Директория](#mod-directory)
|
2024-11-29 07:55:28 +03:00
|
|
|
|
- [mod.conf](#modconf)
|
|
|
|
|
- [init.lua](#initlua)
|
2024-11-29 07:57:26 +03:00
|
|
|
|
- [Итого](#summary)
|
|
|
|
|
- [Зависимости](#dependencies)
|
|
|
|
|
- [Модпаки](#mod-packs)
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Что такое Игры и что такое Моды?
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Сила Minetest — в возможности легко создавать игры без необходимости создания
|
|
|
|
|
собственной воксельной графики, воксельных алгоритмов или крутого сетевого
|
|
|
|
|
кода.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
В Minetest Игра — это набор модулей, работающих вместе и создающих контент и
|
|
|
|
|
игровую механику.
|
|
|
|
|
Модуль (или мод) — это набор скриптов и материалов.
|
|
|
|
|
Конечно, можно создать игру только из одного мода, но такое встречается редко,
|
|
|
|
|
ведь так труднее настраивать и заменять отдельные элементы игры, не затрагивая
|
|
|
|
|
всё остальное.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Кроме того, вы можете распространять свой мод без привязки к конкретной игре.
|
|
|
|
|
В этом случае он также будет называться *модом* в традиционном смысле —
|
|
|
|
|
модификация. Такие моды изменяют или добавляют различные элементы игры.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Как моды в составе игры, так и просто сторонние моды используют один и тот же
|
|
|
|
|
API.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
В этой книге описаны основы Minetest API, и она подходит как для разработчиков
|
|
|
|
|
игр, так и для моддеров.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Где хранятся моды?
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
<a name="mod-locations"></a>
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
У каждого мода есть своя директория, в которой лежат Lua-код, текстуры,
|
|
|
|
|
модели и звуки. Minetest ищет моды в нескольких определённых папках.
|
|
|
|
|
В документации эти папки обозначаются как *mod load paths*.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Для каждой созданной карты или сохранённой игры Minetest ищет моды в трёх
|
|
|
|
|
местах в следующем порядке:
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
1. Моды Игры: Эти моды являются неотъемлимой частью Игры.
|
|
|
|
|
Папки: `minetest/games/minetest_game/mods/`, `/usr/share/minetest/games/minetest/`
|
|
|
|
|
2. Глобальные моды: место куда почти всегда устанавливаются моды.
|
|
|
|
|
Если не уверены, кладите их сюда.
|
|
|
|
|
Папка: `minetest/mods/`
|
|
|
|
|
3. Моды Мира: эти моды относятся к конкретной созданной карте.
|
|
|
|
|
Папка: `minetest/worlds/world/worldmods/`
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
`minetest` — это директория для пользовательских фалов. Чтобы её найти,
|
|
|
|
|
запустите Minetest и нажмите "Папка данных пользователя" на вкладке
|
|
|
|
|
"Подробней".
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Во время загрузки модов Minetest проверяет по порядку каждое из перечисленных
|
|
|
|
|
расположений. Если он обнаружит несколько модов с одинаковым именем, то мод,
|
|
|
|
|
найденный позже, заменит собой предыдущий. Таким образом можно подменять моды
|
|
|
|
|
игры, помещая мод с таким же названием в папку Глобальных модов.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Создание первого мода
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
### Директория
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Перейдите в глобальную папку модов (Подробней > Папка данных пользователя > mods)
|
|
|
|
|
и создайте новую папку под названием "mymod". `mymod` — это имя мода.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
У каждого мода должно быть уникальное *имя*, технический идентификатор (id),
|
|
|
|
|
по которому можно ссылаться на этот мод. Имя мода может состоять из букв, цифр
|
|
|
|
|
и подчёркиваний. Хорошее имя даёт представление о том, что делает мод.
|
|
|
|
|
Директория, в которой лежат компоненты мода, должна иметь такое же имя.
|
|
|
|
|
Моды можно искать по их имени на сайте [content.minetest.net](https://content.minetest.net).
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
mymod
|
|
|
|
|
├── textures
|
2024-11-29 07:57:26 +03:00
|
|
|
|
│ └── mymod_node.png
|
2024-11-29 07:55:28 +03:00
|
|
|
|
├── init.lua
|
|
|
|
|
└── mod.conf
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Обязательным является только файл init.lua. Тем не менее, рекомендуется
|
|
|
|
|
добавлять файл mod.conf и другие компоненты в зависимости от функционала мода.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
### mod.conf
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Создайте файл mod.conf следующего содержания:
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
name = mymod
|
|
|
|
|
description = Adds foo, bar, and bo.
|
|
|
|
|
depends = default
|
|
|
|
|
```
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Этот файл содержит мета-данные мода, такие как имя, описание и прочее.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
### init.lua
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Создайте файл init.lua следующего содержания:
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
```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" },
|
|
|
|
|
})
|
|
|
|
|
```
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Файл init.lua запускается при загрузке мода.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
### Итого
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Этот мод носит имя "mymod". Он содержит два текстовых файла: init.lua
|
|
|
|
|
и mod.conf. Скрипт выводит сообщение, а затем регистрирует новый рецепт крафта
|
|
|
|
|
(об этом будет написано дальше). У этого мода указана единственная зависимость
|
|
|
|
|
от [мода default](https://content.minetest.net/metapackages/default/), который,
|
|
|
|
|
обычно, является частью Minetest Game. Также есть текстура для блока в папке
|
|
|
|
|
textures/.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Зависимости
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Зависимости указываются, если перед загрузкой нода необходимо загрузить другой
|
|
|
|
|
мод. Моду могут потребоваться код, предметы или ещё что-нибудь из другого мода.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Существует два типа зависимостей: жёсткие и необязательные.
|
|
|
|
|
В обоих случаях требуемый мод загружается первым. Если требуемый мод
|
|
|
|
|
недоступен, жёсткая зависимость не позволит загрузить мод, в то время как
|
|
|
|
|
при необязательной зависимости мод всего лишь потеряет часть функций.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Необязательные зависимости полезны в случаях, когда вы хотите добавить
|
|
|
|
|
поддержку другого мода: например, вы можете добавлять дополнительный контент,
|
|
|
|
|
если пользователь решит задействовать оба мода одновременно.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Несколько зависимостей перечисляются через запятую в файле mod.conf.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
depends = modone, modtwo
|
|
|
|
|
optional_depends = modthree
|
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
## Модпаки
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Несколько модов могут быть собраны в модпак, который позволяет распространять
|
|
|
|
|
эти моды вместе. Модпак позволяет загрузить и установить несколько модов
|
|
|
|
|
за раз, без необходимости скачивать их по одному.
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
|
|
|
|
modpack1
|
2024-11-29 07:57:26 +03:00
|
|
|
|
├── modpack.conf (обязательный) — обозначает, что это модпак
|
2024-11-29 07:55:28 +03:00
|
|
|
|
├── mod1
|
2024-11-29 07:57:26 +03:00
|
|
|
|
│ └── ... файлы мода
|
2024-11-29 07:55:28 +03:00
|
|
|
|
└── mymod (optional)
|
2024-11-29 07:57:26 +03:00
|
|
|
|
└── ... файлы мода
|
2024-11-29 07:55:28 +03:00
|
|
|
|
|
2024-11-29 07:57:26 +03:00
|
|
|
|
Не нужно путать модпак и *Игру*.
|
|
|
|
|
У Игры есть собственная структура, которая будет описана в главе Игры.
|