• 4,7周围玩家


    从周围玩家的HPmin开始
    开2个游戏账号,游戏用CE挂对进程,选中这个玩家,因为是自己双开,所以HPMIN数值非常清楚
    用CE
     ESI=155FE830
     EDX=18E5D898
     EAX=12B162F8,EDX=18E5D898
    ECX=044B3238
    EAX=00F06F38
    EDI=04533768
    ESI=00925468
    EAX=00924E0C

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

    edx=12B1653C-12B162F8=244

    名称

    名称

    遍历的时候要挂对进程

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

     

    其他偏移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       
    //
     
    {此段代码需要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;
     
     




    附件列表

    • 相关阅读:
      Less:优雅的写CSS代码
      线程池(ThreadPool)
      TiDB
      Docker实现CentOS容器SSH远程登录
      Oracle-Hints详解
      Oracle sql执行计划解析
      引擎基本服务接口API介绍
      ssh远程连接docker中linux(ubuntu/centos)
      自制操作系统
      kafka-net
    • 原文地址:https://www.cnblogs.com/xe2011/p/2518942.html
    Copyright © 2020-2023  润新知