找回密码
 点一下
查看: 5684|回复: 14

化繁为简:更有效的捕捉物理攻击的命中与伤害(近战)

[复制链接]
发表于 2007-11-8 17:34:05 | 显示全部楼层 |阅读模式
        如何能够准确捕捉由单位击中目标造成的伤害或者时刻呢,目前最精确而有效的方案是使用单位受伤害事件,由于必须锁定特定单位,由单位攻击事件为开端----动态注册攻击目标单位的伤害事件----检测伤害是否带有特定buff。这个方案的优点是  它几乎是万用的,锁定也精确;但同时也具备了如下的缺陷:
  1.要求动态的注册伤害事件,以实际的游戏说来不能算什么问题,因为即使动态触发不销毁,缓存不释放,对普通游戏的影响甚微(实例参见6.44以前的dota),但自己知道有泄露的话毕竟不舒服。而一般情况做到严格处理是挺有难度的。
  2.附加buff的问题,使用何种带buff的原被动技能为标记,首先考虑和正常技能冲突较小的,比如慢性毒药,那如果要求英雄具有多个这样的被动技能呢。可惜就算是慢性毒药,两个以上给予同一单位时也无法同时附加。于是有的方案是摒弃buff附加,直接考虑伤害,假设特定英雄单位的主要伤害手段只有物理攻击一条路,那么在设定注册伤害事件具有短时效的前提下,基本也可以蒙混过关了。

在此之前,我拟过一个简易的方法,使用重击为附着被动技能,以“单位的眩晕事件”为起始,在一个0点timer之后检查buff和被扣除的hp。似乎不错,但最根本的---重击的打断目前还未找到除去之法(如果单独去防止眩晕还是很容易的,但这个方案本身就是以“单位的眩晕事件”为开端)。这不得不说比较遗憾,不过,如果对特定的技能可以用文字说明来解释这个眩晕的来源,使得这个打断理所当然一样:)  (这里不得不提,一个完美的设计是成功的,一个合理的解释更成功,特别是将原本的瑕疵描述成特点而合乎逻辑的文字说明)

最主要的方面,带buff而冲突小的被动技能模版,似乎还无头绪,于是想到了所有被动技能中几乎没有冲突的一个: 粉碎。

没错,粉碎是不带buff的,那么,我们不妨从最基本的路线进行调整:
预备工作  将粉碎范围改为1,伤害为一个小的正值,比如0.12,而几率呢,恭喜我们又得到一个免费参数;目标加上自己(这里的目标设置有些奇怪,如果重新按目标为自己设置来设置,似乎是无效的。。而保留原来的“敌人和中立”就没问题)。不过没关系,既然己经将范围和伤害设置到足够小,就算有额外的目标也不要紧。

那么伤害这条线就定下来了,单位受到伤害且伤害来源等于伤害目标,伤害值是这样一个特殊的小额负值(假设你没用法术伤害反转这样的额外干扰),那么这些特征值足以锁定这个“粉碎”,也就是我们的自定义被动技能击中目标的时刻了(miss的话只有slam动作而无伤害)。那么,目标又该如何锁定呢。

动态的攻击目标 : 在我们给予技能的单位注册“单位锁定攻击目标”事件后(Target InRange),使用gamecache也好,一个基于datasys的变量系统也好,只需要将当前的攻击目标绑定在攻击单位上就完事了,毕竟以一般的物理攻击要造成伤害首先得经过目标的锁定,而之后的伤害事件发生时调用当前绑定着的目标单位就行了,至于更换攻击目标,绑定的目标变量同样变换。

缺陷:我的题目里已说明,对于近战单位这个方案是极尽所能的完善了,而对于有箭矢弹道,特别是对慢速箭矢的单位来说,还是有极大缺憾的。这来源于粉碎的技能本身,如果在箭矢命中目标之前改变或取消目标(实例如移动单位),那么这次攻击不会触发粉碎。这种情况,除使用最初却是最准确的方法外恐怕没有什么更好办法了。

顺便演示附送,剑舞是旧的一个简明演示,毒爪从搁置工程里挖的,新鲜的是用粉碎伤害判断的击退。

CustomPa.w3x

88 KB, 下载次数: 305

自定义被动技能

发表于 2007-11-9 10:49:09 | 显示全部楼层
好多,看完了。问下实际应用在什么地方
回复

使用道具 举报

