tuocha 发表于 2014-10-5 10:11:42

伤害计算方法的误区

我在这里给大家举一个例子:一个近攻1,对步兵克制10000的兵,打任何东西(正常单位,建筑,英雄)一下即死。
为什么呢?不是说任何单位的未定义防御值的防御类型,克制对其无效吗?
看看那个计算公式(我记得一个帖子里有),是(每个攻击减防御之和)×地形系数,每项最低为0,地形系数我未仔细研究。
但是若像那篇帖子说的是无意义,那么这个公式从何计算?
此时伟大的AGE又出场了。

atila 发表于 2014-10-5 12:11:55

本帖最后由 atila 于 2014-10-5 20:06 编辑

楼主的发现很惊人,值得置顶,如果以前没有人发现的话

首先,解释楼主的一个概念:未定义防御值的防御类型
来举个例子。比如,大家都知道骆驼骑兵对骑兵有附加伤害,但甲胄骑兵却可以抵消一部分伤害,原因如下:也就是说,甲胄骑兵可以抵消12点对骑兵的附加伤害。
而步兵对骆驼骑兵,弓箭手对骆驼骑兵,他们的附加伤害防御值都是没有定义的,也就是默认值。
以前我们认为,这个默认值是无穷大,也就是说步兵完全不会受到骆驼骑兵的加成。但实际上,这个默认值只有1000。只要我们把骆驼骑兵对骑兵的附加攻击修改到,比如,2123,就可以对所有对骑兵类型附加伤害未定义防御兵种(比如步兵,弓箭手)造成2123-1000=1123点附加伤害,可以秒杀所有对骑兵类型附加伤害未定义防御的兵种。这就是楼主主楼所说的意思。
那么,这个1000是怎么得的呢?就是由这两个数值决定:
而具体的运算方法是:1.将两个框内的数值转化为二进制。这里面涉及到负数补码的表示,的确不好解释,就不解释了。
2.将两个二进制数,前一个接到后一个的末尾。比如,-24的原码是00011000,反码是11100111,补码(即其在计算机内的存储,运算形式)是11101000;而3的补码是00000011
3.将接到一起后得到的数换算成十进制:如上面的例子,两个接到一起后是00000011 11101000,换算成十进制就是1000。
综上,修改这两个框内的数值,就可以修改那个默认值。

下面是实例,实验对象是掷矛战士,步弓手,冲车。
1.将掷矛战士对“冲车类”的附加攻击改为4000。很明显,大部分单位对冲车类的附加伤害防御值都是没有定义的。根据传统理论,掷矛战士只有打冲车时会一击必杀,打其他单位时都是原有的伤害。

2.实验。发现掷矛战士不仅秒杀了冲车,还秒杀了敌人其他的单位!

3.下面,我们来修改弓箭手的附加防御默认值。

我把第二个数修改成了15,即1+2+4+8。那么接到一起的数就是00001111 11101000,即1000+1024+2048=4072>4000,附加伤害防御值的默认值变为了4072。理论上来讲,掷矛战士不能再秒杀弓箭手了。
4.实验。的确,掷矛战士对弓箭手的伤害变回了原来的数值。

最后来总结一下:附加伤害防御的默认值初始设定是1000,而其数值可以通过改变这两个数值来改变。具体改成多少,需要进行二进制的计算。
最后,附上实验的data文件和scx文件。有兴趣可以验证一下,但不要忘了备份原来的data文件(版本是征服者1.0c及1.4)

tuocha 发表于 2014-10-5 10:23:00


看到了吗?
所以一个单位如果某类型未定义防御值,即为这个双字所代表的数值。(承受所有附加的这两个为0)
(附:双字:用两个字节长表示整数的类型,相当于c++的int,pascal的integer(前面这两句当我白说),表示范围为-32768~32767(即 -2^15~2^15-1 ))
然而这两个又是如何计算的呢?
这就要扯到二进制了。在此不多讲以免有人听不懂。

tuocha 发表于 2014-10-5 10:31:02

本帖最后由 tuocha 于 2014-10-6 17:52 编辑


看出这三个数有什么联系了?(上面一行是十进制,下面一行是二进制)
就是把后一个数接到前一个前面。
所以,一般单位都是-24和3,你们不信把单位的3或4防御类型删掉,就会变成诸如0+1000,1+999,2+998之类的显示。
但是像灰狼柯鲁之类的这两个都是0,所以就会出现承受所有附加的状况。

tuocha 发表于 2014-10-5 10:39:31

关于二进制:计算机里的数都是用补码存储的。更多:请百度“反码”。不想写了。我昨天做了100多个仰卧起坐你们就原谅我吧

tuocha 发表于 2014-10-5 10:45:36

总算找到一个好例子了。

这难道不是一个好例子么?
而且帝国自带,更有说服力。

tuocha 发表于 2014-10-5 10:52:32

@静默男爵
求置顶,各种求。

正直者必死无疑 发表于 2014-10-5 10:54:21

本帖最后由 正直者必死无疑 于 2014-10-5 11:08 编辑

你是指未定义防御类型的单位对附加攻击的防御力为1000?

AMO 发表于 2014-10-5 11:13:21

本帖最后由 静默男爵 于 2014-10-5 16:32 编辑

