找回密码
 点一下
查看: 2271|回复: 4

[实践出真理]紫晓对伤害目标(UnitDamageTarget)函数,攻击类型,伤害类型的研究

[复制链接]
发表于 2012-12-16 13:00:21 | 显示全部楼层 |阅读模式
UnitDamageTarget( 伤害来源,伤害目标,伤害值,是否攻击伤害,是否远程攻击,攻击类型,伤害类型,武器类型),这个函数是做技能时的主要函数之一,但是其中的许多参数的作用却并非一目了然,最近开始用到这个函数,所以花了一天的时间进行了系统的研究,基本上已经解决问题。
         文章分为三部分,第一部分搞清疑惑点,说明基本常识。第二部分,写出此函数的运行机制。第三部分,总结规律,简化后得出结论。
【第一部分】
[搞清疑惑点
         简单来说,我们希望搞清楚4个问题。
         什么情况下计算护甲。
         什么情况下计算法抗。
         什么情况下无视魔法免疫。
         什么情况下可以伤害虚无。(经研究,发现,如果能伤害虚无单位,那么一定有伤害加成(平衡常数里调节的那个),不会出现虚无单位受伤但是没有加成的情况。)
         
         补充:对 是否攻击伤害,是否 远程攻击,2项测试后没有任何发现,是攻击伤害后此函数也不会触发 单位被攻击 事件,也不会对 尖刺外壳,硬化皮肤,步兵的盾牌等技能产生影响,所以这2个参数暂不讨论。
[基本常识]      
攻击类型决定是否计算法抗。是否计算法抗只看是否攻击类型 为 法术 或者 魔法。与 伤害类型无关。     
伤害类型决定是否计算护甲。是否计算护甲只看是否伤害类型 为 普通。与 攻击类型 无关。
         【法抗】
                   法抗应该分为2种法抗,一种是 攻击类型为魔法时 需要计算的 魔攻法抗。(比如对战中人族女巫的物理攻击)另一种是 攻击类型为法术时 需要计算的 法术法抗。(比如暴风雪等技能造成的伤害)
                   因为法抗其实只由2类技能提供,一类是 神秘腰带(魔法伤害减少),另一类 艾露尼之优雅(防御(物品),魔法防御属同类)
                            [神秘腰带只提供 法术法抗(即只抵挡技能伤害,不抵挡魔法攻击伤害),并且 不能叠加,后获得的技能直接将 法术法抗值 覆盖(直接对变量赋值)。(覆盖后再丢弃物品就可以让法抗还原)
                            [艾露尼之优雅在物编里只能设置 所受魔法伤害,所设置同时影响法术法抗和魔攻法抗(即2种法抗都乘以所受魔法伤害系数)。艾露尼之优雅可以完美叠加,与以前的法抗为相乘关系(法抗=法抗*艾露尼之优雅)
                   下面列出公式,一下就懂。
                            魔攻法抗=艾露尼之优雅*艾露尼之优雅*艾露尼之优雅….(魔法攻击法抗仅受艾露尼之优雅影响,且互相之间相乘)
                            法术法抗=最后一个获得的神秘腰带*神秘腰带之后的艾露尼之优雅*神秘腰带之后的艾露尼之优雅…(神秘腰带技能将以前的法抗系数都覆盖了,不过之后获得的艾露尼之优雅无影响)
         【伤害类型】:伤害类型共22(13+1+6+2),主要有4类,分别为 普通类,魔法类,强化类,通用类。
                   [普通类(1):只有 普通伤害类型
                          对战游戏中,所有物理攻击的伤害类型为 普通。【特点】普通伤害类型一定而且只有普通伤害类型计算单位护甲
                   [魔法类(13):火焰,冰冻,闪电,神圣(神圣伤害类型其实应该翻译为光明系,如圣骑士的圣光伤害不死族),魔法,音速,力量,死亡,精神,植物,防御,灵魂锁链,暗影突袭
                            魔法类很容易理解,死亡缠绕(攻击类型-法术,伤害类型-死亡)就是这种伤害类型的代表。【特点】无视护甲(只有普通伤害类型计算且一定计算护甲),不能伤害魔法免疫,如果攻击类型是法术则可以伤害虚无,与是否计算法抗无关。   
                          可以看到,和死亡缠绕,暴风雪这种小技能完全对应。(法术攻击,魔法伤害)                       
                   [强化类(6):强化,毒药,疾病,酸性,破坏,慢性毒药
                            【特点】无视护甲(因为不是普通伤害类型),与是否计算法抗无关,攻击类型不是魔法则无视魔法免疫,攻击类型不是魔法则不能伤害虚无单位。
                   [通用类(2):通用,未知
                            【特点】无视护甲(因为不是普通伤害类型), 与是否计算法抗无关,如果攻击类型不是魔法则无视魔法免疫,如果攻击类型是法术则可以伤害虚无单位。
【攻击类型】:攻击类型共75+1+1)种,分为3类,物理攻击类,魔法物理攻击类,法术。
         [物理攻击类(5):普通,穿刺,攻城,英雄,混乱
                   【特点】无视法抗。
         [魔法物理攻击类(1):魔法-攻击类型
                   【特点】需要计算 魔攻法抗。可以伤害虚无单位,无法攻击魔免单位(可以在平衡常数里修改为允许攻击魔免单位)[代表对战中,女巫等法师的物理攻击。
         [法术类(1):法术
                   【特点】需要计算 法术魔抗。

评分

参与人数 2威望 +2 GA币 +30 印象 +3 互助 +1 收起 理由
希瓦 + 2 + 30 + 1 现在写教程的人越来越少了呢,望继续努力~~
asd8645123123 + 3 不错的研究文

查看全部评分

 楼主| 发表于 2012-12-16 13:00:56 | 显示全部楼层
本帖最后由 god_mukin 于 2013-1-1 14:31 编辑

【第二部分-摸清内部运行步骤】
         UnitDamageTarget函数调用后,设置 伤害Real 为函数调入的伤害值, 魔攻法抗Real为单位的 魔法攻击类型抗性, 法术法抗Real 为单位的 法术攻击类型抗性。                  
         [第一步根据 攻击类型,护甲类型对 伤害Real 进行调整。
         [第二步检测是否计算护甲.
                            如果( 伤害类型 == 普通 ) Then ( 根据 护甲伤害减少 伤害Real 进行调整 )
         [第三步检测是否伤害魔免单位,或者虚无单位
                            如果( 单位是魔法免疫 )Then ( 判断伤害 是否 无视魔免 )
                                               如果( 攻击类型==魔法 OR 伤害类型==魔法类13 )Then( 此类伤害 不能伤害魔免单位, 伤害Real = 0 )
                            否则如果( 单位是 虚无状态 )Then(判断伤害 是否 伤害虚无单位)//虚无无法与魔免同时存在
                                             如果{( 攻击类型 == 魔法) OR ( 伤害类型 == 魔法类13种 )OR [ 攻击类型==法术 AND 伤害类型== 通用类2 ]} Then( 设置 伤害Real * 虚无加成系数 )否则(说明不能伤害虚无单位 伤害Real = 0 )
         [第四步计算法抗
                            如果( 攻击类型 == 魔法 ) Then ( 伤害Real = 伤害Real * (1 –魔攻抗性Real )
                            否则如果( 攻击类型 == 法术 ) Then ( 伤害Real = 伤害Real *(1- 法术法抗Real)                  

补充:是否伤害虚无单位与游戏平衡常数有关,如果设置攻城伤害类型对虚无单位的伤害为100%,则攻城类型-魔法类13种伤害也能造成伤害.
回复

使用道具 举报

 楼主| 发表于 2012-12-16 13:01:08 | 显示全部楼层
本帖最后由 god_mukin 于 2013-1-1 14:46 编辑

【第三部分-总结】
[所有组合] 下面写出常见的常用的组合方式
从目标看,是否计算护甲,是否计算法抗,是否无视魔免,是否伤害虚无,共2*2*2*2=16种。其中有些种类不可能存在,如不可能既伤害虚无又不计法抗。
       补充:如果更改平衡常数表可以既伤害虚无又不计法抗,比如 攻城-火焰,只需设置 攻城类型对虚无伤害不为0即可

        从结果看,由3种攻击类型和4种伤害类型组合,共12种。
        最后总结得到8种情况。
        [计算护甲,无视魔免,不能伤害虚无,不计法抗] 物理攻击-普通伤害
        [计算护甲,无视魔免,不能伤害虚无, 计算法抗] 法术攻击-普通伤害
[计算护甲,不能伤害魔免,伤害虚无,计算法抗] 魔法攻击-普通伤害
        [不计护甲,不能伤害魔免,不能伤害虚无,不计法抗] 物理攻击-魔法伤害
        [不计护甲,不能伤害魔免,伤害虚无,计算法抗] 魔法攻击-魔法伤害, 魔法攻击-加强伤害, 魔法攻击-通用伤害, 法术攻击-魔法伤害
        [不计护甲,无视魔免,不能伤害虚无,不计法抗] 物理攻击-加强伤害, 物理攻击-通用伤害
        [不计护甲,无视魔免,不能伤害虚无, 计算法抗] 法术攻击-加强伤害
        [不计护甲,无视魔免,伤害虚无, 计算法抗] 法术攻击-通用伤害

神圣伤害:混乱攻击,加强伤害。这并非真正无敌的神圣伤害,因为 伤害虚无与不计法抗无法同时存在。混乱攻击,所以不计算法抗,并且护甲类型无影响(混乱攻击一般都是设为100%),加强伤害所以无视魔免,不计护甲。所以是写多少,打多少。不过不能打虚无单位。
               
附言:还有很多很细节的测试,比如,当单位身上有灵魂锁链技能时,受到 任意攻击类型-灵魂锁链伤害类型 伤害时就不分摊伤害…!!!而且单位既是虚无又有灵魂锁链BUFF时,所有魔法类13种伤害类型搭配任意攻击类型(不只是法术魔法)都可以伤害虚无单位,不过伤害量很小.(应该是伤害连续分摊的结果吧).不过,现在先不研究这个了…
回复

使用道具 举报

发表于 2012-12-18 20:49:10 | 显示全部楼层
不错的研究文,写得很详细呢
但是有一些小错误需要补充一下:
存在既伤害虚无又不计法抗的伤害,但是需要在平衡性常数里面设置
默认除“法术攻击”和“魔法攻击”之外的伤害对虚无单位造成0伤害,但是这是可以修改的

点评

嗯  详情 回复 发表于 2012-12-18 21:26
回复

使用道具 举报

 楼主| 发表于 2012-12-18 21:26:32 | 显示全部楼层
美味豆沙包 发表于 2012-12-18 20:49
不错的研究文,写得很详细呢
但是有一些小错误需要补充一下:
存在既伤害虚无又不计法抗的伤害,但是需要 ...

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 18:31 , Processed in 0.296959 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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