|
作者:castelu
杀敌加钱是指每杀死若干个单位,奖励玩家金钱的触发
它是普通触发里一个非常麻烦且历史遗留的问题,主要是因为如果你用
玩家名称 kills 数量类型 数量 单位名称
做条件,会发现动作触发里没有将Kills归0的触发,这与Score和Deaths不同,所以一循环就会产生不停加钱的BUG
要实现杀敌加钱,有下面几种思路,分别列举了它们的优缺点,可以看看
一、穷举法
意思就是不要使用循环触发,根据玩家的杀敌数一条一条地手动写下来,例如:
Current Player kills at least 100 Zergling
Modify resources for Current Player: Add 资源数量 资源类型
Current Player kills at least 200 Zergling
Modify resources for Current Player: Add 资源数量 资源类型
……
这种方法适用于每批量杀敌数是比较大数字的地图,如果是小数字,会累死人,优点是比较精确,缺点是这种方法无法写到无穷大
很多老图中见过这种写法
二、分数法
分数是以前流行的解决杀敌加钱的常用方法
原理是用分数大致代替杀敌数,因为分数是可以在动作触发里设置减少的
星际单位的分数是星际自带的,具体请看帖子:
http://www.scrpg.net/thread-431-1-1.html
分数法的触发写法是
Current Player total score is at least 分数
Modify score for Current Player: Set to 0 total
Modify resources for Current Player: Add 资源数量 资源类型
Preserve trigger
直接用分数代替杀敌数的好处是基本解决了问题,但是存在误差,因为不同单位的分数可能相同,分数与杀敌数不是一一对应的关系
三、分数+Deaths计数+加速触发
这种方法是普通触发下近乎完美的解决方案,老鼠发明的
原理是,排除玩家造兵产生的分数并且在游戏开始将玩家的分数清0以后,当玩家的分数增加时,可以认定玩家杀死了单位
那么具体分数加了多少可以忽略,只要分数增加,就表示玩家有了杀敌数,于是我们写出这样的触发
Current Player total score is at least 1
Modify score for Current Player: Set to 0 total
Modify resources for Current Player: Add 资源数量 资源类型
Preserve trigger
这就表示,玩家至少每杀死1个单位时,增加多少钱
那么,如果要做到每杀死k个单位,如何实现呢
这时用利用Deaths计数的变量属性,于是我们写出这样的触发
触发1(设置Deaths):
Current Player total score is at least 1
Modify score for Current Player: Set to 0 total
Modify death counts for Current Player: Add 1 for 单位名称
Preserve trigger
触发2(使用Deaths):
Current Player has suffered at least 单位数量 deaths of 单位名称
Modify death counts for Current Player: Set to 0 for 单位名称
Modify resources for Current Player: Add 资源数量 资源类型
Preserve trigger
这样做完了以后,还需要加上加速触发,为了防止单位杀敌过快,而触发运行速度跟不上节奏的BUG
同理,如果单位的攻击方式带有AOE的,则这种方法会产生一定的误差
老鼠的解决方法是根据单位分数的分级多写几条触发
比如分数大于10000的写一条,之后再写一条大于5000,再写一条3000,再写最小单位分数的触发。从上到下触发。这样AOE伤害死掉的分数也可以计算进去。如果被杀单位单一的话,可以用它的分数的倍数来写,但还是无法做到完美
四、EUD改分数
在普通触发的范围里,第三种方法应该是近乎完美的方法,而在EUD触发的范围里,也只是简化了第三种方法而已
因为杀敌加钱的难点在于Kills无法归0,那么如果我们用EUD把每个单位的分数改成1,则分数就等于Kills了,这样我们就可以利用分数的归0方法来完美代替Kills
这种方法的缺点是,你要用EUD设置每一个在地图上出现的敌人的分数
演示地图是从staredit上面找来的,据说完美实现了杀敌加钱,你们可以下载来看看
五、EUD设置杀敌数
可以将分数解放出来,同时避免了设置每个敌人的分数
用法:
Comment("", 0, 参数1, 数量, 参数2, 3);
参数1:玩家1=5289164,以后每个玩家按4递增
参数2:设置=0,增加=1,减少=2 |
|