楼主请原谅我……我真的看不懂呀QAQ!什么叫“对步兵克制10000”呢?“任何单位的未定义防御值的防御类型”又是什么呢?“那个计算公式”又是哪个公式呢?我真的很糊涂呀QAQ……

诸如此类,如果不给出详细的解释与有据可查的事实,那么我相信,很多人会和我一样看不懂的吧……我相信楼主的理论应该是不错的,但是如果不能够清楚地表达,即使置顶,又会给阅读者带来什么益处呢~?

这是一篇很好地交流贴,但是如果想要申请加精和置顶的话,至少也要把诸如“(这程序是我自己写的,我牛逼吧)”之类的话删掉吧……

内容鉴定完成~~~鸣谢@atila

四个圈 发表于 2014-10-5 11:26:05

不明觉厉

atila 发表于 2014-10-5 14:42:06

本帖最后由 atila 于 2014-10-5 15:19 编辑

tuocha 发表于 2014-10-5 10:45
总算找到一个好例子了。

这难道不是一个好例子么?

我来注解一下:
由于RFSWD没有定义防御类型,包括“基础近身攻击”和“基础远程攻击”!
所以,他对所有攻击的防御值都是默认值,即1000


黯然SAMA 发表于 2014-10-6 14:25:18

好忒子

tuocha 发表于 2014-10-6 17:53:40

正直者必死无疑 发表于 2014-10-5 10:54
你是指未定义防御类型的单位对附加攻击的防御力为1000?

是。

tuocha 发表于 2014-10-6 18:10:37

本帖最后由 tuocha 于 2015-3-28 15:52 编辑

静默男爵 发表于 2014-10-5 11:13
楼主请原谅我……我真的看不懂呀QAQ!什么叫“对步兵克制10000”呢?“任何单位的未定义防御值的防御类型” ...
对步兵克制10000即为“攻击类别1,10000”。未定义防御值的防御类型就像步兵的骑兵防御属性一样是没有定义的。即为未定义,与防御为0不同。若未定义相当于我在2楼所提的两个数组合成的数值。但理论上未定义的攻击是负值或无,不然任何兵打冲车都扣至少3滴血。计算公式:总伤=【(类别1的攻击-类别1的防御)+(类别2的攻击-类别2的防御)+……+(类别X的攻击-类别X的防御)】*(1+地形+悬崖)
注:小括号计算值若小于等于0则该部分为0;全式若小于等于1则伤害为1;生命值可以有小数;地形:攻击方若高于防御方则为0.25,等于为0,低于为-0.25(无论多高或多低);悬崖同地形,但未测试地形高悬崖低或相反。(原来的公式没有地形这一条)
如:火枪在高1格高地打0防叉子:【(17-0)+(10-0)+(1-0)】*(1+0.25)=28*1.25=35高2格同理为35。
若低一格:【(17-0)+(10-0)+(1-0)】*(1-0.25)=28*0.75=21
同时也非常感谢10楼的测试和解说,使我的理论更通俗易懂一些。由于我学OI多年,可能会带上一些专用术语,希望谅解。
若有不懂请再提问,我会详细解答。谢谢评分。
我明天早上就要上学了,还要月考,希望有问题尽快问。(我们是寄宿学校,没有电脑玩)-----------------------------以上为2014年10月6日之内容-----------------------------
-----------------------------以下为2015年3月28日之内容-----------------------------
经寒假,研究成果为:
总伤=∑(攻击者拥有的攻击类别之攻击值-被攻击者拥有的对应防御类别之防御值)*(1+地形+悬崖)
若被攻击者无对应防御类型,则为2楼图中“未知20”两空以3楼方法组合之值。

atila 发表于 2014-10-6 21:38:54

本帖最后由 atila 于 2014-10-6 22:25 编辑

tuocha 发表于 2014-10-6 18:10
对步兵克制10000即为“攻击类别1,10000”。未定义防御值的防御类型就像步兵的骑兵防御属性一样是没有定义 ...
关于近战士兵打冲车造成额外三点伤害,和攻击类型没有关系:

单纯因为冲车的“基本近身防御”是-3而已。


AMO 发表于 2014-10-7 16:02:48

tuocha 发表于 2014-10-6 22:10
对步兵克制10000即为“攻击类别1,10000”。未定义防御值的防御类型就像步兵的骑兵防御属性一样是没有定义 ...

所以,我的意思是,你在发表帖子的时候就应该像2L一样采用逻辑性较强的语言与论证,而不是让你解释一遍……
楼主可以在原帖进行编辑。

Boston30 发表于 2014-10-7 19:35:37

好帖子,学习。

tuocha 发表于 2014-10-11 10:22:04

静默男爵 发表于 2014-10-7 16:02
所以,我的意思是,你在发表帖子的时候就应该像2L一样采用逻辑性较强的语言与论证,而不是让你解释一遍… ...

谢谢指教。

tuocha 发表于 2014-10-11 11:05:16

atila 发表于 2014-10-6 21:38
关于近战士兵打冲车造成额外三点伤害,和攻击类型没有关系:

单纯因为冲车的“基本近身防御”是-3而已 ...

我的意思是未定义攻击类型的攻击应为负无穷大或直接不计算,否则远程兵打冲车也会加3伤害。

qs 发表于 2014-10-13 00:32:38

这个发现对建立帝国新的相克体系,以及攻防属性进一步合理复杂化有重大意义啊
页: [1] 2
查看完整版本: 伤害计算方法的误区