Modding:WorldGen Concept/ru: Difference between revisions

From Vintage Story Wiki
(Created page with "== Модификация кода == Используя моддинг кода, можно полностью удалить любую конкретную часть ге...")
No edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{GameVersion|1.15}}
{{GameVersion|1.15}}
__FORCETOC__
__FORCETOC__
<languages/>== Введение ==
<languages/>В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в какой степени его можно модифицировать. Он также предназначен в качестве общего введения для моддинга в отношении генерации мира.
В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в какой степени его можно модифицировать. Он также предназначен в качестве общего введения для моддинга в отношении генерации мира.
=== Терминология ===
=== Терминология ===
Важная терминология, на которую стоит обратить внимание при чтении этой статьи:
Важная терминология, на которую стоит обратить внимание при чтении этой статьи:
* Чанк (область блоков 32x32x32. Следует отметить, что фрагменты не охватывают высоту мира.)
* '''Чанк''': структура данных, которая содержит 32x32x32. Следует отметить, что фрагменты не охватывают высоту мира.
* Столбец фрагментов (набор фрагментов, охватывающих вертикальную высоту мира. Учитывая высоту мира 256, столбец фрагментов будет представлять 8 вертикально расположенных фрагментов)
* '''Столбец фрагментов''': (набор фрагментов, охватывающих вертикальную высоту мира. Учитывая высоту мира 256, столбец фрагментов будет представлять 8 вертикально расположенных фрагментов)
* Фрагмент карты (область, охватываемая столбцом чанка, но не относящаяся к чанкам в нем)
* '''Фрагмент карты''': Структура данных, содержащая информацию в столбце фрагмента, например высоту дождя или скопление снега
* Регион (область, охватываемая столбцами фрагментов 16x16)
* '''Карта региона''': Структура данных, которая хранит информацию в области столбцов фрагментов 16x16, например погоду и карты, необходимые для создания мира
== Концепция ==
== Концепция ==
Генерация мира — это процесс создания необходимых данных о мире, когда это требуется игроку. Генерация мира выполняется на основе региона, фрагмента карты и столбца фрагмента, каждый из которых действует как значимое подразделение мира. Каждый регион, фрагмент карты и столбец фрагментов создаются только один раз и хранят важные данные об этой области.
Генерация мира — это процесс создания необходимых данных о мире, когда это требуется игроку. Генерация мира выполняется на основе региона, фрагмента карты и столбца фрагмента, каждый из которых действует как значимое подразделение мира. Каждый регион, фрагмент карты и столбец фрагментов создаются только один раз и хранят важные данные об этой области.
Line 43: Line 42:
{| class="wikitable"
{| class="wikitable"
|-
|-
! Index !! Name !! Description !! Requires neighbor chunks
! Индекс !! Имя !! Описание !! Требуются соседние фрагменты
|-
|-
| 0 || None || Nothing generated yet || false
| 0 || Нет || Пока ничего не создано || false
|-
|-
| 1 || Terrain || Basic terrain, rock strata, caves, block layers || false
| 1 || Местность || Базовая местность, пласты горных пород, пещеры, слои блоков || false
|-
|-
| 2 || TerrainFeatures || Deposits, structures, ponds || true
| 2 || Особенности рельефа || Месторождения, сооружения, пруды || true
|-
|-
| 3 || Vegetation || Block patches, shrubbery and trees, rivulets, sunlight flooding in chunk || true  
| 3 || Растительность || Глыбовые участки, кустарники и деревья, ручейки, залитые солнечным светом куски || true
|-
|-
| 4 || NeighbourSunLightFlood || Snow layer, sunlight flooding to nearby chunks || true
| 4 || СоседСолнцеСветНаводнение || Слой снега, солнечные лучи заливают близлежащие куски || true
|-
|-
| 5 || PreDone || Done generating, spawn creatures, neighbor chunks might still generate additional things || true
| 5 || Готово || Закончив генерацию, создайте существ, соседние фрагменты могут по-прежнему генерировать дополнительные вещи || true
|-
|-
| 6 || Done || Pass is not triggered as an event || -
| 6 || Готово || Pass не запускается как событие || -
|}
|}


=== 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.  
Генерация региона ('''IMapRegion'''), фрагмента карты ('''IMapChunk''') или фрагментов, содержащихся в этом столбце фрагментов ('''IServerChunk''' и '''IWorldChunk'' '), запускает событие (в указанном порядке). Каждый из этих интерфейсов содержит определенные данные о данном регионе. Возможна регистрация обработчиков событий, при этом доступ предоставляется для данного интерфейса. Порядок, в котором назначаются обработчики, основан на порядке выполнения их конкретных систем модов.  


==== Accessing events ====
==== Доступ к событиям ====
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
class Mod : ModSystem
class Mod : ModSystem

Latest revision as of 11:01, 16 January 2024

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


Other languages:

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

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

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

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

Концепция

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

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

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

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

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

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

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

Типы мира

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

Проходит

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

Индекс Имя Описание Требуются соседние фрагменты
0 Нет Пока ничего не создано false
1 Местность Базовая местность, пласты горных пород, пещеры, слои блоков false
2 Особенности рельефа Месторождения, сооружения, пруды true
3 Растительность Глыбовые участки, кустарники и деревья, ручейки, залитые солнечным светом куски true
4 СоседСолнцеСветНаводнение Слой снега, солнечные лучи заливают близлежащие куски true
5 Готово Закончив генерацию, создайте существ, соседние фрагменты могут по-прежнему генерировать дополнительные вещи true
6 Готово Pass не запускается как событие -

События

Генерация региона ('IMapRegion), фрагмента карты (IMapChunk) или фрагментов, содержащихся в этом столбце фрагментов (IServerChunk и IWorldChunk '), запускает событие (в указанном порядке). Каждый из этих интерфейсов содержит определенные данные о данном регионе. Возможна регистрация обработчиков событий, при этом доступ предоставляется для данного интерфейса. Порядок, в котором назначаются обработчики, основан на порядке выполнения их конкретных систем модов.

Доступ к событиям

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