发表于 2007-11-9 12:56:46 | 显示全部楼层
引用第2楼jsxzpq于2007-11-09 12:49发表的  :
实际上我连楼主提到的判断buff的方法也没搞清楚,拿DOTA里沉默者的智慧之刃来说,我猜想是单位锁定一个攻击目标/发动技能效果 后将 目标动态注册给某触发A
触发A  事件无 条件:触发单位有xx Buff 然后就是动作
但问题在于这个Buff要设置多长时间?0.01秒?但如果这0.01秒内有2个箭矢同时到达了不就有bug了吗
我用全局单位受到伤害来取BUFF

因为一受到伤害就有BUFF

怕BUFF持续太久可以顺便用T移除
回复

使用道具 举报

 楼主| 发表于 2007-11-9 14:41:40 | 显示全部楼层
引用第2楼jsxzpq于2007-11-09 12:49发表的  :
实际上我连楼主提到的判断buff的方法也没搞清楚,拿DOTA里沉默者的智慧之刃来说,我猜想是单位锁定一个攻击目标/发动技能效果 后将 目标动态注册给某触发A
触发A  事件无 条件:触发单位有xx Buff 然后就是动作
但问题在于这个Buff要设置多长时间?0.01秒?但如果这0.01秒内有2个箭矢同时到达了不就有bug了吗

基本如此,buff设置时间不是重点,因为可以在伤害事件时移除该buff,就不会出现重复多次伤害触发。不过正如你所述,dora6.44以前一直是有这个bug的。
回复

使用道具 举报

 楼主| 发表于 2007-11-9 15:12:15 | 显示全部楼层
粉碎对自己造成的伤害颇有意思,一般情况是一个相当精确的设定数值,不受护甲类型和数值的影响,不过仍然可以被反魔法盾吸收,魔免无效,会考虑狂战士这类的伤害加成。总的说来,似乎还是ATTACK_TYPE_NORMAL,DAMAGE_TYPE_ENHANCED,不过不去计算护甲类型了。如果是负数就相当于加血~不过用伤害事件是捕捉不到的。
由于是用伤害事件,无敌的话当然是捕捉不到的,如果存在无敌情况,修正办法是用一个侦测单位来接受伤害。
回复

使用道具 举报

发表于 2007-11-9 22:12:00 | 显示全部楼层
。。。。。。。。。看来我知道我视力不好的原因了。。。
回复

使用道具 举报

发表于 2007-11-16 00:00:37 | 显示全部楼层
幻影MS不能使用粉碎= =  so........
回复 0 1

使用道具 举报

发表于 2007-11-19 14:28:50 | 显示全部楼层
看得我一头雾水~~得好好啃啃其中的真谛!!
回复

使用道具 举报

发表于 2007-12-1 22:57:00 | 显示全部楼层
我正在测试一个被人们遗忘的技能。。我可以保证这个技能和已知任何技能不冲突,而且可能补抓到物理攻击事件
回复

使用道具 举报

发表于 2008-5-1 04:22:30 | 显示全部楼层
好吧,GOOGLE的时候看到了,所以挖下坟
其实用腐蚀之球代替重击,判断BUFF是很好的
虽然和很多技能冲突,但都可以模拟
回复

使用道具 举报

 楼主| 发表于 2008-5-1 10:24:24 | 显示全部楼层
这个怎么说~比如腐蚀就和重击冲突,发动重击时无激发腐蚀
回复

使用道具 举报

发表于 2008-5-1 13:14:22 | 显示全部楼层
近战的不会,弹道的会冲突,详细见下
http://www.islga.org/bbs/read.php?fid=13&tid=578
但是既然攻击可以捕捉,那么重击就可以模拟的是吧?
而且用腐蚀捕捉,能够得到攻击造成的伤害量
回复

使用道具 举报

发表于 2011-2-15 15:09:01 | 显示全部楼层
我来补充远程攻击的捕捉
给单位添加攻击自己的多重箭
在单位投射物出手的瞬间可以判断投射物产生
而粉碎可以捕捉攻击敌人产生伤害的瞬间,
2个时间差可以捕捉投射物飞行的时间
乘以投射物飞行的速度可以精确计算出投射物飞行的距离
回复

使用道具 举报

发表于 2011-2-18 22:12:35 | 显示全部楼层
那如果投射物飞出去了但还没到达之前,那个单位使用Blink呢?
回复

使用道具 举报

发表于 2011-2-19 14:23:43 | 显示全部楼层
好物....感谢楼主分享....
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:43 , Processed in 0.096384 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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