博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4,7周围玩家
阅读量:5327 次
发布时间:2019-06-14

本文共 3234 字,大约阅读时间需要 10 分钟。

201205260838351251.jpg从周围玩家的HPmin开始
开2个游戏账号,游戏用CE挂对进程,选中这个玩家,因为是自己双开,所以HPMIN数值非常清楚
用CE
201205260838354283.png ESI=155FE830
201205260838353726.png EDX=
18E5D898
201205260838358710.png EAX=12B162F8,EDX=
18E5D898
201205260838351742.pngECX=044B3238
201205260838364773.pngEAX=00F06F38
201205260838367805.pngEDI=04533768
201205260838367248.pngESI=00925468
20120526083836280.pngEAX=00924E0C

ROMAN HPmin= [[[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4]+04]+450

edx=12B1653C-12B162F8=244

名称

201205260838365264.png

201205260838376070.png

名称

遍历的时候要挂对进程

201205260838387922.png

roman=[[[[[[[[924e0c]+8]+20]+18]+244]+4]+5CC]+0]

20120526083838954.png

 

其他偏移MemView(结构化内存监视器)查找

//中的玩家的属性值     =        [[[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4]+04]+偏移值
玩家数组=[[[00924E0C]+1c]+08]+20
    +14 周围玩家数量
    +20 周围玩家最大数组
    +18 ???   
玩家数组列表=[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4
    玩家对象=[[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4]+04
    玩家属性=[玩家对象]+偏移   
        [+5cc]+0   名称
        +448       等级
        +43C       ID号
        +450       红最小值
        +478       红最大值
        +700       距离
        +3C        坐标X
        +44        坐标Y
        +40        坐标Z       
//
201205260838383986.png
 
{此段代码需要hook的支持}
/// <summary> 
/// {人物是在游戏当中还是小退} 
/// </summary> 
function 
InGame
():
Boolean
; 
var 
gameretn
:
DWORD
; 
begin 
  
asm 
   
mov 
eax
,[
$00924D48
] 
   
mov 
gameretn
,
eax 
  
end
; 
  
if 
gameretn
=
0  
then 
Result
:=
true
{在游戏当中} 
  
else 
if 
gameretn
>=
1 
then  
Result
:=
False
; 
{人物在角色选择界面} 
end
; 
procedure 
TForm1
.
Button1Click
(
Sender
: 
TObject
); 
/// <summary>
/// 周围玩家
/// </summary>
var
        
I         
:
Integer
;
  
pPlayer         
:
PDWORD
;
  
playerBase      
:
DWORD
;
  
player_name     
:
PDWORD
;
  
player_id       
:
PDWORD
;
  
player_amount   
:
PDWORD
;
  
player_hpMin    
:
PDWORD
;
  
player_hpMax    
:
PDWORD
;
  
player_level    
:
PDWORD
;
  
player_posx     
:
pSingle
;
  
player_posy     
:
pSingle
;
  
player_posz     
:
pSingle
;
  
player_distance 
:
PSingle
;
  
player_px       
:
single
;
  
player_py       
:
single
;
  
player_pz       
:
single
;
  
player_name1    
:
PWideChar
;
  
player_name2    
:
string
;
begin
{
//中的玩家的属性值     =        [[[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4]+04]+偏移值
玩家数组=[[[00924E0C]+1c]+08]+20
  +14 周围玩家数量
  +20 周围玩家最大数组
    +18 ???  
玩家数组列表=[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4
    玩家对象=[[[[[[00924E0C]+1c]+08]+20]+18]+EDX*4]+04
    玩家属性=[玩家对象]+偏移    
    [+5cc]+0   名称
    +448       等级
    +43C       ID号
    +450       红最小值
    +478       红最大值
    +700       距离
    +3C        坐标X
    +44        坐标Y
    +40        坐标Z    
}
  
if 
InGame
=
False 
then  
Exit
;
  
asm
    
mov 
eax
,[
$924E0C
]
    
mov 
eax
,[
eax
+
$1c
]
    
mov 
eax
,[
eax
+
$8
]
    
mov 
eax
,[
eax
+
$20
]
    
mov 
ecx
,[
eax
+
$14
]
    
mov 
Player_amount
,
ecx
    
mov 
ecx
,[
eax
+
$18
]
    
mov 
playerBase
,
ecx
  
end
;
  
Memo1
.
Clear
;
  
for 
I
:=
0 
to 
768 
do
   
begin
    
pPlayer
:=
pointer
(
playerBase
+
I
*
4
);
   
if 
pPlayer
^>
0 
then    
//当对象数组列表不为0的时候才添加
   
begin
      
pPlayer        
:=
Pointer
(
pPlayer
^+
$4
); 
// 玩家对象指针=[玩家列表基址]+04
      
player_hpMin   
:=
Pointer
(
pPlayer
^+
$450
);
      
player_hpMax   
:=
Pointer
(
pPlayer
^+
$478
);
      
player_level   
:=
Pointer
(
pPlayer
^+
$448
);
      
player_id      
:=
Pointer
(
pPlayer
^+
$43C
);
      
player_name    
:=
Pointer
(
pPlayer
^+
$5CC
);
//名称
      
player_name1   
:=
Pointer
(
player_name
^+
$0
);
      
player_name2   
:=
WideCharTostring
(
player_name1
);
      
player_distance
:=
Pointer
(
pPlayer
^+
$700
); 
//距离
      
player_posx    
:=
Pointer
(
pPlayer
^+
$3C
);
      
player_posy    
:=
Pointer
(
pPlayer
^+
$44
);
      
player_posz    
:=
Pointer
(
pPlayer
^+
$40
);
      
player_px      
:=
Trunc
(
player_posx
^/
10
+
400
); 
//x坐=取整数部分(坐标/10)+400
      
player_py      
:=
Trunc
(
player_posy
^/
10
+
550
); 
//Y坐标=取整数部分(坐标/10)+550
      
player_pz      
:=
Trunc
(
player_posz
^/
10
);     
//z坐标=取整数部分(坐标/10)
      
memo1
.
lines
.
add
(
Format
(
'ID %x hp %d/%d LV%d 坐标%.f,%.f,%.f ↑ 距离 %f  %s'
,[
player_id
^,
player_hpMin
^,
player_hpMax
^,
player_level
^,
player_px
,
player_py
,
player_pz
,
player_distance
^,
player_name2
]));
   
end
;
  
end
;
 
Memo1
.
Hint
:=
Memo1
.
Text
;
end
;
 
 

附件列表

 

转载于:https://www.cnblogs.com/xe2011/archive/2012/05/26/2518942.html

你可能感兴趣的文章
js千分位处理
查看>>
字符串类型的相互转换
查看>>
基础学习:C#中float的取值范围和精度
查看>>
web前端面试题2017
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>