Ru/Unlocking chapters in your mod: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
m (obsolete language category)
 
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:Разблокирование главы вашего мода}}{{otherlang2
{{lang|Unlocking chapters in your mod|title=Разблокирование главы вашего мода}}
| en = Unlocking chapters in your mod}}


[[Category:Level Design:ru]] [[Category:Tutorials:ru]] [[Category:Programming:ru]]
=Подход от Valve=
=Подход от Valve=
Такой подход показывает лучший способ обновления главы вашего мода.
Такой подход показывает лучший способ обновления главы вашего мода.
Line 9: Line 7:
Ваши карты должны быть в хронологическом порядке, чтобы вы и движок могли понять что за чем идет.
Ваши карты должны быть в хронологическом порядке, чтобы вы и движок могли понять что за чем идет.


Обратите внимание, карты в [[Half-Life 2|Half-Life 2's]] названы в соответствии с этой схемой:
Обратите внимание, карты в {{L|Half-Life 2|Half-Life 2's}} названы в соответствии с этой схемой:
"d#_areaname_##"
"d#_areaname_##"
где
где
Line 16: Line 14:
Пример: d1_trainstation_01
Пример: d1_trainstation_01


Однако, в [[Half-Life|Half-Life 1's]] можно сделать разблокирование главы намного легче:
Однако, в {{L|Half-Life|Half-Life 1's}} можно сделать разблокирование главы намного легче:
"c#a$"
"c#a$"
где
где
Line 26: Line 24:
In <code>gameinterface.cpp</code>, modify <code>void UpdateChapterRestrictions( const char* mapname )</code> and the array <code>static TITLECOMMENT gTitleComments[]</code> to conform to your maps' naming format.
In <code>gameinterface.cpp</code>, modify <code>void UpdateChapterRestrictions( const char* mapname )</code> and the array <code>static TITLECOMMENT gTitleComments[]</code> to conform to your maps' naming format.


Each TITLECOMMENT in gTitleComments contains a <code>char* pBSPName</code> (the map name or part of a map name) and a <code>char* pTitleName</code> (the chapter that map or set of maps is part of). If you want the map e2m4 to be part of Chapter 2 of the mod Doom, add <code>{"e2m4", "#Doom_Chapter2_Title"}</code> to the array (with a trailing comma if it's not last, of course). Replace "e2m4" with simply "e2" and <i>all</i> maps starting with "e2" will be part of Chapter 2.
Each TITLECOMMENT in gTitleComments contains a <code>char* pBSPName</code> (the map name or part of a map name) and a <code>char* pTitleName</code> (the chapter that map or set of maps is part of). If you want the map e2m4 to be part of Chapter 2 of the mod Doom, add <code>{"e2m4", "#Doom_Chapter2_Title"}</code> to the array (with a trailing comma if it's not last, of course). Replace "e2m4" with simply "e2" and ''all'' maps starting with "e2" will be part of Chapter 2.
Note the comment right above gTitleComments, which reads "This list gets searched for the first partial match, so some are out of order". Meaning, if e2m9 is part of Chapter 3 and the rest of the "e2" maps are in Chapter 2, then <code>{"e2m9", "#Doom_Chapter3_Title"}</code> must come <i>before</i> <code>{"e2", "#Doom_Chapter2_Title"}</code> in the array.
Note the comment right above gTitleComments, which reads "This list gets searched for the first partial match, so some are out of order". Meaning, if e2m9 is part of Chapter 3 and the rest of the "e2" maps are in Chapter 2, then <code>{"e2m9", "#Doom_Chapter3_Title"}</code> must come ''before'' <code>{"e2", "#Doom_Chapter2_Title"}</code> in the array.


=== Необходимые исправления ===
=== Необходимые исправления ===
Line 38: Line 36:


=Более простой способ=
=Более простой способ=
Это обучение покажет как разблокировать карты используя триггеры в вашей карте. Если вы не знакомы с добавлением глав ваш мод, почитайте обзор [[Adding chapters to your mod:ru]], а после уже принимайтесь читать дальше.
Это обучение покажет как разблокировать карты используя триггеры в вашей карте. Если вы не знакомы с добавлением глав ваш мод, почитайте обзор {{L|Adding chapters to your mod}}, а после уже принимайтесь читать дальше.


== Создание [[trigger_once]] браша ==
== Создание {{L|trigger_once}} браша ==
Создайте браш [[trigger_once]] на вашей второй карте. Он будет использоваться как триггер для разблокирования следующей главы в вашем моде. К примеру вы прошли карту1, и появились на карте 2, сработал триггер и глава связанная с картой 2 разблокировалась, и так далее до самых титров :) Проверьте, что ваш браш [[trigger_once]] называется примерно так '''Trigger001_UnlockChapter2'''.
Создайте браш {{L|trigger_once}} на вашей второй карте. Он будет использоваться как триггер для разблокирования следующей главы в вашем моде. К примеру вы прошли карту1, и появились на карте 2, сработал триггер и глава связанная с картой 2 разблокировалась, и так далее до самых титров :) Проверьте, что ваш браш {{L|trigger_once}} называется примерно так '''Trigger001_UnlockChapter2'''.


== Создание логической связи ==
== Создание логической связи ==
Создайте енети [[logic_relay]]. Назовите ее '''Logic001_UnlockChapter2'''. Выставите параметр '''Start Disabled''' в положение Yes.
Создайте енети {{L|logic_relay}}. Назовите ее '''Logic001_UnlockChapter2'''. Выставите параметр '''Start Disabled''' в положение Yes.


Теперь создайте енети [[point_clientcommand]], и назовите его '''UnlockChapter2'''.
Теперь создайте енети {{L|point_clientcommand}}, и назовите его '''UnlockChapter2'''.


== Добавление outputs для [[logic_relay]] ==
== Добавление outputs для {{L|logic_relay}} ==
Откройте окно настроек созданного ранее [[logic_relay]] (двойной клик по нему), и выберете - Outputs.
Откройте окно настроек созданного ранее {{L|logic_relay}} (двойной клик по нему), и выберете - Outputs.
Теперь добавьте два Outputs используя кнопку "Add":
Теперь добавьте два Outputs используя кнопку "Add":
{| class=standard-table
{| class=standard-table
Line 59: Line 57:
|}
|}
Цифра '2' после <code>incrementvar sv_unlockedchapters</code> сделает главу доступной. Если в вашем моде больше 100 глав (что маловероятно), сделайте это число больше, чтобы охватить все главы (''собственно я не особо понял о чем речь'').
Цифра '2' после <code>incrementvar sv_unlockedchapters</code> сделает главу доступной. Если в вашем моде больше 100 глав (что маловероятно), сделайте это число больше, чтобы охватить все главы (''Число 100 в данном случае показывает общее количество глав в вашем моде, замените его на количество глав в вашем'').


===Как это работает===
===Как это работает===
Команда [[incrementvar]] берет minValue, maxValue и дельту. Используя дельту <code>0</code> устанавливает sv_unlockedchapters в maxValue которых можно избежать уменьшая var, то увеличивая его, гарантируя что глава разблокирована, но не устанавливая его если значение больше чем нужно (''видимо подразумевается загрузка сохранений их старых глав, в которых при срабатывании триггера без такой защиты главы бы обнулялись на момент где находиться игрок, ее зависимо что он прошел дальше'').
Команда {{L|incrementvar}} берет minValue, maxValue и дельту. Используя дельту <code>0</code> устанавливает sv_unlockedchapters в maxValue которых можно избежать уменьшая var, то увеличивая его, гарантируя что глава разблокирована, но не устанавливая его если значение больше чем нужно (''видимо подразумевается загрузка сохранений их старых глав, в которых при срабатывании триггера без такой защиты главы бы обнулялись на момент где находиться игрок, ее зависимо что он прошел дальше'').


== Добавление outputs для [[trigger_once]] ==
== Добавление outputs для {{L|trigger_once}} ==
Далее открываем окно настроек [[trigger_once]], если помните вы назвали его как '''Trigger001_UnlockChapter2''' (''или как вы его там назвали''), и выберите раздел Outputs. Сейчас добавьте Outputs используя кнопку "Add" и заполните все как на картинке...<br>
Далее открываем окно настроек {{L|trigger_once}}, если помните вы назвали его как '''Trigger001_UnlockChapter2''' (''или как вы его там назвали''), и выберите раздел Outputs. Сейчас добавьте Outputs используя кнопку "Add" и заполните все как на картинке...<br>
[[Image:UnlockChapObjectProps2.png]]
[[File:UnlockChapObjectProps2.png]]


== Тестирование ==
== Тестирование ==
Now save, compile, and run. After your mod is loaded, type <code>showtriggers 1</code> in console. Once you have done so, play the map and walk through the [[trigger_once]] entity. After you have walked through it, press escape and select '''New Game''' from the game menu. You should see that chapter 2 in your mod has been unlocked.
Теперь сохраните, скомпилируйте и запустите карту. После загрузки мода пропишете в консоле <code>showtriggers 1</code>. После этого запустите карту и пройдите через триггер {{L|trigger_once}}. Как только вы это сделайте выйдите в игровое меню (нажмите Esc) и выберите пункт '''New Game (Новая Игра)'''. Вы должны увидеть что глава 2 разблокирована.
After you quit the game open up the <code>cfg/config.cfg</code> file in your mod and scroll down near the botton of the file. You will notice that the line that used to read <code>sv_unlockedchapters "1"</code> now reads <code>sv_unlockedchapters "2"</code>.
Выйдя из игры откройте файл <code>cfg/config.cfg</code> который лежит в папке вашего мода и прокрутите его до самого низа. Вы увидите, что текст <code>sv_unlockedchapters "1"</code> изменился на <code>sv_unlockedchapters "2"</code>.
 
Всё готово. Теперь главы вашего мода разблокируются в порядке прохождения.
 
{{ACategory|Level Design}} {{ACategory|Tutorials}} {{ACategory|Programming}} [[Category:Russian]]

Latest revision as of 04:08, 22 August 2024

English (en)Русский (ru)Translate (Translate)

Подход от Valve

Такой подход показывает лучший способ обновления главы вашего мода.

Переименование

Ваши карты должны быть в хронологическом порядке, чтобы вы и движок могли понять что за чем идет.

Обратите внимание, карты в Half-Life 2's(en) названы в соответствии с этой схемой: "d#_areaname_##" где

  • "#" название для "дня" внутри игры, так 1 для начала, 2 для середины, и 3 для конца игры
  • "##" название части "сегмента" карты

Пример: d1_trainstation_01

Однако, в Half-Life 1's(en) можно сделать разблокирование главы намного легче: "c#a$" где

  • # номер главы
  • $ Область главы, подчасть карты в общем.

Пример: c1a4 c4a1b

Обновление

In gameinterface.cpp, modify void UpdateChapterRestrictions( const char* mapname ) and the array static TITLECOMMENT gTitleComments[] to conform to your maps' naming format.

Each TITLECOMMENT in gTitleComments contains a char* pBSPName (the map name or part of a map name) and a char* pTitleName (the chapter that map or set of maps is part of). If you want the map e2m4 to be part of Chapter 2 of the mod Doom, add {"e2m4", "#Doom_Chapter2_Title"} to the array (with a trailing comma if it's not last, of course). Replace "e2m4" with simply "e2" and all maps starting with "e2" will be part of Chapter 2.

Note the comment right above gTitleComments, which reads "This list gets searched for the first partial match, so some are out of order". Meaning, if e2m9 is part of Chapter 3 and the rest of the "e2" maps are in Chapter 2, then {"e2m9", "#Doom_Chapter3_Title"} must come before {"e2", "#Doom_Chapter2_Title"} in the array.

Необходимые исправления

UpdateChapterRestrictions has an inherent flaw which only comes to light when Steam runs a Source mod. Steam puts the mod's entire path in the command line; the mod MyMod might be run with hl2.exe -game "C:\Steam\SteamApps\SourceMods\MyMod".

But UpdateChapterRestrictions assumes "-game" to be just "mymod"(Mod name in lowercase), so char chapterNumberPrefix[64] ends up as #C:\Steam\SteamApps\SourceMods\MyMod_chapter, rather than #mymod_chapter as it should be.

You can solve this problem in one of two ways. The first and easiest is to dispense with the "-game" parameter and simply hardcode "#mymod_chapter" as the chapterNumberPrefix. The second, which may be copied and pasted across mods, is to lop off the parent folders one by one, perhaps with strtok, until only the mod folder is left.

Более простой способ

Это обучение покажет как разблокировать карты используя триггеры в вашей карте. Если вы не знакомы с добавлением глав ваш мод, почитайте обзор Adding chapters to your mod(en), а после уже принимайтесь читать дальше.

Создание trigger_once(en) браша

Создайте браш trigger_once(en) на вашей второй карте. Он будет использоваться как триггер для разблокирования следующей главы в вашем моде. К примеру вы прошли карту1, и появились на карте 2, сработал триггер и глава связанная с картой 2 разблокировалась, и так далее до самых титров :) Проверьте, что ваш браш trigger_once(en) называется примерно так Trigger001_UnlockChapter2.

Создание логической связи

Создайте енети logic_relay(en). Назовите ее Logic001_UnlockChapter2. Выставите параметр Start Disabled в положение Yes.

Теперь создайте енети point_clientcommand(en), и назовите его UnlockChapter2.

Добавление outputs для logic_relay(en)

Откройте окно настроек созданного ранее logic_relay(en) (двойной клик по нему), и выберете - Outputs. Теперь добавьте два Outputs используя кнопку "Add":

My Output Target Entity Target Input Parameter Delay Only Once
OnTrigger UnlockChapter2 Command incrementvar sv_unlockedchapters 2 100 -1 0.01 Yes
OnTrigger UnlockChapter2 Command incrementvar sv_unlockedchapters 2 100 1 0.02 Yes

Цифра '2' после incrementvar sv_unlockedchapters сделает главу доступной. Если в вашем моде больше 100 глав (что маловероятно), сделайте это число больше, чтобы охватить все главы (Число 100 в данном случае показывает общее количество глав в вашем моде, замените его на количество глав в вашем).

Как это работает

Команда incrementvar(en) берет minValue, maxValue и дельту. Используя дельту 0 устанавливает sv_unlockedchapters в maxValue которых можно избежать уменьшая var, то увеличивая его, гарантируя что глава разблокирована, но не устанавливая его если значение больше чем нужно (видимо подразумевается загрузка сохранений их старых глав, в которых при срабатывании триггера без такой защиты главы бы обнулялись на момент где находиться игрок, ее зависимо что он прошел дальше).

Добавление outputs для trigger_once(en)

Далее открываем окно настроек trigger_once(en), если помните вы назвали его как Trigger001_UnlockChapter2 (или как вы его там назвали), и выберите раздел Outputs. Сейчас добавьте Outputs используя кнопку "Add" и заполните все как на картинке...
UnlockChapObjectProps2.png

Тестирование

Теперь сохраните, скомпилируйте и запустите карту. После загрузки мода пропишете в консоле showtriggers 1. После этого запустите карту и пройдите через триггер trigger_once(en). Как только вы это сделайте выйдите в игровое меню (нажмите Esc) и выберите пункт New Game (Новая Игра). Вы должны увидеть что глава 2 разблокирована. Выйдя из игры откройте файл cfg/config.cfg который лежит в папке вашего мода и прокрутите его до самого низа. Вы увидите, что текст sv_unlockedchapters "1" изменился на sv_unlockedchapters "2".

Всё готово. Теперь главы вашего мода разблокируются в порядке прохождения.