DNF阿拉德游戏论坛

 找回密码
 立即注册
搜索
查看: 8870|回复: 1
打印 上一主题 下一主题

[教程] dnf服务端修改等级上限的研究过程及原理( by:两包咖啡)

[复制链接]

签到天数: 42 天

[LV.5]阿拉德勇士

1173

主题

1517

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
74344
怒气
65562
声望
2957
战力
1181

活跃会员灌水之王游戏爱好者阿拉德最佳作者阿拉德勇士战斗法师DOF玩家佛系DNF玩家

跳转到指定楼层
楼主
发表于 2019-11-11 19:08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该先说什么好呢
哦,对,我特别讨厌伸手党,尤其是那些牛气哄哄,像大爷似的每个人都得伺候他的那种,问个问题拽得二五八万
本帖不欢迎这种人,我相信这种人看我的这帖子100遍也不可能会懂得修改
我不会发具体教程,也不会发成品,我只会发一些思路的东西,有兴趣的自然会努力学习,有基础的自然很轻易就抓住重点

很早的时候,8月中吧,就被寂寞拉来了研究台服端,而且寂寞跟我说他的端是花了xxx元买了遂入坑了
刚开始也是连架设都不会,边弄边问寂寞,弄起虚拟机,弄起phpstudy,研究起架设,研究起mysql数据库
一直都是抱着了解和学习的心态,也的确会了很多,这些都是这几个月的收获,真正的收获
很多东西,思路也是来自于零散的各个地方,然后进一步弄出了自己的新发现,如外网组队、如pvf开放3大城镇、如85端sp修复方法
这边只是想说明,我在刚接触台服端的时候,跟很多人一样,头脑都是一片空白,我个人有的一点点优势,也许仅在于我会点英文、会点linux、会点c语言编程、以及头脑好一点
所以,我超级讨厌伸手党

这个贴吧,我也算是混得很久了,认识的人,来了又走,走了又来,我应该还会一直在着
以前的我很爱装逼,现在老了,比较喜欢低调,偶尔会装逼下
这贴是一个装逼贴,也算是最后一次装逼,对于目前的台服端研究的最后一次装逼。也就是说,如果台服端没有另外的重要突破,我应该不会继续研究了。而事实上,我也几乎没啥时间分心做这些

说到低调,必须谈及台服端研究的一些牛人大神
吧里的大神还是很多的,部分人热心分享、热心无私帮忙,得
而有些人很低调,低调到很多吧友都没认识到他。其中有一位,我觉得是真正的大神,我从他那边学到了很多很多,至少在我心目中,他比虫神之流的强太多。只是为了尊重他的低调,我只是在此表示感谢,就不点他的名了

好了,言归正传吧
来说说如何修改服务端,突破70的等级上限
很早之前,我就开始了考虑70等级上限这问题
在详细翻遍了数据库,以及pvf后,跟群里的朋友一致认定:突破70的钥匙,不在数据库或者pvf,而是在于服务端
刚开始,我完全不懂汇编语言,连如何打开df_game_r都不会,现在想想很好玩,很有趣
慢慢地,我熟悉了df_game_r的结构,也大体把握到了突破70等级的一些要点
尝试地修改,可以在70打怪有经验了

可是再进一步地,我彻底卡住了
一旦升到71级,服务端就会崩溃。修改导致崩溃的函数,服务端不崩溃了,却会进入假死状态
这是我面对的第一道坎,卡了很久,导致我很长时间没再进一步尝试
再后来,那位大神很神奇地找到了问题所在,一个原始程序的逻辑bug,狗屎的棒子啊,逻辑或跟逻辑与都弄不清吗?
顺利升到71。

可是新的问题又出现,所有物品和装备全红,使用不了。
跟大神讨论了几次,基本断定问题不是出在服务端,是客户端也需要修改
于是,第二次被卡住
再来就是大家都知道的,左耳跟他朋友公布了他们的85端文件,以及客户端的两个dll补丁文件。
我想说的是,弄出那两个dll文件的,也是大神级人物,可惜不曾认识
借着这两个dll文件,我的修改等级上限的思路基本上完成了

但是也还是有遗留问题,那就是70级以后,得不到sp
根据之前我研究df_game_r所做的一些记录,也迅速地知道了问题所在,而修复sp方法的完善,得益于吧友和那位大神的帮助
以上,基本是我整个研究服务端的过程了。文笔不好,写得很乱,随便看看。

开始说说如何修改吧
需要至少准备两个软件
IDA pro,用来打开和反汇编df_game_r,可以清晰地了解df_game_r的程序结构和各个子程序,按F5可以得到类c语言。这个软件只是用来看,基本不用来改
ultraedit,用来修改df_game_r,根据地址来修改对应的十六进制值,然后保存,相当简单。
如果熟悉linux的话,也可以用hexedit来修改df_game_r

