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

From Valve Developer Community
< Ru
Jump to navigation Jump to search
Line 24: Line 24:


<source lang="text">
<source lang="text">
// Map order
// Порядок карт
MapPlayOrder<- [
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest",
Line 34: Line 34:
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 46:
if (nextmap == -1)
if (nextmap == -1)
{
{
// This is the first map past that one
// Первая карта, идущая после этой
nextmap = index
nextmap = index
}
}
Line 56: Line 56:
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 )
}
}

Revision as of 10:04, 19 December 2013

Template:Otherlang2

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

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

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

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

Изменение Endlevel

The end-of-map logic lives within the instances/coop/coop_endlevel_room.vmf instance. Load this map within Hammer and save a copy of it-- e.g. 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.

Don't modify that file! It's part of Portal 2 and you don't want to touch it. Instead, 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.

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.

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

Теперь перейдите в 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).

Проверка

Make the additional coop maps, using your modified endlevel room instead of the default one. Compile them all.

Now you can test your maps. Just load the first map and play it. When you get to the end, Portal 2 will switch to the next map. Once it gets to the end it will simply exit to the main menu.

(This method could be extended to create a hub as in the game. Look at mp_coop_transition_list.nut for ideas.)

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

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 folder. Load this map in Hammer and save it under another name, such as 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.

Don't modify that file. Instead, point the property to a copy of your own, e.g. 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 map. Just change the Message Text property.

Save your modified VMF file.

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

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 file. Add your maps after this. (Again, map names are in quotes, and there's a comma afterward except for the last map. And don't lose the final bracket.)

The result should look like this:

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

// ---------------------------------------------------
// 	Your title
// ---------------------------------------------------
"your_first_level",
"your_second_level"
]

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

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

and add this line after them:

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

Save the file. (Again, you're saving your modified copy of this .nut file-- don't overwrite the Valve file!)

Компиляция и проверка

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.