Ru/Level Transition (Portal 2): Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
(Заготовка для перевода)
 
m (obsolete language category)
 
(17 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{otherlang2
{{lang|title=Переходы между уровнями|Level Transition (Portal 2)}}
|title=Переходы между уровнями
|de=Level Transition (Portal 2):de
|en=Level Transition (Portal 2)
}}


=Кооперативный режим=
=Кооперативный режим=
Here is a way to make a sequence of test chambers for coop.
Здесь описано создание последовательности тестовых камер для кооперативного режима.


==Создание карты==
==Создание карты==
First, [[Creating a Portal 2 Coop Map|create your coop map]]Add another [[func_instance]], setting its VMF file to instances/coop/coop_lighting_ents.vmf.  (All we're using is the [[point_servercommand]] inside.)
Во-первых, {{L|Creating a Portal 2 Coop Map|создайте кооперативную карту}}Добавьте экземпляр {{L|func_instance}}, задав его файл VMF на instances/coop/coop_lighting_ents.vmf.  (All we're using is the {{L|point_servercommand}} inside.)


==Изменение Endlevel==
==Изменение Endlevel==
The end-of-map logic lives within the instances/coop/coop_endlevel_room.vmf instanceLoad this map within Hammer and '''save a copy of it'''-- e.g. my_coop_endlevel_room.vmf.   
Логика конца карты находится в экземпляре instances/coop/coop_endlevel_room.vmf.  Загрузите эту карту в Hammer и '''сохраните ее как копию'''-- например, my_coop_endlevel_room.vmf.   


In a little room in this map you'll find a [[logic_script]] named transition_script.  (You can use the Find Entities command to select it.)  You'll see that its Entity Scripts property is set to debug_scripts/mp_coop_transition_list.nut.
В маленькой комнатке в этой карте есть {{L|logic_script}} под именем transition_script.  (Для его выбора можете воспользоваться командой поиска энтити (Find Entities).)  Его свойству Entity Scripts задано значение debug_scripts/mp_coop_transition_list.nut.


'''Don't modify that file!'''  It's part of Portal 2 and you don't want to touch itInstead, change the Entity Scripts property to point to a script of your own-- e.g. debug_scripts/my_mp_coop_transition_list.nut.  Then save the map.
'''Не изменяйте этот файл!'''  Это часть Portal 2, и трогать его не следуетВместо этого в свойстве Entity Scripts укажите свой собственный скрипт-- например, debug_scripts/my_mp_coop_transition_list.nut.  Затем сохраните карту.


Go back to your coop level, select the func_instance containing the endlevel room, and edit its VMF file to point to your modified version.
Вернитесь в свой кооперативный уровень, выберите func_instance, содержащий комнату конца уровня, и отредактируйте его файл VMF, чтобы он ссылался на измененный вами файл.


==Изменение скрипта==
==Изменение скрипта==
Now go to scripts/vscripts/debugscripts in the Portal 2 installation and create this script.  (Again, don't touch the Valve script.)  All you really need is something like this:  
Теперь перейдите в scripts/vscripts/debugscripts в папке установки Portal 2 и создайте этот скрипт.  (Не трогайте скрипт Valve.)  Вам потребуется что-то вроде этого:  


<source lang="text">
<source lang="text">
// Map order
// Порядок карт
MapPlayOrder<- [
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest",
Line 34: Line 30:
local nextmap = -2
local nextmap = -2
// Loop through maps
// Прокручивание карт
foreach( index, map in MapPlayOrder )
foreach( index, map in MapPlayOrder )
{
{
if( GetMapName() == MapPlayOrder[index] )
if( GetMapName() == MapPlayOrder[index] )
{
{
// This is the map we're on
// Это карта, в которой мы сейчас находимся
nextmap = -1
nextmap = -1
}
}
Line 46: Line 42:
if (nextmap == -1)
if (nextmap == -1)
{
{
// This is the first map past that one
// Первая карта, идущая после этой
nextmap = index
nextmap = index
}
}
Line 56: Line 52:
if (nextmap > 0)
if (nextmap > 0)
{
{
// We found a map; go to it
// Найдена карта; переходим к ней
EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
}
}
else
else
{
{
// No map found; we're done
// Карта не найдена; больше ничего нет, заврешение
EntFire( "@command", "command", "disconnect", 2.0 )
EntFire( "@command", "command", "disconnect", 2.0 )
}
}
Line 67: Line 63:
</source>
</source>


The array at the top, MapPlayOrder, is your list of maps in order.  (For those not familiar with Squirrel, note that each map is enclosed in quotes, and there must be a comma ''in between'' each mapThat is, the last map doesn't get a comma after itAnd don't lose that final bracket!)
Верхний массив, MapPlayOrder, это список ваших карт по порядку.  (Тем, кто не знаком с Squirrel, следует иметь в виду, что каждая карта заключается в кавычки, ''между'' картами должны стоять запятыеТо есть после последней карты запятая не ставитсяИ не забудьте поставить закрывающую скобку!)


To go to the lobby after your maps, add "mp_coop_lobby_2" as the last map in the list (MapPlayOrder).
Чтобы после прохождения карт возвращаться в распределитель, добавьте "mp_coop_lobby_2" как последнюю карту в списке (MapPlayOrder).


==Проверка==
==Проверка==
Make the additional coop maps, using your modified endlevel room instead of the default oneCompile them all.
Создайте еще несколько кооперативных карт с использованием своей измененной комнаты конца уровня вместо стандартнойСкомпилируйте все карты.


Now you can [[Testing Portal 2 Co-Op Maps Alone|test your maps]]Just load the first map and play itWhen you get to the end, Portal 2 will switch to the next mapOnce it gets to the end it will simply exit to the main menu.
Теперь вы можете {{L|Testing Portal 2 Co-Op Maps Alone|проверить свои карты}}Просто загрузите первую карту и сыграйте в нееПо достижении её конца Portal 2 переключится на следующую картуА в конце последней карты произойдет выход в главное меню.


(This method could be extended to create a hub as in the gameLook at mp_coop_transition_list.nut for ideas.)
(Также можно добавить Распределитель как в игреСм. mp_coop_transition_list.nut.)


=Одиночный режим=
=Одиночный режим=
The single-player case is similar.   
В одиночном режиме все примерно так же.   


==Изменение переходного уровня==
==Изменение переходного уровня==
In single player, the end-of-level logic lives in the [[func_instance]] arrival_departure_transition_ents.vmf in the maps/instances/transitions folderLoad this map in Hammer and '''save it under another name''', such as my_arrival_departure_transition_ents.vmf.
Логика конца карты  в одиночном режиме находится в экземпляре ({{L|func_instance}}) arrival_departure_transition_ents.vmf в папке maps/instances/transitions.  Загрузите эту карту в Hammer и '''сохраните под другим именем''', например my_arrival_departure_transition_ents.vmf.


Within this instance, the smallest room contains a [[logic_script]] named @transition_Script.  Its Script Entity property points to transitions/sp_transition_list.nut.
В этом экземпляре в самой маленькой комнате находится логический скрипт ({{L|logic_script}}) под именем @transition_Script.  Его свойство Script Entity указывает на transitions/sp_transition_list.nut.


'''Don't modify that file'''.  Instead, point the property to a copy of your own, e.g. transitions/my_sp_transition_list.nut.   
'''Не изменяйте этот файл'''.  Вместо этого укажите свой собственный скрипт, например transitions/my_sp_transition_list.nut.   


While you're here, you might optionally change the [[game_text]] named @end_of_playtest_text to display a line of text after the last mapJust change the Message Text property.
По желанию здесь же вы можете изменить {{L|game_text}} под именем @end_of_playtest_text, отображающий строку текста после последней картыПросто измените свойство Message Text.


Save your modified VMF file.
Сохраните измененный файл VMF.


==Изменение скрипта==
==Изменение скрипта==
There is a lot going on inside this script, and undoubtedly a much simpler version would do for a simple series of testchambers. However, here's the minimum you must do.
Внутри скрипта описано множество других действий, и несомненно проще было бы создать описание простой серии карт. Здесь приведен необходимый минимум.


Look for the list of maps and search for "demo_paint", the last map in the fileAdd your maps after this.  (Again, map names are in quotes, and there's a comma afterward ''except'' for the last mapAnd don't lose the final bracket.)  
В списке найдите карту "demo_paint", последнюю карту в файлеДобавьте свои карты после неё.  (Имена карт берутся в кавычки, между ними ставится запятая, но ''после последней карты запятая не ставится''.  Не забудьте закрывающую скобку.)  


The result should look like this:
Результат должен выглядеть примерно так:


<source lang="text">
<source lang="text">
Line 108: Line 104:


// ---------------------------------------------------
// ---------------------------------------------------
// Your title
// Ваше название
// ---------------------------------------------------
// ---------------------------------------------------
"your_first_level",
"your_first_level",
Line 115: Line 111:
</source>
</source>


The actual logic to change maps is in TransitionFromMap.  To make Portal 2 exit to the main menu after displaying the end text, look for these lines
Логика смены карт находится в TransitionFromMap.  Чтобы в Portal 2 после отображения завершающего текста вышло главное меню, найдите следующие строки


<source lang="text">
<source lang="text">
Line 122: Line 118:
</source>
</source>


and add this line after them:
и добавьте эту строку после них:
<source lang="text">
<source lang="text">
EntFire( "@command", "Command", "disconnect", 2.0 )
EntFire( "@command", "Command", "disconnect", 2.0 )
</source>
</source>


Save the file. (Again, you're saving your modified copy of this .nut file-- don't overwrite the Valve file!)
Сохраните файл (изменённую копию файла .nut - не заменяйте исходный файл Valve!)
 
==Компиляция и проверка==
Make and compile the additional maps.  You can now go back to your first map and run it from Hammer; Portal 2 will load and put you into your first map.  When you get to the end it'll run the next map from the script, and exit to the main menu when all are done.


==Проверка==
Создайте и скомпилируйте остальные карты.  Загрузите и запустите в Hammer первую карту; Portal 2 загрузится с первой картой.  По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню.


[[Category:Portal 2 Tutorials:ru]]
{{ACategory|Portal 2 Level Design}}
{{ACategory|Portal 2 Tutorials}}

Latest revision as of 03:51, 22 August 2024

English (en)Deutsch (de)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)

Кооперативный режим

Здесь описано создание последовательности тестовых камер для кооперативного режима.

Создание карты

Во-первых, создайте кооперативную карту(en). Добавьте экземпляр func_instance(en), задав его файл VMF на instances/coop/coop_lighting_ents.vmf. (All we're using is the point_servercommand(en) inside.)

Изменение Endlevel

Логика конца карты находится в экземпляре instances/coop/coop_endlevel_room.vmf. Загрузите эту карту в Hammer и сохраните ее как копию-- например, my_coop_endlevel_room.vmf.

В маленькой комнатке в этой карте есть logic_script(en) под именем transition_script. (Для его выбора можете воспользоваться командой поиска энтити (Find Entities).) Его свойству Entity Scripts задано значение debug_scripts/mp_coop_transition_list.nut.

Не изменяйте этот файл! Это часть Portal 2, и трогать его не следует. Вместо этого в свойстве Entity Scripts укажите свой собственный скрипт-- например, debug_scripts/my_mp_coop_transition_list.nut. Затем сохраните карту.

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

Изменение скрипта

Теперь перейдите в scripts/vscripts/debugscripts в папке установки Portal 2 и создайте этот скрипт. (Не трогайте скрипт Valve.) Вам потребуется что-то вроде этого:

// Порядок карт
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest_two"
]

function TransitionFromMap()
{	
	local nextmap = -2
	
	// Прокручивание карт
	foreach( index, map in MapPlayOrder )
	{
		if( GetMapName() == MapPlayOrder[index] )
		{
			// Это карта, в которой мы сейчас находимся
			nextmap = -1
		}
		else 
		{
			if (nextmap == -1)
			{
				// Первая карта, идущая после этой
				nextmap = index
			}
		}
	}
		
	printl( "nextmap = " + nextmap )
		
	if (nextmap > 0)
	{
		// Найдена карта; переходим к ней
		EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
	}
	else
	{
		// Карта не найдена; больше ничего нет, заврешение
		EntFire( "@command", "command", "disconnect", 2.0 )
	}
}

Верхний массив, MapPlayOrder, это список ваших карт по порядку. (Тем, кто не знаком с Squirrel, следует иметь в виду, что каждая карта заключается в кавычки, между картами должны стоять запятые. То есть после последней карты запятая не ставится. И не забудьте поставить закрывающую скобку!)

Чтобы после прохождения карт возвращаться в распределитель, добавьте "mp_coop_lobby_2" как последнюю карту в списке (MapPlayOrder).

Проверка

Создайте еще несколько кооперативных карт с использованием своей измененной комнаты конца уровня вместо стандартной. Скомпилируйте все карты.

Теперь вы можете проверить свои карты(en). Просто загрузите первую карту и сыграйте в нее. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню.

(Также можно добавить Распределитель как в игре. См. mp_coop_transition_list.nut.)

Одиночный режим

В одиночном режиме все примерно так же.

Изменение переходного уровня

Логика конца карты в одиночном режиме находится в экземпляре (func_instance(en)) arrival_departure_transition_ents.vmf в папке maps/instances/transitions. Загрузите эту карту в Hammer и сохраните под другим именем, например my_arrival_departure_transition_ents.vmf.

В этом экземпляре в самой маленькой комнате находится логический скрипт (logic_script(en)) под именем @transition_Script. Его свойство Script Entity указывает на transitions/sp_transition_list.nut.

Не изменяйте этот файл. Вместо этого укажите свой собственный скрипт, например transitions/my_sp_transition_list.nut.

По желанию здесь же вы можете изменить game_text(en) под именем @end_of_playtest_text, отображающий строку текста после последней карты. Просто измените свойство Message Text.

Сохраните измененный файл VMF.

Изменение скрипта

Внутри скрипта описано множество других действий, и несомненно проще было бы создать описание простой серии карт. Здесь приведен необходимый минимум.

В списке найдите карту "demo_paint", последнюю карту в файле. Добавьте свои карты после неё. (Имена карт берутся в кавычки, между ними ставится запятая, но после последней карты запятая не ставится. Не забудьте закрывающую скобку.)

Результат должен выглядеть примерно так:

// ---------------------------------------------------
// 	Demo files
// ---------------------------------------------------
"demo_intro",
"demo_underground",
"demo_paint",

// ---------------------------------------------------
// 	Ваше название
// ---------------------------------------------------
"your_first_level",
"your_second_level"
]

Логика смены карт находится в TransitionFromMap. Чтобы в Portal 2 после отображения завершающего текста вышло главное меню, найдите следующие строки

		EntFire( "end_of_playtest_text", "display", 0 )
		EntFire( "@end_of_playtest_text", "display", 0 )

и добавьте эту строку после них:

		EntFire( "@command", "Command", "disconnect", 2.0 )

Сохраните файл (изменённую копию файла .nut - не заменяйте исходный файл Valve!)

Проверка

Создайте и скомпилируйте остальные карты. Загрузите и запустите в Hammer первую карту; Portal 2 загрузится с первой картой. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню.