script
< Zh
		
		
		
		Jump to navigation
		Jump to search
		script是一个控制台命令,可在所有的  起源 游戏,自从
 起源 游戏,自从  求生之路2 以来中使用。
 求生之路2 以来中使用。
该命令在所有实现了含有使用Squirrel语言的VScript游戏中可用,具体包括这些游戏。
语法
script <代码>
描述
该命令从根表(root table)执行Squirrel代码。代码中可以包含空格,即使不使用引号"。
限制
分号
分号;只有在引号内才能用于脚本需求,因为开发者控制台会将其视为控制台命令的分隔符。
- 第一种使用方式是将整个代码用引号包裹。这种情况下只能使用这两个引号符号,因为命令会寻找结束引号且无法在控制台中转义:
- script "local a = 666; for(local i; i < 10; i++) { printl(i + a) }" 
- 另一种使用方式是当分号出现在字符串引号内时:
- script printl("我可以打印 ; 但现在需要执行字符串的方法") 
- 使用compilestring将字符串编译为函数,可以在使用for或local关键字的同时使用引号:
- script compilestring("for(local i = 0; i < 10; i++) {printl(\"现在可以这样做: \" + i)} printl(\"现在唯一的限制是控制台提示最多255个字符,而且上箭头获取之前运行的命令只能得到253个字符!\")")() 
- 不使用分号分隔非语句时可以使用,逗号:
- script printl("i = 0"), i<-666, printl("i = " + i) 
- 可以使用语句块来分隔语句:
- script function f() { {i<-0} while(i++<10) printl(i) } 
命令解析
当执行script命令时,从命令开头(包括空格)到结束分号的所有文本都会被获取,前6个字符被截去,其余部分作为脚本运行。这意味着如果在script命令前有任何空格,将导致错误。
以下示例展示了前面有3个空格的script命令。]表示控制台行首:
- ] script printl(666) 
- 上述命令将运行脚本ipt printl(666)导致错误。
- 同样适用于用;分隔的多个script命令。结束分号和下一个script命令开头之间不能有空格,即script printl("print1"); script printl("print2")会抛出脚本错误,而script printl("print1");script printl("print2")则不会。
查找命令发起者
- activator或- caller在实体I/O操作时自动创建,但在script命令上下文中没有意义也不会被创建。- self也不会包含发起script命令的玩家。获取运行命令的玩家句柄没有"适用于所有情况"的单一方法,基于 军团要塞2分支的游戏只允许服务器使用 军团要塞2分支的游戏只允许服务器使用- script命令,客户端只能通过- rcon发出。
- 如果客户端连接到服务器并能发出此命令,可以通过status检查并使用GetPlayerFromUserID(userid)函数(如果可用)找到自己的玩家实体。在 求生之路2或 求生之路2或 传送门2中,可以使用特殊的目标名称,例如 传送门2中,可以使用特殊的目标名称,例如Entities.FindByName(null, "!bill")。
- 如果玩家是服务器主机,可以使用Entities.FindByName(null, "!player")找到自己。
- 其他方法包括使用ent_fire和RunScriptCode输入,此时命令发起者被设为activator和caller。玩家可以用ent_fire !activator RunScriptCode "::storing_my_handle_as_global <- self"定位自己。另见:Inputs中的Vscript。
示例
script printl( GetMapName() )
在控制台打印当前地图名称。
script player <- Entities.FindByClassname(null, "player"); script player.SetMaxHealth( 200 )
使用变量找到最低实体索引的玩家,然后将其最大生命值设为200。
script { player <- Entities.FindByClassname(null, "player") } { player.SetMaxHealth(200) }
相同代码,但作为单个控制台命令,通过使用花括号绕过分号限制。注意此例中一对花括号就足够;如果没有嵌套,每隔一个语句用花括号包裹即可。另注意player <- ...语句尽管用了花括号,仍会在根表创建持久的表槽。如果player变量应为local变量,其赋值语句不能单独放在花括号内,因为其作用域会随右花括号结束。
当使用控制台的上↑下↓箭头键重复执行多个复杂命令时,在命令中添加注释会很有用,例如:
script /* 设置最大生命200 */ { player <- Entities.FindByClassname(null, "player") } { player.SetMaxHealth(200) } // 设置最大生命200
Squirrel永远看不到以//开头的行注释,因为开发者控制台会先发现并移除它们。
块注释/* */也可以使用,因为Squirrel支持它们!



























