游侠NETSHOW论坛

标题: 革新PK: 战法与计略的成功率以及暴击率计算 [打印本页]

作者: sergi    时间: 2008-12-24 09:53:38     标题: 革新PK: 战法与计略的成功率以及暴击率计算

暴击率计算
当发动战法的系统不等于4(计略), 才会进行暴击率计算,
即使修改去掉此限制, 计略暴击后的伤害量也没有变化, 所以不必修改.
判断暴击的数据计算如下:

(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和) + X + 战法代号 = A

X是[年份 + 4Ch]所记载的数据, 意义未知.
A在函数中计算出一个数据B(计算结果除以100后的余数)
00543A53: 除数(100)

攻方最高熟练 * 0.01 + 攻方最高武力 * 0.1 + 1 = C

如果C大于B, 则发动暴击
当守方有抵抗技术时, 上述计算被跳过, 不会发生暴击.
005439A9: 原值74h改为EBh, 不论是否有抵抗技术, 都会进行暴击判断的计算.

成功率计算
如果战法代号是23, 28(鼓舞治疗), 会跳过计算直接判定成功.
判断成功率的数据计算如下:

(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和) + 战法代号 = A

A在函数中计算出一个数据B(计算结果除以100后的余数)
00543892: 除数(100)

成功率判断有两个阶段, 第一阶段是对双方最高能力值, 第二阶段是对双方最高熟练度
一般物理战法的第一阶段必定判断为成功, 进入第二阶段.
当战法是混乱时, 会先判断守方是否有三河魂, 有则跳过计算直接判定为失败.
至于计略, 第一阶段判断方式如下:

(攻方最高智力 - 守方最高智力 + 25) * 2 = C

如果C大过B, 再进行双方熟练判断. 如果C小于或等于B则判定被阻挡.
第二阶段判断方式如下(战法计略共通):
1: 如果攻方熟练大于或等于守方熟练

守方熟练 * 0.01 + [esp + 1C]/3 = D

[esp + 1C]是寄存器里的数据, 来源与意义未知.
如果D超过B, 则判定被阻挡, 反之则成功
2: 如果攻方熟练小于守方熟练

(守方熟练 - 攻方熟练) * 0.1 = E

如果E超过B, 则判定被阻挡, 反之则成功
作者: xmengmeng    时间: 2008-12-24 11:03:27

暴率看不懂.是不是计算后判定发动机率问题??而不是固定的.上面算法可以算出机率还是固定数?有个例子就好看明白了.
作者: karlsars    时间: 2008-12-24 11:32:51

应该不是机率 而是根据战法熟练度以及武勇计算出参数C
然后根据年月日和一些乱七八糟的东西生成一个伪随机数B
C和B比较 C大于B则暴击,否则不暴击
我是这么理解lz所发的,和游戏经历也相似
有时怒骂不中,怎么读档都不中,读档后等个几天,有可能中,改变这个等的天数,只要我方智力还可以,一般靠s/l总能中,初期围城一般靠这招防止骂人不成功浪费时间
作者: yuangyuang    时间: 2008-12-24 14:30:00

虽然不太懂,但这都可以研究出来,lz太强了
作者: windy8718    时间: 2008-12-24 17:47:02

楼主,想请教一下,是不是新武将生姬继承父亲适性和熟练度,我试了好几次,只要是新武将的编号就肯定直接程序报错退出?
作者: linlei1234    时间: 2008-12-24 18:38:08

原帖由 sergi 于 2008-12-24 09:53 发表
(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和) + X + 战法代号 = A

X是[年份 + 4Ch]所记载的数据, 意义未知.
A在函数中计算出一个数据B(计算结果除以100后的余数)
00543A53: 除数(100)

攻方最高熟练 * 0.01 + 攻方最高武力 * 0.1 + 1 = C

如果C大于B, 则发动暴击


先说这个。
(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和)  + 战法代号是一个确定的数,每天加1,所以这个数除100得到的余数也固定,而且每天加1
攻方最高熟练 * 0.01 + 攻方最高武力 * 0.1 + 1 = C这个数字也是个固定的数。
而 X 是[年份 + 4Ch],如果4CH是一个固定的值,那么会出现的情况就是在同一年的连续的100天里,某天以前,不论哪天放战法都是暴击,那天之后都不暴击。
这个显然不对。
这说明4CH里的值是一个变数,因此他怎么变才是关键。

