中国星际RPG联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2962|回复: 0
打印 上一主题 下一主题

Deaths计数

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-6 13:45:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作者:castelu

大家可以看到,Entrance Through 2013那张图里,很多刷兵都是精确固定时间的,其实我没用过哪怕一条Wait触发
那么究竟是如何实现的呢,这就是Deaths计数,现在就来告诉大家

首先,Deaths计数是一张成熟RPG地图中必备的技巧,因为wait触发在过多使用的情况下会产生BUG,即延迟
所以,好的图都用Deaths来代替Wait,如果你希望你的图上一个层次,建议使用Deaths计数

Deaths属于普通触发,用SCMD就可以编辑,它的原理是,先设置单位的死亡数,然后用单位的死亡数这个数据做条件,写其他触发
一般的格式,有两条:

#触发1:
条件:
>>自定
动作:
>>(SET DEATHS)Modify death counts for Current Player: Add 1 for 单位名称.
>>Preserve trigger.
#触发2:
条件:
>>(Deaths)Current Player has suffered at least 数量 deaths of 单位名称.
动作:
>>(SET DEATHS)Modify death counts for Current Player: Set to 0 for 单位名称.
>>动作名称
>>Preserve trigger.

触发1的意思是,一直循环增加某个玩家某个单位的死亡数,由于循环触发在没有加速触发的条件下是1秒1次
所以,每过1秒,这个玩家的某个单位就会增加1个死亡数

触发2的意思是,当这个玩家的死亡数达到多少时,让它重新计数,然后可以附加执行一条自定义动作

这样,一个Deaths计时器就制作完成了

经过我探索,Deaths计数有三个应用:

一、Deaths计时器:
比如我们做一个每3秒刷一条Zergling,那么就这样写

#触发1:
条件:
>>自定
动作:
>>(SET DEATHS)Modify death counts for Current Player: Add 1 for 单位名称.
>>Preserve trigger.
#触发2:
条件:
>>(Deaths)Current Player has suffered at least 3 deaths of 单位名称.
动作:
>>(SET DEATHS)Modify death counts for Current Player: Set to 0 for 单位名称.
>>(Create unit)Create 1 Zerg Zergling at 'Anywhere' for Current Player.
>>Preserve trigger.

二、多向开关:
我们知道,星际自带的开关只有两种状态,开和关,而Deaths计数可以模拟开关,并实现多向开关
比如当Deaths为1时,怎样,当Deaths为2时,怎样,当Deaths为3时,怎样,……

三、变量:
看到这里,你应该已经知道了,Deaths计数相当于一个变量,只不过在普通触发条件下,不能做四则运算(有一种例外,Force的Deaths是所有玩家的Deaths和),只能配合循环触发实现自增长
所以,利用Deaths计数可以制作随机效果
举个例子,2个随机开关只能实现4种随机状态,每种情形的概率是1/4,n个随机开关只能实现2^n种随机状态,每种情形的概率1/2^n
那么,假如我们要实现一个20%的概率事件呢?我们马上会发现随机开关实现不了
但是,Deaths计数可以做到
我们可以做一个1-5秒的计时器
然后规定其中1秒时,执行那个概率事件,就实现了20%的概率,也就是说,n秒的Deaths计数可以实现1/n概率的事件,显然它的范围比随机开关广
但是,这样写有个BUG,实际上这是一个循环的时钟,如果玩家知道这个时钟每5秒循环一次,那么他可以在固定的某1秒执行那个动作,这样随机效果就没了
所以,这种方法,只能用在玩家不知道这是个时钟的情况下,也即只能用一次(多了玩家就发现规律了)

四、几个注意点
1、用于计数的Units最好选那些Terran Marker之类的不常用的单位
2、消除Deaths的时候,尽量使用Set to 0,而不要用减法,可以避免BUG
3、如果使用过加速触发(复制了3份的情况下),普通触发的执行速度比原来的快12秒,所以你相应的Deaths计数也要乘以12(一般只影响作为计时器的Deaths,而不影响作为变量的Deaths),对于没有使用过Deaths的触发,你可能也需要为它模拟1个12秒的时钟(加速下实际是1秒),比如说你原先的Attack命令后面直接跟了循环触发,那么加速下的Attack命令相当于每1/12秒执行1次,如果电脑控制的是航母,小飞机就会出现悬浮的BUG,这时,如果你给它模拟时钟,它就会恢复成没有加速触发的那种正常效果
4、实际上,所有带数字的触发,都可以用来计数,例如Mineral和Gas,但一般习惯上使用Deaths计数,因为Deaths不常用(尤其是使用那些不常用的单位),可以避免BUG

五、演示图
分别演示了Deaths计数的应用,即Deaths计时器、多向开关和变量

Deaths Count Test.scm

39 KB, 下载次数: 1, 下载积分: 水晶 -2 克

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|网站统计|手机版|小黑屋|中国星际RPG联盟    

GMT+8, 2024-5-5 07:43 , Processed in 1.234375 second(s), 22 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表