挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565 JD寻实力长期勤快开发,来实力代理,DMA内存,项目讨论群 ██【我要租此广告位】██
查看: 9838|回复: 10
打印 上一主题 下一主题

[讨论交流] Delphi做魔域 之怪物列表遍历

[复制链接]

15

积分

6

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
9
海币
740
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-6 20:51:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


Delphi做魔域 之怪物列表遍历

我见过很多发帖求助魔域怪物列表如何遍历的帖子,当然,结局自然是不了了之,因为我个人是业余爱好者,也早就对官服没了兴趣, 中怪物数组真的没用,也一直没碰这个问题,其实主要还是水平太菜,其实说魔域的怪物列表方法还是很多的,小举两例吧:  
1、可以根据怪物坐标,让一个怪物跟着你跑,用CE范围搜索还是很容易找出临时地址的  
2、怪物类型,鹿角兽叫鹿角兽,巨杰士叫巨杰士,这是有区别的当你跑到只有鹿角兽的怪物堆里,肯定有个表示它是鹿角兽的值A,当你跑到只有巨杰士的怪物堆里,这个值肯定会变成B,魔域是不会维护列表中已经失效了的值的,但是再怎么第一个还是会维护的,右下角的怪物信息就是告诉你当前有怪物数组里有什么怪物,方便你分析的。  

这两个方法我都没用过,我当时想到的是有没有一个变量保存着当前怪物数组里有多少个怪物,于是试着找了下,我用CE扫啊扫、找啊找,马勒戈壁的没有找到,我当时就想,难道一个XP把周围怪全打死了,计算的时候还一个怪物一个怪物的加还是怎么的,虽然怪物数组对我来说毫无用处,但我还是有点郁闷。  

最后经过多次试验,更确切的应该是到上一篇中的双风珠分析时恍然大悟,为什么风珠call中的那个ID不是幻兽出征Call中的那个ID,为什么有时候BB收回再出征后风珠Call中的ID会变化,难道它是个怪物,没想到事实上它真的就是个怪物,出征一个BB,怪物数加1,召回或合体一个BB怪物数减1;如果幻兽出征后就算个怪物,那么别的什么例如NPC、卫兵算不算怪物?然后只带一个BB跑到了卡城上面的城墙外一搜索,证实了幻兽出征后就是野兽的传说。  
[hide=10,rvrc]
很幸运,怪物数量地址搜出来就是个基址,省了不少事,废话够多了,下面正式开始  

我今天搜出来的地址是001249A0,用CE找到怪物减少时的代码如下  
EAX=01124974  ECX=00000000  

Probable base pointer =01124974  

00ba9a91 - dec ecx  
00ba9a92 - test ecx,ecx  
00ba9a94 - mov [eax+2c],ecx  
00ba9a97 - jne 00ba9aa6  
00ba9a99 - mov ecx,[esp+60]  
用ID找出基址的步骤这里省略,最后将给出结果  


根据这里是否可以找到怪物ID列表我不是没有尝试,但最后放弃了,我是从上一篇的风珠Call切入的,既然它领我进门,就继续让它领下去。  
00A5B10A  |.  50                             push eax   
00A5B10B  |.  E8 70AB1600        call soul.00BC5C80   
00A5B110  |.  85C0                        test eax,eax   
00A5B112  |.  8945 D8                  mov dword ptr ss:[ebp-0x28],eax          ;  eax=113E2408  
下面分析eax=113E2408 是怎么来的  

这里我们依然找个没人没兽的地方,反正我是这么做的,至于有人有怪物的地方好不好混我就不清楚了  


从幻兽ID转换开始:  
00A5B10A  |.  50            push eax                                     ;  下段,这里的EAX为幻兽ID  
00A5B10B  |.  E8 B06E0300   call soul.00BC5C80     ;  F7跟进后按F8单步步过执行,中间结果见下面分析  
00A5B110  |.  85C0          test eax,eax                             ; 最后的EAX  

跟到下面  
00BC5CA9  |> /8B87 54700000     /mov eax,dword ptr ds:[edi+0x7054]  
00BC5CAF  |. |6A 00                         |push 0x0  
00BC5CB1  |. |B9 70491201          |mov ecx,soul.01124970                               ;  值得注意,与CE找到的01124974竟然如此接近,肯定有问题  
00BC5CB6  |. |8B04B0                    |mov eax,dword ptr ds:[eax+esi*4]  
继续,我们发现下面的代码貌似实现了上面幻兽ID转换代码功能是一样的  
00BC5CB9  |.  50                              |push eax                                                         ;  这里的EAX仍然是幻兽ID  
00BC5CBA  |.  E8 C146FEFF         |call soul.00BAA380                                       ;  EAX改变  
00BC5CBF  |.  85C0                         |test eax,eax                                                    ;  上一个Call出来之后的EAX就是00667670处的EAX  

