找回密码
 点一下
查看: 2950|回复: 23

暴击的制作与行为删除的延迟

[复制链接]
发表于 2011-6-30 15:13:44 | 显示全部楼层 |阅读模式
行为的删除有一个游戏周期的延迟,之前在做头目布置的传送门作业时发现了,不过当时并没有仔细想这个延迟具体会引发哪些问题。

今天制作暴击,测试的时候偶然发现了个bug,真是头疼。

头目之前有发过暴击的制作教程,【http://bbs.islga.org/read-htm-tid-51988.html】,原理就是用行为响应攻击者的伤害效果,触发一个附加给被攻击者暴击行为的效果,该暴击行为的最大、初始以及使用计数均为1,这样就会在响应一次伤害后自动删除。

但是问题在行为删除的时机是在一个游戏周期之后,并且行为在刷新之后无法自动更改其初始计数。因此当在一个游戏周期内对同一单位触发多次暴击效果的话,只会有一次暴击。

演示很多余,但是附上供大家测试。地图上工蜂攻击会有两次伤害效果,但是只有第一次会暴击;圈3个坦克一起攻击的话,很大几率会出现没有暴击的情况。

baoji test.SC2Map

17 KB, 下载次数: 30

发表于 2011-6-30 15:28:35 | 显示全部楼层
建议你将暴击的buff设置为伤害回应,移除自身。

试试这样能否在当前周期中移除这个行为。

像自动隐形,下一击造成额外伤害等效果都是采用伤害回应移除自身的模式。不知道这样是不是比设置计数的模式更快移除掉已作用的buff。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 15:40:55 | 显示全部楼层
不行,无论是计数耗尽、验证器移除还是使用效果移除,行为的删除都是有延迟的。
回复

使用道具 举报

发表于 2011-6-30 16:13:29 | 显示全部楼层
虽然确实有这样的bug。不过删除buff有一个周期的延迟的说法是不对的。

应该说blizzard略为修改了一下伤害响应的处理顺序,变成先统一处理所有的伤害handle效果,再统一计算实际伤害。如果你两个伤害之间没有任何间隔,那么第二次伤害所附加的buff会在第一次伤害进行实际计算前就被套上。

也就是说,如果两个伤害之间没有间隔,其实一开始buff就被上了2次,但是全部被第一次伤害消耗掉了,故而第二次伤害就没有buff可以抓了。
回复

使用道具 举报

发表于 2011-6-30 16:17:28 | 显示全部楼层
其实我在改版后找到了方法修正这个问题,但是一时间想不起来了。

不过大致上,伤害响应buff有一些变化,比如0伤害不再响应。而且包括被handle处理到0的伤害。具体还得多测试一下。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 16:31:29 | 显示全部楼层
好像不对,这个说法和实验不符,我将baoji行为的叠加数量修改为0,初始、最大计数修改为2,使用计数为1,那么如果按照它们是同时添加的情况,工蜂第一次伤害效果应该会消耗计数2,同时是4倍暴击,而第二次不暴击;但是实际情况是第一次攻击2倍,第二次攻击4倍,之后行为会自动删除。那么应该就是分次添加的baoji行为。


而且这个说法不能解释3个坦克同时攻击时,出现不能暴击的情况,因为不太可能坦克的攻击之间会没有任何间隔。

baoji test2.SC2Map

17 KB, 下载次数: 21

回复

使用道具 举报

发表于 2011-6-30 16:34:10 | 显示全部楼层
最简单的一个测试方法:

做一个触发器,给单位附加一个double damage的buff。然后用触发器造成一次伤害。然后等待0.0秒。判断buff是否存在。


由于等待0.0秒相当于等待半个周期。所以如果buff真的在一个周期后才消失,那么这时候buff肯定存在。实际上测试一下就知道,那时候buff已经不存在了。
回复

使用道具 举报

发表于 2011-6-30 16:40:34 | 显示全部楼层
另外你用持续性效果来测试会出现不稳定的结果。因为0.00这个。

比较稳定的测试方法是用Set类效果,而不是持续性效果。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 16:42:13 | 显示全部楼层
可是头目之前不是说过触发器的响应机制是在游戏周期的末尾抛出的吗,那么如果触发了单位受到伤害之后,再等半个周期的话,此时行为应该就是被删除了呀。
回复

使用道具 举报

发表于 2011-6-30 16:44:18 | 显示全部楼层
触发器事件确实是如此,但是我刚才说的整段操作都是在触发器动作里面完成的,并没有伤害响应的过程。

是让触发器造成伤害然后立即等待,而非响应后再等待。
回复

使用道具 举报

发表于 2011-6-30 16:49:24 | 显示全部楼层
另外,你似乎把Charge这个东西理解错了。

2层buff并不会令buff被1次伤害消耗掉2次。它依然还是消耗1次。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 16:50:14 | 显示全部楼层
哦,这个我明白了,刚才理解错了,还以为是响应伤害效果呢。

但是我在游戏内也有检测和显示行为计数呀,就像5楼那个演示中,工蜂攻击完之后,触发了伤害事件,而显示baoji的行为计数是2,那么至少在本次周期内,该行为还没被删除呀。


//===========================
引用第10楼麦德三世于2011-06-30 16:49发表的  :
另外,你似乎把Charge这个东西理解错了。

2层buff并不会令buff被1次伤害消耗掉2次。它依然还是消耗1次。

啊,对,呵呵,确实是叠加以后也只消耗1,尽管会触发两次效果。

那么5楼得预测效果应该修改为“工蜂第一次伤害和第二次,同时是4倍暴击”,但是这个依然和实际结果不一样呀。
回复

使用道具 举报

发表于 2011-6-30 17:00:39 | 显示全部楼层
你用的什么函数来捕捉行为记数,另外。你有没有看到我10楼说到的你的charge计算方式有问题呢?
回复

使用道具 举报

 楼主| 发表于 2011-6-30 17:02:47 | 显示全部楼层
嗯,我刚才修改了下上面的帖子,我是使用的“单位受到伤害”这个事件。检测行为的函数是UnitBehaviorCount().
回复

使用道具 举报

发表于 2011-6-30 17:05:14 | 显示全部楼层
你有2个charge和2层buff,受到一次伤害后后消耗掉1个charge,但是之后buff还是2层。你在一定程度上混淆了层数和charge。
回复

使用道具 举报

发表于 2011-6-30 17:09:45 | 显示全部楼层
另外,你的测试图里同时有层数和charge2个变化量。所以测试时最好将其简化为1个。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 17:10:09 | 显示全部楼层
我有点搞不清楚了,不知道哪里混淆了。

那么请头目预测下我在5楼的地图中,工蜂攻击一次的暴击情况吧。

//===================================

可是如果只用一层的话,没有办法验证“如果两个伤害之间没有间隔,其实一开始buff就被上了2次”这种情况呀。

哎呦,我混乱啦...
回复

使用道具 举报

发表于 2011-6-30 17:11:32 | 显示全部楼层
你那地图,得先把持续性效果改为效果set。否则期间的变数太多了。
回复

使用道具 举报

 楼主| 发表于 2011-6-30 17:29:10 | 显示全部楼层
这会网速不行了...

其实我一开始使用的就是set,因为想要可以修改两次伤害之间的间隔,才改用持续效果的,不知道两者之间有什么区别。

这个地图我修改为使用set了,效果还是如之前一样。
回复

使用道具 举报

发表于 2011-6-30 17:31:06 | 显示全部楼层
改成set。然后charge还是1。buff最大层数弄成无限。


然后用set效果伤害它一次。你觉得应该是怎么样的结果呢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 03:37 , Processed in 0.130178 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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