注册 | 登录

游侠NETSHOW论坛





查看: 56008|回复: 11
打印 上一主题 下一主题

[原创] 【光荣游戏工作组】天道,战法杀伤力公式! [复制链接]

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
跳转到指定楼层
楼主
发表于 2009-9-13 08:34:52 |显示全部楼层 |倒序浏览
经过1周的努力,前后测试了约2000组数据,在adam5616的修改教程的帮助下,又从ctcalways处得到了一些灵感后,我终于完成了天道的战法杀伤力公式!
在此先感谢adam5616和ctcalways的帮助。

只关心结果的可以只看一楼的公式
二楼是一些简单的验证。
三楼开始是推导过程。

简单说明:公式中的勇武为部队中的最高勇武勇武小于24的一律按24算,兵力为部队总兵力,但是适性系数为战法释放者的适性所对应的系数。
注意:公式中,每完成一步乘法后都要对得到的中间数据进行取整(完成除法后不用)。也就是说: “ * ” 这个符号不是传统意义上的乘号,而是相乘后取整。由于每个地方都要取整,因此如果把取整写上去,公式就太长了,所以省略了。


最终伤害 =MIN( [(勇武/10) * (勇武/10) +45 ]* (战法威力 * 科技加成 * 连携系数) * 适性系数 * 0.3 * (0.3+兵力/100000) * 敌队状态系数 * (敌阵型系数+我方兵强或之备系数) , 3 * 兵力)

解释:
MIN(,): 表示取括号中两个数中较小的那个,即伤害不能大于兵力的3倍
连携系数:2连为1.25, 3连为1.5, 4连为1.75, 5连为2  (param里的位置:126)
适性系数:D为1.1, C为1.2, B为1.3, A为1.4, S为1.5 (param里的位置:127-131)
敌队状态系数: 动摇为1.2, 混乱为1.4, 恐慌为1.6
敌阵型系数: 衡軛为0.7, 其他为1
我方兵强系数: 兵强或xx之备且目标不是城防时为0.5, 金刚之备或兵器强化且目标是城防时为0.6(感谢fall_ark提供的测试结果),其他为0.

公式简化:
设 Y=floor(勇武 * 勇武/100 )
W=floor(战法威力×科技加成×连携系数)
则:
最终伤害=MIN((Y+45) * W  * 适性系数 * 0.3 *(0.3+兵力/100000)* 敌队状态系数 *(敌阵型系数+我方兵强系数) ,  3 * 兵力)

[ 本帖最后由 linlei1234 于 2009-10-5 21:15 编辑 ]
已有 1 人评分金钱 收起 理由
我没钱啊 + 60 + 5 文章不错,继续努力!

总评分: 金钱 + 60  + 5   查看全部评分

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
沙发
发表于 2009-9-13 08:35:04 |显示全部楼层
简单的验证。
先用他人的数据来验证。
在帖子:http://game.ali213.net/viewthrea ... p;extra=&page=1
先取29楼的的第二个数据,也就是,兵力为7186,勇武为85,战法为枪三,释放者吉良亲贞适性为A

因此,Y=floor(85×85/100-5)=67;
W=28

最终伤害=(67×28×1.4×0.3+15×28×1.4)×(0.3+0.07186)

67×28×1.4=2626.4,取整后为2626,因此
最终伤害为:(2626×0.3+588)×0.37186
2626×0.3=787.8 取整后为787
因此,最终伤害=(787+588)×0.37186=511.3075,取整得511,完全符合ctcalways 的测试结果。

再来看70楼adam5616的测试数据,adam5616把元亲的勇武改为1,适性改为D,兵力也改到了409600,我们来看看出现如此夸张兵力时公式结果又如何。
勇武为1小于24,因此按24算,战法算鬼枪
Y=floor(24×24/100-5)=0
w=38

最终伤害=15×38×1.1×(0.3+4.096)=627*4.396=2756.292,取整得2756,完全符合!

最后再来一组我自己的数据,勇武1 适性D 枪一 敌为衡軛阵型,兵力1000
无足强伤害:85,有足强:146
15×24×1.1×0.31=122.76
122×0.7=85.4 符合85的伤害
122×(0.7+0.5)=146.4,也符合146的伤害。

