Guide zh_CN - Paranoid-AF/trigger_purchase GitHub Wiki

trigger_purchase 说明

Cover

trigger_purchase 是一个让地图制作者更便捷地对玩家比分进行操作的自定义点实体,比如,你可以实现让玩家扣除5分获得一把霰弹枪,也可以实现扣除5分让玩家体验15秒的月球重力,当然也可以一直保持——由你决定。同时也具备一定的错误处理机制,不会发生玩家扣到负分还能扣的尴尬场面。

下载与安装

  1. 点击这里打包下载,然后在 svencoop/scripts/maps 中建立一个名为 trigger_purchase 的文件夹,将 zip 包内的所有文件解压到该文件夹中。
  2. 打开你的地图编辑器,在 Game Profiles 中添加上述文件夹中包含的 trigger_purchase.fgd 文件。

Guide on How to Add .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 浮点数(允许小数) 触发该实体需要的分数,分数足够并且执行成功才会被扣除

你可能会对这个流程感到疑惑——这是正常的,因此这里有一张流程图:

Guide on How to Add .fgd

注: 这里为了表达方便,没有指明。但是请留意如果一开始的命令执行出错,那么 Entity (Success) 这个实体也不会被触发,分数也不会被扣除。

总之,在一开始触发的实体、执行指令后,根据条件的不同,会分情况进行下一步操作。

那么该怎么使用呢?这里举个例子,尚且算是抛砖引玉了。

Guide on How to Add .fgd

Demo

这里有个 Demo,如果你需要的话。

Echo 指令

值得一提的是,上面的 “指令” 并非 SC 的 CVAR,而是脚本内置的指令系统。这套指令系统在 Ecco 中用到过,但这里是精简的版本,只保留命令行的部分,因此不必了解太多。

唯一需要注意的是,你可能会遇到需要执行多行指令的情况。那么用分割线 | 分隔开多行指令即可(为了美观,你可以在分割线前后加上空格,不会对指令效果产生影响)。如果需要用到分割线怎么办呢?在前面加上一个反斜杠即可,即 \|

指令列表

注: 列表中 [] 包围的是必需的,而 () 包围的是可选的。

指令 解释
maxhealth [数值] (玩家名称) 设置玩家的血量上限
maxarmor [数值] (玩家名称) 设置玩家的护甲上限
say [文本] 在该玩家的聊天栏中加入文本
broadcast [文本] 在所有玩家的聊天栏中加入文本
give [实体类型名称] (玩家名称) 将该武器或物品给一个玩家.
log [文本] 将文本记入服务器日志
hurt (数值) (玩家名称) 杀死(第一个参数留空)或伤害玩家
heal (数值) (玩家名称) 治愈(第一个参数留空)或治疗玩家
armor (数值) (玩家名称) 完全充能(第一个参数留空)或部分充能玩家护甲
maxspeed [浮点数] (玩家名称) 设置玩家的最大移动速度(不能超过服务器设置)
gravity [浮点数] (玩家名称) 设置玩家的重力

魔法文本

由于指令本身的限制,你可能需要一些变量,或者特殊的字符。

魔法文本 用途
%PLAYER% 获取触发本实体的玩家名称
%RANDOMPLAYER% 随机选择一个玩家的名称
%SPACE% 空格

在指令执行时,它们将被直接替换为对应的文本。

Echo 扩展

虽然是精简版,但还是支持对指令进行扩展。参见这里即可。