Guide zh_CN - Paranoid-AF/trigger_purchase GitHub Wiki
trigger_purchase 说明
trigger_purchase 是一个让地图制作者更便捷地对玩家比分进行操作的自定义点实体,比如,你可以实现让玩家扣除5分获得一把霰弹枪,也可以实现扣除5分让玩家体验15秒的月球重力,当然也可以一直保持——由你决定。同时也具备一定的错误处理机制,不会发生玩家扣到负分还能扣的尴尬场面。
下载与安装
- 点击这里打包下载,然后在
svencoop/scripts/maps
中建立一个名为trigger_purchase
的文件夹,将 zip 包内的所有文件解压到该文件夹中。 - 打开你的地图编辑器,在 Game Profiles 中添加上述文件夹中包含的
trigger_purchase.fgd
文件。
为地图引入脚本
创建一个地图,并编译,在 svencoop/maps
下找到该地图的 .bsp
文件,找到同名的 .cfg
文件,没有就创建。比如地图名为 touhou_hakureijinja.bsp
,则创建 touhou_hakureijinja.cfg
。
如果你的地图没有自定义脚本 (大部分情况)
在上面创建的 .cfg
文件中,另起一行,输入:
map_script trigger_purchase/INIT
如果你为地图加入过其它脚本 (高级用户)
在你加入的脚本中(脚本路径可以在上面的同名 .cfg
文件中找到,即 map_script 后面的内容并在前面加上 /svencoop/scripts/maps
),通过 #include
引入 trigger_purchase/Activate
(具体路径可能因文件相对位置不同而异,这里是相对路径),然后在 void MapInit()
函数中加入 Trigger_Purchase::Activate();
。
发布地图时你需要做的
将 svencoop/scripts/maps/trigger_purchase
文件夹一并打包,同时记得包含 .cfg
文件,并且在 .res
文件中加入你可能用到的模型、声音。
添加实体
在地图编辑器中,添加名为 trigger_purchase
的实体。
这个实体会有以下属性:
名称 | 类型 | 解释 |
---|---|---|
Name | 实体名 | 当前实体的名称 |
Target (Success) | 实体名 | 一开始要触发的实体 |
Target (Later) | 实体名 | 在一定时间后触发的实体 |
Target (Command Error) | 实体名 | 在一开始执行的指令出错后触发的实体 |
Target (Not Enough Score) | 实体名 | 在玩家分数不够时触发的实体 |
Echo command to execute immediately | 字符串 | 一开始要执行的指令 |
Echo command to execute later | 字符串 | 在一定时间后要执行的指令 |
Echo command to execute on error | 字符串 | 在一开始执行的指令出错后执行的指令 |
Echo command to execute on not enough score | 字符串 | 在玩家分数不够时执行的指令 |
Interval for later command (second) | 浮点数(允许小数) | 上述的“一定时间” |
Score to cost | 浮点数(允许小数) | 触发该实体需要的分数,分数足够并且执行成功才会被扣除 |
你可能会对这个流程感到疑惑——这是正常的,因此这里有一张流程图:
注: 这里为了表达方便,没有指明。但是请留意如果一开始的命令执行出错,那么 Entity (Success)
这个实体也不会被触发,分数也不会被扣除。
总之,在一开始触发的实体、执行指令后,根据条件的不同,会分情况进行下一步操作。
那么该怎么使用呢?这里举个例子,尚且算是抛砖引玉了。
Demo
这里有个 Demo,如果你需要的话。
Echo 指令
值得一提的是,上面的 “指令” 并非 SC 的 CVAR,而是脚本内置的指令系统。这套指令系统在 Ecco 中用到过,但这里是精简的版本,只保留命令行的部分,因此不必了解太多。
唯一需要注意的是,你可能会遇到需要执行多行指令的情况。那么用分割线 |
分隔开多行指令即可(为了美观,你可以在分割线前后加上空格,不会对指令效果产生影响)。如果需要用到分割线怎么办呢?在前面加上一个反斜杠即可,即 \|
。
指令列表
注: 列表中 []
包围的是必需的,而 ()
包围的是可选的。
指令 | 解释 |
---|---|
maxhealth [数值] (玩家名称) | 设置玩家的血量上限 |
maxarmor [数值] (玩家名称) | 设置玩家的护甲上限 |
say [文本] | 在该玩家的聊天栏中加入文本 |
broadcast [文本] | 在所有玩家的聊天栏中加入文本 |
give [实体类型名称] (玩家名称) | 将该武器或物品给一个玩家. |
log [文本] | 将文本记入服务器日志 |
hurt (数值) (玩家名称) | 杀死(第一个参数留空)或伤害玩家 |
heal (数值) (玩家名称) | 治愈(第一个参数留空)或治疗玩家 |
armor (数值) (玩家名称) | 完全充能(第一个参数留空)或部分充能玩家护甲 |
maxspeed [浮点数] (玩家名称) | 设置玩家的最大移动速度(不能超过服务器设置) |
gravity [浮点数] (玩家名称) | 设置玩家的重力 |
魔法文本
由于指令本身的限制,你可能需要一些变量,或者特殊的字符。
魔法文本 | 用途 |
---|---|
%PLAYER% | 获取触发本实体的玩家名称 |
%RANDOMPLAYER% | 随机选择一个玩家的名称 |
%SPACE% | 空格 |
在指令执行时,它们将被直接替换为对应的文本。
Echo 扩展
虽然是精简版,但还是支持对指令进行扩展。参见这里即可。