Modding:WorldGen Concept/ru: Difference between revisions

From Vintage Story Wiki
(Created page with "== Введение == В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в...")
(Created page with "== Модификация кода == Используя моддинг кода, можно полностью удалить любую конкретную часть ге...")
Line 34: Line 34:
|}
|}


== Code modding ==
== Модификация кода ==
Using code modding, it is possible to remove any specific part of world generation from the base game entirely, as well as add new functionality.
Используя моддинг кода, можно полностью удалить любую конкретную часть генерации мира из базовой игры, а также добавить новые функции.
=== World types ===
=== Типы мира ===
There are currently three world types - "standard", "superflat", "empty". World types exist under '''EnumWorldGenPreset'''. World type has to be specified when registering event handlers for world generation.
На данный момент существует три типа мира — «стандартный», «суперплоский», «пустой». Типы мира существуют в '''EnumWorldGenPreset'''. Тип мира должен быть указан при регистрации обработчиков событий для генерации мира.
=== Passes ===
=== Проходит ===
The chunk column generation event is additionally subdivided into passes. Passes are essentially layers in the generation of a chunk column - first laying down the rock layer in one pass, and doing more general cross-chunk actions in later passes, such as flooding them with light or growing patches of grass. Passes exist under '''EnumWorldGenPass'''. The pass has to be specified when registering event handlers for chunk column generation.
Событие генерации столбца чанка дополнительно подразделяется на проходы. Проходы — это, по сути, слои в создании столбца фрагментов: сначала закладывается слой камня за один проход, а в более поздних проходах выполняются более общие действия с перекрестными фрагментами, такие как заливка их светом или растущие участки травы. Проходы существуют в '''EnumWorldGenPass'''. Пропуск должен быть указан при регистрации обработчиков событий для генерации столбца фрагмента.


{| class="wikitable"
{| class="wikitable"

Revision as of 08:24, 19 September 2022

Эта страница проверялась в последний раз для версии Vintage Story 1.15.


Other languages:

== Введение ==

В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в какой степени его можно модифицировать. Он также предназначен в качестве общего введения для моддинга в отношении генерации мира.

Терминология

Важная терминология, на которую стоит обратить внимание при чтении этой статьи:

  • Чанк (область блоков 32x32x32. Следует отметить, что фрагменты не охватывают высоту мира.)
  • Столбец фрагментов (набор фрагментов, охватывающих вертикальную высоту мира. Учитывая высоту мира 256, столбец фрагментов будет представлять 8 вертикально расположенных фрагментов)
  • Фрагмент карты (область, охватываемая столбцом чанка, но не относящаяся к чанкам в нем)
  • Регион (область, охватываемая столбцами фрагментов 16x16)

Концепция

Генерация мира — это процесс создания необходимых данных о мире, когда это требуется игроку. Генерация мира выполняется на основе региона, фрагмента карты и столбца фрагмента, каждый из которых действует как значимое подразделение мира. Каждый регион, фрагмент карты и столбец фрагментов создаются только один раз и хранят важные данные об этой области. Генерация мира очень модульная. Почти все сгенерированные части мира, такие как залежи руды, существа или деревья, указываются с помощью модов содержимого JSON. На уровне кодирования каждый этап генерации запускает событие, на которое базовая игра регистрирует обработчики. Обработчики событий можно зарегистрировать или удалить через API, чтобы изменить любую часть генерации.

Модификация контента

Используя моддинг контента, вот различные вещи, которые можно добавить, изменить или удалить из генерации мира. Свойства, относящиеся к генерации мира, обычно находятся по адресу Vintagestory/assets/survival/worldgen.

Модифицируемый контент

Вещь Описание
Депозиты Все, что «откладывается» в земле при генерации, например, руды или участки блоков, таких как гравий и мел.
Структуры Предопределенные структуры, такие как руины, найденные повсюду. На странице «Как использовать WorldEdit» есть инструкции по созданию и экспорту структур.
Деревья Размещение деревьев и кустарников
Слои блоков Слои блоков, обнаруженные над слоем породы
Блочные патчи Патчи блоков, а также растительность
Геологические провинции Геологические атрибуты и размещение
Рельеф План местности и общее обустройство местности

Модификация кода

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

Типы мира

На данный момент существует три типа мира — «стандартный», «суперплоский», «пустой». Типы мира существуют в EnumWorldGenPreset. Тип мира должен быть указан при регистрации обработчиков событий для генерации мира.

Проходит

Событие генерации столбца чанка дополнительно подразделяется на проходы. Проходы — это, по сути, слои в создании столбца фрагментов: сначала закладывается слой камня за один проход, а в более поздних проходах выполняются более общие действия с перекрестными фрагментами, такие как заливка их светом или растущие участки травы. Проходы существуют в EnumWorldGenPass. Пропуск должен быть указан при регистрации обработчиков событий для генерации столбца фрагмента.

Index Name Description Requires neighbor chunks
0 None Nothing generated yet false
1 Terrain Basic terrain, rock strata, caves, block layers false
2 TerrainFeatures Deposits, structures, ponds true
3 Vegetation Block patches, shrubbery and trees, rivulets, sunlight flooding in chunk true
4 NeighbourSunLightFlood Snow layer, sunlight flooding to nearby chunks true
5 PreDone Done generating, spawn creatures, neighbor chunks might still generate additional things true
6 Done Pass is not triggered as an event -

Events

The generation of either a region (IMapRegion), map chunk (IMapChunk), or chunks contained in that chunk column (IServerChunk and IWorldChunk), triggers an event (in that order). Each of these interfaces holds some specific data about the given region. It is possible to register handlers to events, wherein access is provided for the given interface. The order in which the handlers are assigned is based on the execute order of their specific mod systems.

Accessing events

class Mod : ModSystem
{
    public override double ExecuteOrder()
    {
        // Make sure all delegates have been assigned
        return 10;
    }

    public override void StartServerSide(ICoreServerAPI api)
    {
        // Get the handler for interacting with world generation.
        IWorldGenHandler handler = api.Event.GetRegisteredWorldGenHandlers("standard");

        // Example registering events using a delegate.
        api.Event.ChunkColumnGeneration(/* Handler here */, EnumWorldGenPass.None, "standard");
        api.Event.MapChunkGeneration(/* Handler here */, "standard");
        api.Event.MapRegionGeneration(/* Handler here */, "standard");

        // Retrieving registered handlers.
        List<MapChunkGeneratorDelegate> onMapChunkGen = handler.OnMapChunkGen;
        List<ChunkColumnGenerationDelegate>[] onChunkColGen = handler.OnChunkColumnGen;
        List<MapRegionGeneratorDelegate> onMapRegionGen = handler.OnMapRegionGen;

        foreach (var deleg in onMapChunkGen)
        {
            // Printing class name of delegate instance.
            // This can be useful for finding and removing any particular event from the list.
            api.Server.LogEvent(deleg.Target.ToString());
        }
    } 
}
Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.

Modding
Modding Introduction Getting Started Пакет тем
Content Modding Content Mods Developing a Content Mod Basic Tutorials Intermediate Tutorials Advanced Tutorials Content Mod Concepts
Code Modding Code Mods Setting up your Development Environment
Property Overview ItemEntityBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository