首页
社区
课程
招聘
[讨论]DNF吸怪/吸物分析(怪物数组)分析
发表于: 2015-11-4 22:30 10103

[讨论]DNF吸怪/吸物分析(怪物数组)分析

2015-11-4 22:30
10103
.版本 2
.子程序 秒吸物怪, , , 更新完毕
.局部变量 人物数据, 整数型
.局部变量 地图偏移, 整数型
.局部变量 首地址, 整数型
.局部变量 尾地址, 整数型
.局部变量 怪物阵营, 整数型
.局部变量 怪物数量, 整数型
.局部变量 计次, 整数型
.局部变量 怪物基址, 整数型
.局部变量 怪物类型, 整数型
.局部变量 物品_X轴, 小数型
.局部变量 物品_Y轴, 小数型
.局部变量 物品_Z轴, 小数型
.如果真 (读内存代码 (-1, #人物基址) ≤ 0)  ' 判断在不在游戏内的
.如果真结束
.如果真 (读内存代码 (-1, #人物基址 + “+BC”) = 0)'判断角色在不在地图内
     返回 ()
.如果真结束
人物数据 = 读内存整数型 (-1, 十六到十 (#人物基址))
地图偏移 = 读内存整数型 (-1, 人物数据 + 188)
首地址 = 读内存整数型 (-1, 地图偏移 + 176)
尾地址 = 读内存整数型 (-1, 地图偏移 + 180)
怪物数量 = (尾地址 - 首地址) ÷ 4'每个数组占4
.计次循环首 (怪物数量, 计次)
     怪物基址 = 读内存整数型 (-1, 首地址 + 4 × 计次)'每个数组占4 每次循环 由上次地址+4 意思就是指向下一个数组地址
     怪物阵营 = 读内存整数型 (-1, 怪物基址 + 2096)'怪物阵营判断数组在哪边
     怪物类型 = 读内存整数型 (-1, 怪物基址 + 148)'判断数组的类型 是否为怪物
     .如果真 (怪物阵营 ≠ 读内存整数型 (-1, 人物数据 + 2096))’如果数组不是我们这边的 言外之意就是对面阵营的执行下列操作
         .如果真 (怪物类型 = 529 或 怪物类型 = 289 或 怪物类型 = 273)'其实吸怪吸物的差别就在这里 我忘了哪个类型是怪物哪个类型是物品了 其中有两个是
             物品_X轴 = 读内存小数型 (-1, 读内存代码 (-1, #人物基址) + 424)'读取人物X/Y/Z轴
             物品_Y轴 = 读内存小数型 (-1, 读内存代码 (-1, #人物基址) + 428)
             物品_Z轴 = 读内存小数型 (-1, 读内存代码 (-1, #人物基址) + 432)
             写内存小数型 (-1, 读内存整数型 (-1, 怪物基址 + 172) + 16, 物品_X轴)
             写内存小数型 (-1, 读内存整数型 (-1, 怪物基址 + 172) + 20, 物品_Y轴)
             写内存小数型 (-1, 读内存整数型 (-1, 怪物基址 + 172) + 24, 物品_Z轴)
.如果真结束
     .如果真结束
.计次循环尾 ()

从上面的代码不难看出,DNF他把所有的地图对象(怪物、物品、建筑&……)都放在了一个数组上面 区分它们的办法就是靠里面的一个类型偏移
所以你会看到吸怪 吸物 等都差不多
然后首先是.如果真 (读内存代码 (-1, #人物基址) ≤ 0) 判断是否在游戏内部 (因为没有进入游戏或者没有开游戏 人物基址是为0的)
.如果真 (读内存代码 (-1, #人物基址 + “+BC”) = 0)'判断角色在不在地图内 BC是是否进入游戏地图的偏移 没有进入为0
地图偏移 = 读内存整数型 (-1, 人物数据 + 188)
首地址 = 读内存整数型 (-1, 地图偏移 + 176)
尾地址 = 读内存整数型 (-1, 地图偏移 + 180)
首地址 尾地址 就是相当于一个数组的第一个 和最后一个
怪物数量 = (尾地址 - 首地址) ÷ 4'每个数组占4  
因为每个数组的一个地址占4个字节 所以要除于4 得出了数组的多少(就相当于知道了有多少个对象)
然后我们就开始循环

怪物基址 = 读内存整数型 (-1, 首地址 + 4 × 计次)'每个数组占4 每次循环 由上次地址+4 意思就是指向下一个数组地址
    怪物阵营 = 读内存整数型 (-1, 怪物基址 + 2096)'怪物阵营判断数组在哪边
    怪物类型 = 读内存整数型 (-1, 怪物基址 + 148)'判断数组的类型 是否为怪物
因为是计次循环 所以每次循环计次+1 然后因为每个地址占4个字节 所以我们的每次循环+4
就相当于说
第一地址:首地址+0
第二个地址:首地址+4x1
第三个地址:首地址+4x2

首地址+4×计次 得出了对象地址
加上相应的类型偏移就知道对象时不是怪物或者物品 然后写入自身X/Y/Z轴就行了~

.版本 2

.程序集 窗口程序集_启动窗口
.程序集变量 对象, 对象数组, , "20"

.子程序 __启动窗口_创建完毕
.局部变量 首地址, 整数型
.局部变量 尾地址, 整数型

首地址 = 对象 [1]
尾地址 = 对象 [20]

.版本 2

.数据类型 对象数组
    .成员 地址, 整数型
    .成员 怪物类型, 整数型
    .成员 血值, 整数型
    .成员 X, 整数型
    .成员 Y, 整数型
    .成员 Z, 整数型

转载自千明论坛http://www.3d56.net

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
高层!高层!
2015-11-4 23:52
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
这分析,这广告
2015-11-5 08:30
0
雪    币: 216
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这是分析么?这样的易语言看着真头晕,还不如截个图呢
2015-11-5 09:31
0
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
不如截个图呢
2015-11-5 10:07
0
雪    币: 79
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看着比较晕
2015-11-5 10:34
0
雪    币: 23
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
乱,意思和LOL的ObjectManager差不多,所有的对象塞入一个数组当中,然后遍历出里面的怪物类型对象,把XYZ改成人物的XYZ。
2015-11-5 10:41
0
雪    币: 71
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
E语言 看得 头大
2015-11-5 11:46
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有时间分享个dnf的私服给你们.
2015-11-5 13:04
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
就是一个对象数组  获得数组大小遍历就成了  咋写这么麻烦呢 你这收学员不是坑人吗 吸怪这种代码几年前就百度一大堆了  9c b4 a0  都是一个对象的吸怪方法偏移  还硬生生的给你转成了10进制体现技术含量....
2015-11-7 22:32
0
雪    币: 11
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
大牛大牛都是大牛交流个技术然而被喷 有意见可以提 有必要说的那么激进?还变成坑人了..可以了 这素质 你有意见我接受 但是你喷我 我就不服了你有见解可以另开一个帖子。
2015-11-7 23:43
0
雪    币: 234
活跃值: (214)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
这广告打的 简直是毫无痕迹啊
2015-11-8 10:51
0
游客
登录 | 注册 方可回帖
返回
//