传奇3交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 186|回复: 9

《热血传奇》深度解读系列(2):武器升级(上 …

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-18 12:24:26 | 显示全部楼层 |阅读模式
20200419更新:发稿后收到不少小伙伴们的留言,其中包括一些文中错误的更正。感谢大家,今天把这些内容一并更新。同时提醒大家,本文结论是根据分析gameofmir引擎代码得到的,一些具体数值上的设定并非绝对适用于官服以及其它引擎。因此建议大家只参考整体方法思路。
--------------------------------------------分隔线-------------------------------------------
认真玩,深度聊。之前写了一些技术贴,讨论包括幸运值、魔法技能伤害等问题。后来不少朋友以及贴吧的小伙伴让认真哥来务必讲讲有关砸武器的部分。也算受人之托,花了2天时间研究了一下砸武器部分的代码。于是临时改变了下计划,把砸武器相关的放到前面来讲吧。首先要说明的一点是,这部分代码逻辑有些复杂,想短篇讲完是不可能的了,所以我会分批来逐步介绍。今天呢,我们就先讲个总纲,逐段解读下代码,来看看传奇引擎是如何实现砸武器这部分的。



    砸出来的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这四个变量以及一大堆常数通过各种数学运算得到。这几个值都分别如何计算呢?我们留着下回再讲吧。喜欢认真哥的解读就请关注点赞转发。
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-9-18 12:25:20 | 显示全部楼层
等你的武器三更新  希望作者能通过数据  最后总结一个简单易懂的公式出来  这样对玩家会很有意义
回复

使用道具 举报

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-18 12:25:43 | 显示全部楼层
最后会给总结的
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:26:13 | 显示全部楼层
大哥,武器三什么时候更新?
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:26:36 | 显示全部楼层
你的源代码都是哪下的
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:27:28 | 显示全部楼层
你倒是把源代码连接发来啊,g_Config.nUpgradeWeaponDCRate  这函数内容是什么 敢贴出来吗
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:27:44 | 显示全部楼层
对于资深玩家的我来说 像这种手游的游戏开发和支付系统搭建我都会,我在手游邻域也摸爬滚打5年多了 深知这些游戏的套路 现在像这种手游已经做烂了
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:28:00 | 显示全部楼层
学习了
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-9-18 12:28:09 | 显示全部楼层
这个函数的范围不是固定死的,他的取值范围上限是后台GM可调的,B站有个讲喝祝福油代码的UP主展示的祝福油代码中有一个g_Config.nWeaponMackLuckPoint1函数,那个UP就展示了这个函数在GM后台是如何在表单界面上拉进度条调的,这个祝福油随机函数代码和博主展示的武器升级随机函数前面都是g_Config.n,它俩都是GM后台操作界面上设的参数,因为博主没展示GM后台操作界面,所以我们暂时不知道这个参数可设置的最大数是多少,理论上如果GM想让非诅咒武器又非诅咒玩家百分百成功可以把这个参数调成10及以下,如果GM想整死所有玩家可以把这个参数调成无限大比如1个亿,所以关键取决于你玩的这个服务器的后台把这个参数调成了多少
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-18 12:28:47 | 显示全部楼层
听不懂了。。。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|传奇3交流论坛

GMT+8, 2024-12-23 04:28 , Processed in 0.074065 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

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