找回密码
 点一下
查看: 1733|回复: 5

[小贴士]利用“创建治疗者”制作治疗效果

[复制链接]
发表于 2011-4-15 22:45:18 | 显示全部楼层 |阅读模式
想制作暗黑2中圣骑士的一个技能:祈祷,它是一个光环类技能,会持续治疗周围的友方单位,然后依据治疗量扣除圣骑士一定比例的魔法。

具体如何实现加血减魔的效果,主要是有两个方法,一个是通过使用效果“修改单位”,另外一个是效果“创建治疗者”。

前者需要考虑满血、空蓝还有治疗/魔法比例等问题,比较繁琐,而且我也不需要实现百分比加血的效果,因此选择了使用后者。现在记录一下我在制作过程中的一些注意事项。

“创建治疗者”官方提供的一些例子中均勾选了旗标“被引导”,因此需要单位持续施法才能维持此治疗效果。因为我是要做一个光环效果,所以需要把这个旗标给勾去。

勾去“被引导”旗标后,“创建治疗者”效果需要在目标属性已满(目标血条)或者消耗属性已空(施法者能量)才会自行移除,当然也可以使用“销毁治疗者”效果来移除它。

要特别注意的有4个属性:
RechargeVital        关键指标周期性回复
RechargeVitalRate    关键指标周期性回复量
DrainVital        抽取关键指标
DrainVitalCostFactor    抽取关键指标消耗系数
国服版的编辑器,翻译得有点囧,简单来说呢,RechargeVital要填 需要恢复的类型,DrainVital要填 需要消耗的类型,DrainVitalCostFactor要填 消耗与恢复比,RechargeVitalRate有些奇特,我们先看下面的例子。
[codes=xml]
    <CEffectCreateHealer id="asdasd1">
        <Flags index="Channeled" value="0"/>
        <RechargeVital value="Life"/>
        <RechargeVitalRate value="3"/>
        <DrainVital value="Energy"/>
        <DrainVitalCostFactor value="0.33"/>
    </CEffectCreateHealer>
[/codes]
这个例子中,施法者会消耗能量来为目标补充生命值,每0.33点魔法制造1点生命。那么恢复速率有多快呢?是
RechargeVitalRate/DrainVitalCostFactor = 3 / 0.33 ≈ 9.09 (点/秒);
而当DrainVitalCostFactor等于0时,恢复速率为RechargeVitalRate (点/秒);
当DrainVitalCostFactor小于0时,该效果不能触发。

在战役中有一项医疗运输机的升级,可以使得运输机能同时治疗两个单位,官方是使用“修改单位”效果来模拟的,可以看到治疗部分是每0.11秒增加单位1点生命值。


继续做光环,我预计的效果是,使用一个行为每1秒触发一次“搜索区域”效果,为符合条件的单位套用上“创建治疗者”效果。为了防止该效果的多余累加,需要延迟1秒后将其删除,再等待重新添加,因此我做了一个“创建效果持续性”效果,如下:
[codes=xml]
    <CEffectCreateHealer id="asdasd1">
        <Flags index="Channeled" value="0"/>
        <RechargeVital value="Life"/>
        <RechargeVitalRate value="3"/>
        <DrainVital value="Energy"/>
        <DrainVitalCostFactor value="0.5"/>
    </CEffectCreateHealer>
    <CEffectDestroyHealer id="asdasd2">
        <WhichLocation Value="TargetUnit"/>
        <Effect value="asdasd1"/>
        <Count value="1"/>
        <Radius value="500"/>
    </CEffectDestroyHealer>
    <CEffectCreatePersistent id="set">
        <WhichLocation Value="TargetUnit"/>
        <OffsetVectorStartLocation Value="CasterUnit"/>
        <InitialEffect value="asdasd1"/>
        <FinalEffect value="asdasd2"/>
    </CEffectCreatePersistent>
[/codes]
名字不好看...其实我真不知道该起啥名字,咱英语实在不行...asdasd1是治疗效果,asdasd2是删除治疗效果,分别填在了set的初始效果和最终效果中。那么set中的延迟应该填多少呢?先按照触发频率填1秒吧。

我使用了一个技能挂接了set效果,进入游戏看看实际效果,多使用几次以后就会发现,其实每次恢复的生命值并不是6,而是6.75。

我们已经知道,FinalEffect即使在延迟为0的情况下也不会立即触发,那么它应该就是推迟了一个时间周期,我们将这个推延从延迟中扣除,会发现恢复的生命值依然大于6。推测为asdasd2删除asdasd1时,依然存在一个时间周期的延迟,那么就在set的延迟中填0.875吧。放心吧,asdasd1的持续时间确确实实是1秒了,所以在一些需要精确控血的地方,一定要注意这里的两个周期的隐性“延迟”。

利用上面的例子,可以制作暗黑2圣骑士的祈祷,war3血法的抽蓝与送蓝,黑暗游侠的生命汲取,魔法盗取权杖等一类的技能效果,因为“创建治疗者”内置的边界判断,我们可以省去很多麻烦的步骤。不过如果要设置更精确的控制,那么还是继续“修改单位”吧。

附上一个演示,看看是如何让治疗效果在单位身上准确的待1秒钟吧。

创造治疗者 测试.SC2Map

169 KB, 下载次数: 56

发表于 2011-4-16 01:43:49 | 显示全部楼层
好例好帖,多谢分享
回复

使用道具 举报

发表于 2011-4-16 04:58:03 | 显示全部楼层
楼主不如用拼音,也好过无意义的ABCD。。
回复

使用道具 举报

 楼主| 发表于 2011-4-16 09:22:31 | 显示全部楼层
啊哈哈,说的没错,下次不能这么敷衍了。
回复

使用道具 举报

发表于 2011-4-16 13:41:11 | 显示全部楼层
其实我作图一直是用拼音...
回复

使用道具 举报

发表于 2011-4-16 16:01:16 | 显示全部楼层
[s:198][s:198]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-6-27 08:05 , Processed in 0.093948 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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