泓泰

热血传奇武器

admin
热血传奇武器-第1张-游戏信息-泓泰

我来说,你来玩。之前写了一些技术贴,讨论包括幸运值、魔法技能伤害等问题。花了六天时间研究了一下砸武器部分的代码。于是临时改变了下计划,把砸武器相关的放到前面来讲吧。首先要说明的一点是,这部分代码逻辑有些复杂,想短篇讲完是不可能的了,所以我会分批来逐步介绍。今天呢,我们就先讲个总纲,逐段解读下代码,来看看传奇引擎是如何实现砸武器这部分的。

砸出来的37裁决

话不多说,我们直接上代码。下面图1部分的代码可以理解为砸武器的总纲,这部分代码最后会计算出一个值UserItem.btValue[10],这个值非常重要,它决定了砸武器的结果。图2呢就是通过UserItem.btValue[10]这个值,来给你砸武器结果作出最终判决的代码。这部分就比较简单了,如果UserItem.btValue[10]=1,那砸武器失败。如果UserItem.btValue[10]=10~12,则加攻击。如果是10,则加1点攻击;如果为11,加2点攻击;如果为12,则加3点攻击(即跳点)。如果UserItem.btValue[10]=20~22,则加魔法;如果UserItem.btValue[10]=30~32,则加道术。

所以解读完图2,我们就清楚了,最关键的就是要搞清楚UserItem.btValue[10]是怎么计算得到了。想弄清楚这个,我们就必须得回到图1。

图1:武器升级代码总纲

图2:决定武器升级结果的代码

我们首先看图1的1518、1523、1539和1554行。这几行代码是决定你的武器到底加什么属性。它是根据UpgradeInfo.btDc,UpgradeInfo.btMc,UpgradeInfo.btSc这三个值决定的。如果Dc>=Mc且Dc>=Sc,则加攻;如果Mc>=Dc且Mc>=Sc,则加魔;如果Sc>=Dc且Sc>=Mc,则加道。UpgradeInfo.btDc,UpgradeInfo.btMc,UpgradeInfo.btSc这三个值是由你投入的各项加点最高的两样首饰各自加点的上下值决定的。如果你投了2个铃铛(魔0-7)、2个放大镜(1-3),那么UpgradeInfo.btMc这个值=(0+7)/5+(0+7)/3=3。所以看到这儿,大家就清楚了首饰放得多不如放得好的原因了,因为只看最好的两样首饰。同时,也可以看出来,如果你加魔,你就没必要放加攻和加道的装备,因为只要你的UpgradeInfo.btMc大于对应的Dc和Sc,那对Dc和Sc贡献的首饰将会对最终砸武器的成败没有丝毫影响。至于/5和/3以及这三个值具体的计算方法,下期再详细介绍。

我们再看看决定完成哪样之后,会发生什么。我们以加攻为例,看从1523-1538行的代码,我们就可以知道,最终决定武器结果的UserItem.btValue[10]最后等于多少,是和n10这个值有关的。具体机制如下,引擎首先会从[0,g_Config.nUpgradeWeaponDCRate]这个范围区间随机抽一个数。g_Config.nUpgradeWeaponDCRate这个是引擎里可以调整的数字,为了方便说明,我们假定这个值是100。那也就是说,引擎从0-100之间随机抽一个数字。如果这个数字小于n10,则UserItem.btValue[10]=10,即武器升级成功且至少加1点攻;否则,UserItem.btValue[10]=1,即武器升级失败。

如果前一步判定武器升级成功且n10大于63,系统会再从[0, g_Config.nUpgradeWeaponDCTwoPointRate]之间再摇一个数。这个g_Config.nUpgradeWeaponDCTwoPointRate是调节武器跳点升级的变量,这个值越大,跳点越难。我们就以g_Config.nUpgradeWeaponDCTwoPointRate=30为例好了,也就是从[0,30]间再抽一个数。如果这个抽出来的数=0(概率为1/30),那么UserItem.btValue[10]=11,即武器跳1点(即加2点攻)。如果n10还大于79的时候,系统则会从[0,g_Config.nUpgradeWeaponDCThreePointRate]再抽一个数决定武器是否跳2点。

如果你耐心看完以上的解读,你应该就能明白,整个砸武器的过程中会有1-3次摇随机数的过程,这部分我们是无法控制的。对于游戏玩家来说,唯一能做的就是通过科学的方法提高n10,让n10尽量高,从而最大概率地避免让UserItem.btValue[10]=1并且尽可能地实现跳点。那n10这个值是怎么算的呢?1526这一行就是n10的计算过程,它由n90,UpgradeInfo.UserItem.btValue[3] , UpgradeInfo.UserItem.btValue[4], User.m_nBodyLuckLevel这四个变量以及一大堆常数通过各种数学运算得到。这几个值都分别如何计算呢?我们留着下回再讲吧。喜欢小亮的解读就请关注点赞。

标签: #热血武器升级代码