其他关于连携,敌带状态的情况,有兴趣者可以自行测试。

[ 本帖最后由 linlei1234 于 2009-9-13 09:46 编辑 ]

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
板凳
发表于 2009-9-13 08:35:37 |显示全部楼层
接下来说说公式的推导过程。
大家看到如此复杂的公式,就应该能想到,这个过程是极其曲折的。。。。


最初拿到天道试玩开始测试战法伤害时,本以为应该是一个和革新差不多的公式,因此应该不难测试出。
试玩后很快大家就能发现,天道的战法威力与兵力相关了,因此我最先测试的就是兵力于伤害的关系。

首先就拿着元亲在不同兵力下去放鬼枪,结果如图1左边所示,明显的看到,当兵力大于某个值时,伤害和兵力成正比,而小于某个值时也成正比但是系数不一样。
红色的点的系数非常明显,就是伤害是兵力的3倍,因此把蓝色的点拿来线性拟合,得到图1的右边图,可以看到线性性非常好。

因此,最初的公式即为:伤害=兵力>c时为:a*兵力+b, 小于c时为: 3*兵力
a,b,c显然应该是由勇武,战法威力等其他因素来确定。

[ 本帖最后由 linlei1234 于 2009-9-13 10:08 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
地板
发表于 2009-9-13 08:35:57 |显示全部楼层
测完兵力后,由于革新的勇武部分是(勇武+45),而战法威力部分则是简单的乘,因此猜测天道也应该是勇武部分比较复杂而战法威力是简单的相乘。所以下一步测战法威力。
因此元亲随便组了个人,就开始测试了。

兵力 :12121 11666 10703 9469 8999 7510 6817 6233 5903 5588 5387 4719
枪1:  429,    424,    414,   402,  397,  382,  375,  369,  365,  362, 360, 353
鬼枪: 849,    840,    820,   796,  786,  756,  742,  730,  724,  717,  713, 700

结果却出乎意料,可以看到,鬼枪伤害基本是枪1的两倍,但他们的威力却是38:24
由于当时两人是组一队的,因此想当然的认为其他系数应该和革新一样取队伍最高,那么这个2倍伤害是哪里来的呢?
我一度想到是(38×38×38)^1/2 : (24×24×24)^1/2.......

直到某次,我无意间放了个齐射1,发现伤害居然比枪一小好多,我才意识到,是适性的原因!
简单测试后发现:原来,天道的适性,是按战法的释放者来算的,而不是按全队最高。。。。

解决适性问题后,适性和战法威力与伤害的线性性就很明显了。
即 伤害= 兵力>c时,适性×威力×a×兵力+b , 小于c时为3×兵力

而且,我发现,战法威力不同,勇武不同,b也会不同,因此接下来测试b与威力适性的关系。

用鬼枪,86勇时,我发现兵力208和203是伤害都是:  609,而兵力202时威力就是606了,因此这个分界线c=202,而且,看起来,之后的高兵力导致的伤害都是在606之上再加一个数字。而且之前的兵力测试的线性拟合的截距也是606附近
为了验证这个,我又用枪一,42勇武测试,发现54个兵是伤害是160,53个是159,而且兵力高起来后伤害似乎都是在159上加一个数字,线性拟合后的截距也在159附近。
因此考虑到舍入误差的原因,猜测公式为:
伤害=min(适性×威力×a×兵力+3×b, 3×兵力)

而在继续测试了枪二,枪三后,我发现                                                                                                                                                                              
适性×威力×a=b/10000                                                                                                                                                                                          
因此,公式立刻变为:                                                                                                                                                                                            
伤害=min适性×威力×(a×兵力+30000×a, 3×兵力)                                                                                                                                                              
这样就只有一个系数了,而且也只剩下一个影响因素了:勇武。                                                                                                                                                        
                                                                                                                                                                                                               
至此我才用了一天的时间,本以为两天就能测出公式,没想到这个勇武卡了我一个礼拜!!!

PS:这时我还不会对天道进行修改,因此每个测试,为了让兵力出现我想要的数值,都要S/L 好久才行。

[ 本帖最后由 linlei1234 于 2009-9-13 12:50 编辑 ]

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
5#
发表于 2009-9-13 08:36:08 |显示全部楼层
要测试勇武和系数a的关系,就要在不同勇武下得到a
得到a的办法有两个:1。测一堆数据,线性拟合得到斜率和截距。 2. 测试出不同勇武下的3倍兵力临界点。
虽然我这时还不会修改,但是我依然觉测临界点比较简单。
于是利用能力日。把两个会枪一,适性c,勇武42和69的人,刷勇武到108
得到如图2所示的一些点,线性拟合后发现显然无线性性,猜测是2次函数或指数函数。
最后拟合发现2次函数可能性最大。因次以2次函数为标准,进行多次测试试图确定各项系数。
最后,由于缺少高勇武和低勇武的数据,而停滞不前。
                                 
之后,在研读adam5616的帖子后,用上了修改器。修改器给了我非常大的帮助,我认为如果没有修改器,几乎不可能测出公式。。。。
                                 
用修改器把勇武从1改到120,立刻发现小于24勇武的一律按24算
兵力定为1000,勇武从24到120,得到图3所示,看起来很像2次函数,但是放大左下角后发现,有大量的奇点。
2次函数怎么也不会产生这种曲线形状,因此又一次毫无头绪。
                                 
直到某日,我看到了ctcalways的帖子,从他的取整取余中得到了灵感,立刻用勇武×勇武/100取整来测试,得到图四,发现所有的奇点都完美的拟合。
因此确定勇武函数即为此形式。由于显然随着勇武的提高,后续勇武对应的值都是24勇武对应值再加上一个增量,因此
                                 
公式就变为: 威力×适性×(24勇武对应的值+(勇武×勇武/100-5)*a)*(30000+兵力)
                                 
看起来,还有一步就可以完成公式了。

[ 本帖最后由 linlei1234 于 2009-9-13 11:25 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
6#
发表于 2009-9-13 08:36:31 |显示全部楼层
最后的参数,也是最痛苦的参数。
由于有了修改器,使得我可以消除兵力的因素。
我分别用100兵力和1000100兵力来测试24到120勇武对应的伤害,把得到的值相减后,就能得到100万兵能产生多少伤害。

如:
枪1,适性D
勇武 100兵 1000100兵  差值
24   119    4079           3960
25   121    4151           4030
26   121    4151
27   123    4233           4110
28   123    4233
29   126    4316           4190
30   128    4398
31   128    4398
32   130    4480
33   130    4480
34   133    4563
35   135    4645
36   135    4645
37   138    4728
38   140    4810
39   142    4892
40   145    4975
41   145    4975


之所以选100万,就是因为差值的末位是0,说明用这个差值可以精确到10万分之1。
而之所以不用更大的数,是因为再大上去,伤害会溢出,变为0。。。。。。

在差值减去24勇武对应的基础值后,得到:70,70,150,150,230,310,310,390,390。。。。。。这样的一组数
除了第一个数字,这组数看起来像是随着勇武函数递增,等差为80的一组数。用拟合来看,也具有极强的线性性,且斜率为(0.3×战法威力×适性系数)
但是当勇武增加到42时,又出现了一个值增加70的项!

为此,我对增加的量做了一个比较,刨除一切外在因素后,得到本质的及其逆天的,不和谐的图5!
图5中间的那个塌陷(其实是前一个数字凸起了!)简直让我完全没有想法。
我首先想到是的由于舍入误差,导致了这个塌陷!但是经过无数次尝试后,都没有好的结果,无论如何也出现不了这样形状的曲线!


在数天的苦思冥想,研究观察后,我突然发现,凸起的地方对应的勇武函数值是:25,而勇武函数值没有50,75,100,125,150,175,200.。。。这些25的倍数,25的倍数只有勇武55对应的,55×55/100-5=25!  修改公式后就是55×55+45=75,这个25的倍数,且勇武函数依然没有其他的25的倍数。
这让我想到了:双次舍入!
由于25乘4可以得到100,这意味着他即使被舍入两次,也依然能保持原始值,而其他5的倍数的数,可以抵抗第一次舍入,但是在第二次舍入时,就会改变!

于是,机械的测试开始了:勇武,战法威力,适性系数,以及0.3,这4个值不停的交换顺序相乘,在不同的位置进行舍入,在不同的数位进行舍入。
最终,终于得到了正确的顺序,即:floor(floor(勇武函数×战法威力×适性系数)×0.3)。

接下来的事情就很简单了,测试连携,抵抗,强化,科技的系数过程中,发现均有舍入,简单的说,所有的系数相乘后都要取整!
因此最终公式,先乘谁后乘谁基本都是定死的(除了一些相乘后依然是整数的,那么可以交换一下,因为无舍入)!

[ 本帖最后由 linlei1234 于 2009-9-13 12:46 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
7#
发表于 2009-9-13 11:30:15 |显示全部楼层
原帖由 Sean_CGOL 于 2009-9-13 10:44 发表
最终伤害 = INT(勇武的平方/100+45)×(兵力+30000)×0.000003×战法威力×科技加成×连携系数×适性系数×敌队状态系数×(敌阵型系数+我方兵强系数)

我把公式再简化了一点 ...


我不这样简化是有原因的
因为我说了,每次乘法后都要取整!

按你这样,如果45×战法威力×科技加成×连携系数的到10.5
(勇武的平方/100)×战法威力×科技加成×连携系数也得到10.5
那么最终用你的公式会得到21,而我的则是20! 我错了,的确应该是21,应该把勇武和45放一起。。。

我的公式,几乎每个因子都是不能交换位置的(虽然乘法有交换律,但是取整是没有交换律的,我只是因为所有的地方都要取整,所以直接省略了取整,那些乘号并不是真正的乘法),正因为如此,才让我测试了1个礼拜!!!!!!!!!!

[ 本帖最后由 linlei1234 于 2009-9-13 12:50 编辑 ]

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
8#
发表于 2009-9-13 11:34:40 |显示全部楼层
原帖由 Sean_CGOL 于 2009-9-13 10:44 发表
最终伤害 = INT(勇武的平方/100+45)×(兵力+30000)×0.000003×战法威力×科技加成×连携系数×适性系数×敌队状态系数×(敌阵型系数+我方兵强系数)

我把公式再简化了一点 ...


比如勇武54,适性D,兵力100,枪1
用你的简化公式算出来就是176
而实际是178!

我看错了,的确是176, 我错了,555555555

[ 本帖最后由 linlei1234 于 2009-9-13 12:40 编辑 ]

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
9#
发表于 2009-9-13 12:36:05 |显示全部楼层
原帖由 Sean_CGOL 于 2009-9-13 10:44 发表
最终伤害 = INT(勇武的平方/100+45)×(兵力+30000)×0.000003×战法威力×科技加成×连携系数×适性系数×敌队状态系数×(敌阵型系数+我方兵强系数)

我把公式再简化了一点 ...



我又去验证了一遍,你是对的
应该在勇武部分写成(勇武函数+45),而不是我写的那样,sorry!
我之前测试的不够仔细,我得改一下。

不过后面的部分不能按你写的那样,100000不能乘到兵力里面去,不然取整会有问题,而且乘法的顺序也不能那样。

ps:看来光荣的确喜欢45,我绕来绕去最后还是绕回来了。。。。。

[ 本帖最后由 linlei1234 于 2009-9-13 12:42 编辑 ]

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
10#
发表于 2009-9-13 12:54:12 |显示全部楼层
下了,有什么问题大家随便提啊,发现有什么错误也请指出。
我晚上再来看,呵呵

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
11#
发表于 2009-9-13 20:14:49 |显示全部楼层
原帖由 耒戈氏 于 2009-9-13 13:30 发表
雙次捨入,也太那個了吧......

另外我想一問,你是用什麼軟件進行公式調試的?


我就用matlab进行了一些简单的拟合和计算。

使用道具 举报

游侠光荣游戏工作组【特邀】

光荣游戏工作组资深组员勋章

帖子
2392
精华
4
积分
2496
金钱
3516
荣誉
50
人气
0
评议
0
12#
发表于 2009-9-22 18:05:22 |显示全部楼层
原帖由 orderchaos 于 2009-9-22 17:49 发表
每次相乘后都要取整,这会不会是光荣的疏漏?


是因为整型占用的空间比实型少,计算比实型快吧。。。。。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-25 18:51 , Processed in 0.425695 second(s), 14 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到