[ 本帖最后由 linlei1234 于 2008-12-24 22:17 编辑 ]
作者: linlei1234    时间: 2008-12-24 18:54:17

原帖由 sergi 于 2008-12-24 09:53 发表
(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和) + 战法代号 = A

A在函数中计算出一个数据B(计算结果除以100后的余数)
00543892: 除数(100)

成功率判断有两个阶段, 第一阶段是对双方最高能力值, 第二阶段是对双方最高熟练度
一般物理战法的第一阶段必定判断为成功, 进入第二阶段.
当战法是混乱时, 会先判断守方是否有三河魂, 有则跳过计算直接判定为失败.
至于计略, 第一阶段判断方式如下:

(攻方最高智力 - 守方最高智力 + 25) * 2 = C

如果C大过B, 再进行双方熟练判断. 如果C小于或等于B则判定被阻挡.
第二阶段判断方式如下(战法计略共通):
1: 如果攻方熟练大于或等于守方熟练

守方熟练 * 0.01 + [esp + 1C]/3 = D

[esp + 1C]是寄存器里的数据, 来源与意义未知.
如果D超过B, 则判定被阻挡, 反之则成功
2: 如果攻方熟练小于守方熟练

(守方熟练 - 攻方熟练) * 0.1 = E

如果E超过B, 则判定被阻挡, 反之则成功


再说计略。

(年份 * 12 + 月份) * 30 + 日期 - 31 + (双方队长的武将代号和) + 战法代号是一个确定的数,所以B也是个确定的数,每天加1

在熟练度不变的情况下(守方熟练 - 攻方熟练) * 0.1 = E也是个固定的数字,也就是说,当攻放熟练度小于守放时,若E刚好大于B,那怎么S/L都没用了,因为B每天都在涨要等到E小于B要好几十天。(这个观点有待验证,因为平时放计略时没注意过双方熟练度,所以不知道到底对不对)

现在来看看比较夸张的一条:
如果攻方熟练大于或等于守方熟练

守方熟练 * 0.01 + [esp + 1C]/3 = D,D超过B, 则判定被阻挡

如果攻方熟练小于守方熟练

(守方熟练 - 攻方熟练) * 0.1 = E,E超过B, 则判定被阻挡


我们假设守方熟练度是500,那么我么应该怎么办呢?
如果我们派一个熟练度大于500的部队去,那么D=5+[esp + 1C]/3 > 5
而如果我们派一个熟练度499的部队去,那么E=0.1
而D和E都要小于B才能不被挡,这时反而是熟练度低的部队更计略更容易成功

[ 本帖最后由 linlei1234 于 2008-12-24 18:56 编辑 ]
作者: 六文钱早云    时间: 2008-12-24 21:10:15

革新被研究的越来越彻底了
作者: crosier    时间: 2008-12-24 21:43:36

支持研究。感觉天数最重要,其次熟练度、武力、智力等。
作者: lxm9316    时间: 2008-12-25 00:34:43

嗯,支持研究,根据我的经验,暴击和计略成功率应该没有随机的参数,因为是否暴击和策略是否成功,是和挖人是否降忠诚一样,开局就决定了的。如果这一天你放战法成功了,那么无论怎么S/L,只要相关的因素没有改变,都会成功,并且每次开局依然是这样
作者: sergi    时间: 2008-12-25 04:51:32

有些误会之处, 在下作些说明.
X = [年份 + 4Ch], 这是指记录年份的内存地址+4Ch之后, 该内存地址所存放的数据是X.
另外, 用A计算出B的函数, 并不是直接把A除以100, 而是先经过一番计算, 再将结果
除以100. 这些计算使得A与B之间似乎没有关连, 给人随机的错觉, 但其实同样的A
必定得到相同的B, 所以是伪随机. 也因此可知, B并不因为A加1而随之加1.
[esp + 1C]是指寄存器esp里的数+1Ch后当做内存地址, 该地址所存放的数据,
目前看过的例子是0. 多看几个例子应该会有变化. 还有, 所有计算步骤后都会取整, 没有小数.

[ 本帖最后由 sergi 于 2008-12-25 06:56 编辑 ]




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2