我觉得还是有必要对df_game_r多作一些说明
df_game_r这文件,我所会的,只能改,不能删,不能增加
换句话说,想添加全新的功能,比如新的武器特效,那是完全不可能的事
再来就是,我这边只提供修改df_game_r的思路
而上文也说了,事实上客户端也是需要一定的修改的
我相信有兴趣的朋友一旦掌握了df_game_r的修改,对于如何修改客户端也就不是难题了

客户端DLL文件的修改具体思路,我说明一下,就是自己要写一个DLL文件,用他去挟持系统原有的iij5.DLL这个文件,从而达到运行游戏会让DNF.exe加载你自己的DLL而不是系统,配合df文件达到突破等级的目地

先说说如何修复镇魂下线卡角色吧


这修复方法实际上是那位大神的,我直接公布出来,希望他不要介意


当初我发布地图修改方法的时候,已经说明,如果镇魂卡角色了,可以在数据库把village的值从13改成11


那么原理是什么呢?


很简单,pvf对各个城镇都给了一个编号,比如
修南,编号11
时间门,编号12
镇魂区,编号13
发电站,编号14


而在这些城镇中,只有部分城镇才有赛利亚房间,比如修南,比如发电站
在df_game_r里面,有个子程序,会对角色下线位置进行判断
其中有一条是,当下线位置的城镇编号等于12时,把编号变成11
因此,在不同城镇下线,就有不同结果


在修南下线,编号11,有赛利亚房间
在时间门下线,编号12,变成11,有赛利亚房间
在镇魂下线,编号13,没有赛利亚房间(卡角色)
在发电站下线,编号14,有赛利亚房间

正常的修改思路是,让子程序判断,当下线位置的编号等于12或者13时,把编号变成11
但是,我们没办法增加语句,我们只能修改
因此,那位大神提供的思路是,当下线位置的编号大于等于12时,把编号变成11


也就是说
在修南下线,编号11,有赛利亚房间
在时间门下线,编号12,变成11,有赛利亚房间
在镇魂下线,编号13,变成11,有赛利亚房间
在发电站下线,编号14,变成11,有赛利亚房间

缺陷就是,在发电站下线,再上线时,变成在修南的赛利亚房间了。
地址是602DAF,子程序是setCharacInfoDetail,意思就是设置角色的详细信息
修改思路就是:把逻辑判断的等于,改成大于等于

再来说说如何防止升到71的时候服务端崩溃吧,也是那位大神的贡献
在原始df_game_r中,子程序isThereDailyTrainingQuestList的功能是给角色提供日常训练任务
当中有个逻辑判断,大概意思是
当等级 >0 或者 等级<=70时, 给角色提供对应等级的日常任务
服务端崩溃的原因就在于,没有70以上的日常任务,导致segment fault


这边我就不卖关子了,直接上修改方法
地址31C128, 7F改成7E
地址31C129, 10改成06

第三个,就是如何修复极限祭坛
修改起来很简单,但说实话,具体原理我还没弄透彻
直接上修改地址吧
22069B,把00改成01
220894,把00改成01
我本人没有亲自验证过,但寂寞验证过,确实可行,嗯,就酱紫。如有问题找寂寞
0=不开 1=开  按Ctrl+G 输入0x220894 这样。前面要加0x

预告下,以下子程序


_check_level_up
_onLevelUp
increase_status
gain_exp_sp
CalLevelUpItemCheck
SetUserMaxLevel


set_reward_sp
GetSpAtLevelUp


set_level_exp
get_level_section_exp
有兴趣的朋友可以详细看看

发生点事情,心情不爽,直接发布地址吧,不想多说了


修改等级上限


61AF55
61B0F3
61B8F6
61DD28
61EE9C
6224A8
622659
622929
622941
641D4B
647ECE
647EDA

修复sp


00318c38
00318c76
00318cc1


还有就是
00318C28、00318C6A、00318CD6,把值改成(10912+等级)的十六进制
这边,值的修改跟sp的数值毫无关系


也有另外一种修改方法,这边就不放出了,属于那位大神的



“今天也是充满希望的一天!”——赛丽亚
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。

该用户从未签到

1

主题

101

帖子

138

积分

阿拉德菜鸟

Rank: 2

积分
138
怒气
37
声望
0
战力
0
沙发
发表于 2019-11-12 16:53:34 | 只看该作者
EYR6URTU7I67I
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|DNF阿拉德游戏论坛 ( 渝ICP备2024024979号 )

渝公网安备50023502000547号

GMT+8, 2024-11-21 22:18 , Processed in 0.178238 second(s), 38 queries .

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