本文与游戏《传送门2》有关。点击这里查看更多信息。

实验室切换

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Deutsch (de)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)
Broom icon.png
此物品需要清理以符合更高的质量标准,因为:
孩子们这玩意儿的确需要更好的版本,求实践后前来修错
如需帮助,请参阅 VDC 编辑帮助维基百科清理过程。另外,请记住在本文的讨论页检查标记者留下的任何笔记。

* 合作模式

下列是为双人模式制作关卡切换的方式。

做张地图,并使用“实例”

首先, 制作一张合作地图。 然后添加一个 func_instance(en) , 双击查看它的 VMF file 并找到名为 instances/coop/coop_lighting_ents.vmf的文件 (所用内容均为游戏自带)

修改取得的实例

地图结束逻辑位于实例 instances/coop/coop_endlevel_room.vmf 中, 以地图的方式打开它,然后点击Save 保存一份副本 ———例如my_coop_endlevel_room.vmf

在这张地图的一个小房间里,你能找到名为 transition_scriptlogic_script(en) 实体。其 Entity Scripts 属性设置为 debug_scripts/mp_coop_transition_list.nut.

无需修改一开始选中的文件! 它是Portal 2原先的一部分,你也绝对不想碰它(对吧?)。相反,更改副本的 Entity Scripts 属性指向你自己的L_S(en)

例如debug_scripts/my_mp_coop_transition_list.nut 然后,保存地图。

回到你的合作实验室, 选中拆卸室的实例房间, 找到 func_instance(en) 后将它的 VMF file 换成你的副本.

修改脚本

现在转到传送门2安装并创建这个脚本(?)

当然,别碰V社自带的小玩意儿,你只需要这种: scripts/vscripts/debugscripts

(这段莫得翻译)

// Map order
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest_two"
]

function TransitionFromMap()
{	
	local nextmap = -2
	
	// Loop through maps
	foreach( index, map in MapPlayOrder )
	{
		if( GetMapName() == MapPlayOrder[index] )
		{
			// This is the map we're on
			nextmap = -1
		
		else 
		{
			if (nextmap == -1)
			{
				// This is the first map past that one
				nextmap = index
			}
		}
	}
		
	printl( "nextmap = " + nextmap )
		
	if (nextmap > 0)
	{
		// We found a map; go to it
		EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
	}
	else
	{
		// No map found; we're done
		EntFire( "@command", "command", "disconnect", 2.0 
	}
}

顶部的数组 MapPlayOrder 是按顺序排列的地图列表。(对于那些不熟悉 Squirrel 的人,请注意每张地图都用引号括起来,并且每张地图 之间 必须有一个逗号。也就是说,最后一个映射后面没有逗号。别忘了最后一个括号!)

要转到地图结束后的大厅,请将 “mp_coop_lobby_2” 添加为列表中的最后一个地图 (MapPlayOrder)

试试就逝世

使用修改后的 endlevel room 而不是默认的 endlevel room 制作额外的合作地图。将它们全部编译。

现在,你就能试试你的地图了。加载第一张地图玩玩。

当你通关时,游戏 将切换到下一张地图。一旦它到达终点,它就会简单地退出到主菜单。


* 单人模式

单人模式亦如此。

像上面一样修改

单人模式中, 结束逻辑arrival_departure_transition_ents.vmf(en)位于maps/instances/transitions文件夹中.以地图形式打开它保存一个副本,

例如my_arrival_departure_transition_ents.vmf

在这张地图最小的房间里依然有一个名为@transition_Script的logic_script(en)。其 Script Entity 属性指向 transitions/sp_transition_list.nut

还是别碰它娘. 相反,更改副本的 Entity Scripts 属性指向你自己的L_S(en) 例如transitions/my_sp_transition_list.nut.

保存修改后的VMF版本。

修改脚本

这个脚本中有很多内容,毫无疑问,一个更简单的版本可以处理一系列简单的实验室;但是,这是你必须做的最低限度你必须吃的屎山代码)。 查找地图列表并搜索demo_paint,即最后一张地图在文件中,在这后面添加你的地图。(同样,地图名称用引号括起来,除了最后一张地图外,后面还有一个逗号。别忘了最后的括号) 结果应该如下所示:

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

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

切换地图的实际逻辑在 TransitionFromMap 中。要使游戏在显示结束文本退出到主菜单,请查找以下行:

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

并在它们后面添加:

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

保存它。 (同样的,修改副本而不是V社的东西)

编译和测试

制作并编译其他地图。

现在可以返回第一张地图并从 Hammer 运行它;游戏将加载并将你放入你的第一张地图。当你到达末尾时,它将运行脚本中的下一个地图,并在所有操作完成后退出到主菜单。