这里是一个循环  
经过分析,在00BC5CB9  处切换断点,若出征了幻兽则会会立马断下;没有出征BB则不会(合体的不算出征);当出征一个BB时,EAX的值每次断下都一样;出征两个BB时,EAX会是两个值交替变化,很容易发现这两个值正好是出征的两个BB的ID,那么我们把别的断点全取消,把所有出征的BB收回,仅在00BC5CB9  下断,这样只有BB出征时才会断下,因此根本不需要条件断点什么的,显然这里已经与释不释放风珠技能无关了。下面的整个回溯过程都是一样的,因为有多个循环所以每次最好只出征一个BB。  

同上 断下后先F7进入soul.00BAA380 然后F8,一直到  
00BAA420  |> \8BC6          mov eax,esi                     ;  
发现EAX在这之后变为113E2408, 下面就是回溯了,全过程很如下(细节省略,不懂回复或消息):  
00BAA3FA  |> \8B32                    |mov esi,dword ptr ds:[edx]  
00BAA3CC  |.  8D14B8              |lea edx,dword ptr ds:[eax+edi*4]  
//这里edx=01124978 (soul.01124978),EAX=0D60CA88,后面会发现这里的EAX其实就是怪物列表首地址  
00BAA3C6  |.  8B42 08               |mov eax,dword ptr ds:[edx+0x8]  
00BAA3BB  |> /8BD3                   /mov edx,ebx  
00BAA3B8  |.  8D59 08               lea ebx,dword ptr ds:[ecx+0x8]  
00CC1D00  |.  B9 70491201     mov ecx,soul.01124970  

dd [01124970+8+8]+i*4=dd [01124970+10]+i*4就是风珠Call中MOV ECX,ESI中的ESI,这是怪物信息的入口地址  

怪物列表  
dd [[01124970+10]+i*4]  
+78
       怪物X坐标,与角色的X坐标偏移竟然是一样的,不知道天晴是把角色不当人看还是把玩家不当人看(八卦一下),应该是为PK考虑,看来PK起来已经脱离了人的本质  
+7C      怪物Y坐标,  
+0BC   怪物ID  
+0C0   怪物等级或类型标识,相同类型怪物一样,其十进制数值,鹿角兽为1000,巨杰士1010  
怪物总数  
dd 01124970+4+02C=dd 01124970+30  
[/hide]

权限是管理加的,我从不设权限,所有附件也从不收费,因此请不要问我这类问题,我把权限改为10威望,不加密是我本意,每个人都有自己的理由,希望管理体谅,有事可以商量,谢谢
我记得回帖是有威望的,我不想非会员或者说百度之类看到这些,如果你10威望都没有,那我也没办法,我不是要求谁回我的帖,因为回与不回我都没有得失,但论坛要发展,大家体谅下管理员,10威望真的很低

联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇: 工作流程-人工智能之状态机的原理和实现
下一篇:Direct3D透视教程_教你做出属于自己的透视
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

98

积分

58

主题

8

听众
已帮网友解决0 个问题
好评
0
贡献
40
海币
3477
交易币
50
沙发
发表于 2015-3-10 00:41:44 | 只看该作者
楼主呀,,,您太有才了。。。

1

积分

0

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
67
交易币
0
板凳
发表于 2015-6-6 22:01:56 | 只看该作者
适当放入水淀粉

29

积分

8

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
21
海币
1740
交易币
0
地板
发表于 2015-6-11 22:20:18 | 只看该作者
先感谢下,楼主辛苦了!来看看一下

0

积分

1

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
-1
海币
63
交易币
0
5#
发表于 2015-6-29 22:18:20 | 只看该作者
今日小生得以一见楼主大贴实在是惶恐至急,何否,楼主此贴实在妙哉!

1

积分

0

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
1
交易币
0
6#
发表于 2015-11-4 00:47:10 | 只看该作者
给我很大的灵感
3正式会员
115/300

115

积分

0

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
115
海币
405
交易币
0
7#
发表于 2015-11-4 03:42:10 | 只看该作者
感谢楼主,支持楼主-支持 海。
6高级会员
804/1100

804

积分

1

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
803
海币
1425
交易币
0
8#
发表于 2016-6-6 07:57:11 | 只看该作者
先感谢下,楼主辛苦了!来看看一下

1

积分

0

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
7
交易币
0
9#
发表于 2017-6-6 00:52:55 | 只看该作者
好厉害 膜拜下

1

积分

0

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
2
交易币
0
10#
发表于 2017-6-6 20:55:49 | 只看该作者
小黑鸟啊小黑鸟,快快长大大啊长大大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-5-1 23:39 , Processed in 0.131803 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

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