Разблокирование главы вашего мода

From Valve Developer Community
Revision as of 17:11, 27 February 2011 by Zlocorp (talk | contribs)

Jump to: navigation, search
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".