Difference between revisions of "Unlocking chapters in your mod:ru"

From Valve Developer Community
Jump to: navigation, search
(Created page with 'Category:Level Design:ru Category:Tutorials:ru Category:Programming:ru =Подход от Valve= Такой подход показывает лучший спосо…')
 
m
Line 1: Line 1:
 +
{{DISPLAYTITLE:Разблокирование главы вашего мода}}{{otherlang2
 +
| en = Unlocking chapters in your mod}}
 +
 
[[Category:Level Design:ru]] [[Category:Tutorials:ru]] [[Category:Programming:ru]]
 
[[Category:Level Design:ru]] [[Category:Tutorials:ru]] [[Category:Programming:ru]]
 
=Подход от Valve=
 
=Подход от Valve=
Line 12: Line 15:
 
Пример: d1_trainstation_01
 
Пример: d1_trainstation_01
  
However, [[Half-Life|Half-Life 1's]] pattern might make unlocking the chapters a little easier:
+
Однако, в [[Half-Life|Half-Life 1's]] можно сделать разблокирование главы намного легче:
 
"c#a$"
 
"c#a$"
where
+
где
* # is the '''c'''hapter number
+
* # номер '''главы'''
* $ is the '''a'''rea of the chapter with an extra letter appended as necessary.
+
* $ '''Область''' главы, подчасть карты в общем.
Examples: c1a4 c4a1b
+
Пример: c1a4 c4a1b
  
== Updating ==
+
== Обновление ==
 
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.
  
Line 26: Line 29:
 
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 <i>before</i> <code>{"e2", "#Doom_Chapter2_Title"}</code> in the array.
  
=== Necessary Fixes ===
+
=== Необходимые исправления ===
 
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 <code>hl2.exe -game "C:\Steam\SteamApps\SourceMods\MyMod"</code>.
 
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 <code>hl2.exe -game "C:\Steam\SteamApps\SourceMods\MyMod"</code>.
  
Line 33: Line 36:
 
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.
 
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.
  
=Map Hack Approach=
+
=Более простой способ=
This tutorial will demonstrate unlocking chapters for your game mods using entities. If you are unfamiliar with adding chapters to your mod read and review the [[Adding chapters to your mod]] tutorial before this one.
+
Это обучение покажет как разблокировать карты используя триггеры в вашей карте. Если вы не знакомы с добавлением глав ваш мод, почитайте обзор [[Adding chapters to your mod:ru]], а после уже принимайтесь читать дальше.
  
== Create the [[trigger_once]] brush ==
+
== Создание [[trigger_once]] браша ==
Create a [[trigger_once]] brush in Map2. This will be used as the trigger that will begin the process of unlocking a chapter. Map2 is the map that will be considered the first map for the second chapter. Be sure to give the [[trigger_once]] brush a name, something like '''Trigger001_UnlockChapter2''' for example.
+
Создайте браш [[trigger_once]] на вашей второй карте. Он будет использоваться как триггер для разблокирования следующей главы в вашем моде. К примеру вы прошли карту1, и появились на карте 2, сработал триггер и глава связанная с картой 2 разблокировалась, и так далее до самых титров :) Проверьте, что ваш браш [[trigger_once]] называется примерно так '''Trigger001_UnlockChapter2'''.
  
== Create the point entities ==
+
== Создание логической связи ==
Use the entity tool the create a [[logic_relay]] entity. Set the name of the logic_relay entity to '''Logic001_UnlockChapter2'''. Set the logic_relay '''Start Disabled''' property to Yes.
+
Создайте енети [[logic_relay]]. Назовите ее '''Logic001_UnlockChapter2'''. Выставите параметр '''Start Disabled''' в положение Yes.
  
Now use the entity tool to create a [[point_clientcommand]] entity, and set the name to '''UnlockChapter2'''.
+
Теперь создайте енети [[point_clientcommand]], и назовите его '''UnlockChapter2'''.
  
== Add the outputs for the [[logic relay]] ==
+
== Добавление outputs для [[logic relay]] ==
Open the object properties dialog for the [[logic_relay]] entity we created earlier, and select the Outputs tab.
+
Откройте окно настроек созданного ранее [[logic_relay]] (двойной клик по нему), и выберете - Outputs.
Now add two outputs using the add button and fill in the info as follows:
+
Теперь добавьте два Outputs используя кнопку "Add":
 
{| class=standard-table
 
{| class=standard-table
 
! My Output !!Target Entity!!Target Input!!Parameter!!Delay!!Only Once
 
! My Output !!Target Entity!!Target Input!!Parameter!!Delay!!Only Once
Line 55: Line 58:
 
|}
 
|}
 
 
The '2' after the <code>incrementvar sv_unlockedchapters</code> is the chapter to make available. If you have more than 100 chapters in your mod (unlikely), make that value high enough to encompass them all.
+
Цифра '2' после <code>incrementvar sv_unlockedchapters</code> сделает главу доступной. Если в вашем моде больше 100 глав (что маловероятно), сделайте это число больше, чтобы охватить все главы (''собственно я не особо понял о чем речь'').
  
===How it works===
+
===Как это работает===
 
The [[incrementvar]] command takes a minValue, a maxValue and a delta. Using a delta of <code>0</code> sets the sv_unlockedchapters to the maxValue which can be avoided by decrementing the var, then re-incrementing it, ensuring that the chapter to unlock is set, but not forcing it to that value if it is already higher.
 
The [[incrementvar]] command takes a minValue, a maxValue and a delta. Using a delta of <code>0</code> sets the sv_unlockedchapters to the maxValue which can be avoided by decrementing the var, then re-incrementing it, ensuring that the chapter to unlock is set, but not forcing it to that value if it is already higher.
  

Revision as of 17:11, 27 February 2011

English

Подход от Valve

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

Renaming

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

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

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

Пример: d1_trainstation_01

Однако, в Half-Life 1's можно сделать разблокирование главы намного легче: "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:ru, а после уже принимайтесь читать дальше.

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

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

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

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

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

Добавление outputs для logic relay

Откройте окно настроек созданного ранее logic_relay (двойной клик по нему), и выберете - 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 глав (что маловероятно), сделайте это число больше, чтобы охватить все главы (собственно я не особо понял о чем речь).

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

The incrementvar command takes a minValue, a maxValue and a delta. Using a delta of 0 sets the sv_unlockedchapters to the maxValue which can be avoided by decrementing the var, then re-incrementing it, ensuring that the chapter to unlock is set, but not forcing it to that value if it is already higher.

Add the outputs for the trigger_once brush entity

Next open the object properties dialog box for the trigger_once entity we created earlier called Trigger001_UnlockChapter2, and select the Outputs tab. Now add a output using the add button and fill in the info as it appears in the picture below...
UnlockChapObjectProps2.png

Testing

Now save, compile, and run. After your mod is loaded, type showtriggers 1 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. After you quit the game open up the cfg/config.cfg file in your mod and scroll down near the botton of the file. You will notice that the line that used to read sv_unlockedchapters "1" now reads sv_unlockedchapters "2".