zoukankan      html  css  js  c++  java
  • 5,7地面物品

    通过人物到地面物品的距离 来查找
           
    1 初始化数值搜索,float类型的
    2 往物品靠近   搜索减少的数值
    3 远离这个物品 搜索增加的数值
    4 人物没动     搜索没改变的数值
    5 重复搜索步骤2,3,4
    人物站长物品的中间应该 距离数值应该是0点几
    最后找到了2个结果
    把鼠标放到物品上出现其他 数据
     
    EBX=0A2DF490
     EDX=14B8FC60不出现数据时把鼠标往物品上一放
     EAX=0D959EB8,EDX=14B8FC60,这个EDX的值和上面的EDX是一样的,所以搜索EAX
     EDX=09AD9208,这个时候游戏非常卡,游戏容易崩溃,把鼠标往物品上一放,选择最后出现的
    EAX=00F06F38
     ECX=046D3768
    ESI=00925468
    EAX=00924E0C
     
     edx=0D95A240-0D959EB8=388
    此时人物与老树根的距离=[[[[[[[00924E0C]+1C]+08]+28]+18]+388]+04]+158
    物品名称
     
    老树根=[[[[[[[[924e0c]+1C]+8]+28]+18]+388]+4]+164]+0
    其他偏移 用MemView(结构化内存监视器)遍历出来
    00925484=[[00924E0C]+1C]
     
         [[[[00924E0C]+1C]+08]+28]
           +14 地面物品数量
           +20 地面物品最大数组
           物品对象指针=[地面物品列表基址]+04
             [+164]+0   名称
             +110      ID号
             +154      距离
             +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;
        pGds         :PDWORD;
        gdsTmp       :DWORD;
        Gds_id       :PDWORD;{物品ID}
        Gds_sysId    :PDWORD;{系统ID}
        Gds_amount   :pDWORD;{物品数量}
        Gds_distance :PSingle;{距离}
        Gds_name     :PDWORD;{名称}
        Gds_name1    :PWideChar;
        Gds_px       :single;
        Gds_py       :single;
        Gds_pz       :single;
        Gds_posx     :pSingle; {坐标X}
        Gds_posy     :pSingle; {坐标y}
        Gds_posz     :pSingle; {坐标z}
    begin
       if InGame=False then  Exit;
      asm
       mov eax,[$924E0C]
       mov eax,[eax+$1c]
       mov eax,[eax+$8]
       mov eax,[eax+$28]
       mov ecx,[eax+$18]
       mov gdsTmp,ecx
      end;
      Memo1.clear;
      for I:=0 to 768 do
      begin
        pGds:=pointer(gdsTmp+I*4);
        if pGds^>0 then
        begin
          pGds        :=Pointer(pGds^+$4);
          Gds_id      :=Pointer(pGds^+$110);
          Gds_sysId   :=Pointer(pGds^+$10C);
          Gds_name    :=Pointer(pGds^+$164);
          Gds_name1   :=Pointer(Gds_name^+$0);
          Gds_distance:=Pointer(pGds^+$154);
          Gds_posx    :=Pointer(pGds^+$3C);
          Gds_posy    :=Pointer(pGds^+$44);
          Gds_posz    :=Pointer(pGds^+$40);
          Gds_px      :=round(Gds_posx^/10+400); //x坐=取整数部分(坐标/10)+400
          Gds_py      :=round(Gds_posy^/10+550); //Y坐标=取整数部分(坐标/10)+550
          Gds_pz      :=round(Gds_posz^/10);     //z坐标=取整数部分(坐标/10)
          memo1.lines.add(Format(' 物品ID %4x 系统ID %x  坐标 %.f,%.f,%.f ↑ 距离 %5f %s',[Gds_id^,Gds_sysId^,Gds_px,Gds_py,Gds_pz,Gds_distance^,Gds_name1]));
        end;
      end;
      Memo1.Hint:=Memo1.Text;
    end;
     
     




    附件列表

    • 相关阅读:
      Linux 软件安装到哪里合适,目录详解
      python如何判断1个列表中所有的数据都是相等的?
      web接口开发基础知识-什么是web接口?
      MIME TYPE是什么?
      jenkins展示html测试报告(不使用html publisher)
      【转】Java虚拟机的JVM垃圾回收机制
      Map 排序
      sql in 和 exist的区别
      distinct和group by 去掉重复数据分析
      sql执行机制
    • 原文地址:https://www.cnblogs.com/xe2011/p/2518943.html
    Copyright © 2011-2022 走看看