找回密码
 立即注册
GTA5修改器.风灵月影生化危机7修改器.风灵月影三国志13修改器.风灵月影讨鬼传2修改器.风灵月影猎天使魔女修改器.风灵月影
刺客信条修改器虐杀原形2修改器.风灵月影看门狗2修改器.风灵月影鬼泣5修改器.风灵月影上古卷轴5修改器
查看: 47|回复: 0

武林外传全自动辅助源代码 内敛汇编 CALL C++版 VS2005

[复制链接]

2604

主题

2627

帖子

8001

积分

论坛元老

Rank: 8Rank: 8

积分
8001
发表于 2017-7-3 20:42:28 | 显示全部楼层 |阅读模式
01.jpg
开发工具VS2005 ,技术类型  内存反汇编 难度一般。适合中低端玩家学习。


int  CMyHookDlg::Game_Array_Monster_Return_ArrayMax()   //返回怪物数组下标
{
        int g=0;//怪物数组最大数
        _try
        {       
                _asm
                {
                        mov ecx,Adress_BaseAdress;
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x54]
                        mov g,ecx
                }

        }
        _except(1)
        {
                        m_list_record.InsertString(lognumber(),"返回怪物数组下标出错,已恢复~");
        }

        return g;

}

float CMyHookDlg::Game_Array_Monster_CoordX(int i)           //返回怪物数组坐标x
{
        float x;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x50]
                        mov ebx,i
            lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x25c]
                        mov x,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回怪物数组坐标x出错,已恢复~");
        }

        return x;
}


float  CMyHookDlg::Game_Array_Monster_CoordY(int i)           //返回怪物数组坐标y
{
        float x;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x50]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x264]
                        mov x,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回怪物数组坐标y出错,已恢复~");
        }
        return x;
}


DWORD CMyHookDlg::Game_Array_Monster_ID(int i)  //返回怪物数组ID
{
        DWORD mb;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x50]
                        mov ebx,i
                        lea ecx,[ecx+ebx*0x4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x11c]
                        mov mb,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回怪物数组ID出错,已恢复~");
        }
        return mb;
}


float CMyHookDlg::Game_Array_Monster_Space(int i)  //返回怪物距离
{
        float j;
        //怪物距离   [[[[[989a94]+08]+20]+4c+4]+1*4]+59C
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress;
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x50]
                        mov ebx,i
                        lea ecx,[ecx+ebx*0x4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x244]
                        mov j,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回怪物距离出错,已恢复~");
        }

        return j;

}

int CMyHookDlg::Game_Array_Monster_Status(int i)   //返回怪物状态 4=死亡 2=攻击中
{
        //[[[[[989a94]+08]+20]+4c+4]+ecx*4]+284
        //4=死亡 2=攻击中
        int j;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress;
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x20]
                        mov ecx,[ecx+0x50]
                        mov ebx,i
                        lea ecx,[ecx+ebx*0x4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x284]
                        mov j,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回怪物状态出错,已恢复~");
        }
        return j;
}

CString CMyHookDlg::Game_Array_Monster_Name(int i)  //返回怪物数组名字
{
        //[[[[[[[980AE8]+1c]+08]+20]+4c+4]+0*4]+220]

wchar_t *wmz=NULL;

  try
  {
        _asm
        {
                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x8]
                mov ecx,[ecx+0x20]
                mov ecx,[ecx+0x50]
                mov ebx,i
                lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                mov ecx,[ecx+0x220]
                mov wmz,ecx
        }               
  }
  catch(...)
  {
                  m_list_record.InsertString(lognumber(),"返回怪物数组名字出错,已恢复~");
  }


        USES_CONVERSION;
        return W2A(wmz);
       
}



//=======================背包数组===================================

int CMyHookDlg::Game_Array_Pack_Number(int i)  //返回背包数组数量
{
        int id;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x14]
                        mov id,ecx
                }
        }

        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包数组数量出错,已恢复~");
        }

        return id;
}

int CMyHookDlg::Game_Array_Pack_MaxNumber(int i)  //返回背包数组最大数量
{
        int id;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x18]
                        mov id,ecx
                }
        }

        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包数组最大数量出错,已恢复~");
        }

        return id;
}

bool CMyHookDlg::Game_Array_Pack_SurplusNumber(int j) //返回背包数组当前是否还能叠加
{
        int surplusnumber=Game_Array_Pack_MaxNumber(j)-Game_Array_Pack_Number(j);
        TRACE("叠加数量%d",surplusnumber);
        if (surplusnumber==0)
        {
                return false;
        }
        return true;
}


int CMyHookDlg::Game_Array_Pack_Type(int i)  //返回背包物品类型
{
        int  j=-1;
        _try
        {
                _asm
                {

                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
            lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+4]
                        mov j,ecx
                }               
               
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包物品类型出错,已恢复~");
        }
        return j;
}

CString CMyHookDlg::Game_Array_Pack_MainType(int i) //返回背包物品主类型名字
{
        wchar_t *wmz=NULL;

        _asm
        {

                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x8e4]
                mov ecx,[ecx+0x0c]
                mov ebx,i
        lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                cmp ecx,0
                je xd
                add ecx,0x60
                mov ecx,[ecx]
                add ecx,4
                mov wmz,ecx
xd:
        }               
        USES_CONVERSION;
        return W2A(wmz);
}


CString CMyHookDlg::Game_Array_Pack_MinorType(int i) //返回背包数组次类型
{
        wchar_t *wmz=NULL;

        _asm
        {

                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x8e4]
                mov ecx,[ecx+0x0c]
                mov ebx,i
            lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                cmp ecx,0
                je xd
                mov ecx,[ecx+0x64]
                cmp ecx,0
                je xd
                add ecx,4
                mov wmz,ecx
xd:
        }               
        USES_CONVERSION;
        return W2A(wmz);
}

CString CMyHookDlg::Game_Array_Pack_FormulaName(int i) //返回背包数组配方名字
{
        wchar_t *wmz=NULL;

        _asm
        {

                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x8e4]
                mov ecx,[ecx+0x0c]
                mov ebx,i
                lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                cmp ecx,0
                je xd
                mov ecx,[ecx+0x60]
                cmp ecx,0
                je xd
                add ecx,0xc
                mov wmz,ecx
xd:
        }               
        USES_CONVERSION;
        return W2A(wmz);
}


CString CMyHookDlg::Game_Array_Pack_Return_Name(int i)  //返回具体的背包物品名字
{
        int type;
        CString name;
    char *cname;
        type=d_dlg.Game_Array_Pack_Type(i);

        if (type==17)
        {
                name=d_dlg.Game_Array_Pack_FormulaName(i);
                        TRACE("类型:%d 名字:"+name,type);
                return name;
        }
        if (type==7||type==8||type==35||type==23)
        {
                name=d_dlg.Game_Array_Pack_MainType(i);
                        TRACE("类型:%d 名字:"+name,type);
                return name;
        }


        name=d_dlg.Game_Array_Pack_Name(i);
        if (name=="")
        {
                name=d_dlg.Game_Array_Pack_MainType(i);
        }               
        TRACE("类型:%d 名字:"+name,type);
        cname=name.GetBuffer();
        return cname;
}
CString CMyHookDlg::Game_Array_Pack_Name(int i) //返回背包数组名字
{

        wchar_t *wmz=NULL;

        _asm
        {
                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x8e4]
                mov ecx,[ecx+0x0c]
                mov ebx,i
        lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                cmp ecx,0
                je xd
                mov ecx,[ecx+0x68]
                cmp ecx,0
                je xd
                add ecx,0xc
                mov wmz,ecx
xd:
        }               
        USES_CONVERSION;
        return W2A(wmz);
}

bool CMyHookDlg::Game_Array_Pack_Base(int i) //背包基址 false 为空
{
        DWORD id=0;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov id,ecx
                }
        }
    _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包物品基址出错,已恢复~");
        }
        if (id==0)
        {
                return false;
        }
        else
        {
                return true;
        }
}

int CMyHookDlg::Game_Array_Pack_ID(int i) //返回背包物品ID
{
        int id;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        add ecx,0x8
                        mov ecx,[ecx]
                        mov id,ecx

                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包物品ID出错,已恢复~");
        }

        return id;
}

int CMyHookDlg::Game_Array_Pack_Max()  //返回背包最大数量
{
        //[[[[[980AE8]+1c]+24]+8dc]+010]
        int i;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x8e4]
                        mov ecx,[ecx+0x10]
                        mov i,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回背包最大位置出错,已恢复~");
        }

        return i;
}

int CMyHookDlg::Game_Array_Return_Search_Pack(CString name) //搜索背包是否有此物品
{
        CString tmp_name;

    TRACE("开始搜索");
        for (int i=0;i<Game_Array_Pack_Max();i++)
        {

                if (Game_Array_Pack_Base(i))
                {   
                        tmp_name=Game_Array_Pack_Return_Name(i);
            TRACE(tmp_name);
                        if (tmp_name==name)
                        {  
                                TRACE("找到物品"+name+"在第%d格",i);
                                return i;
                        }
                }

        }
        return -1;
}

//======================地面数组=====================================


int CMyHookDlg::Game_Array_Ground_Return_Number()   //返回地面物品数量
{
        int i;
        _try
        {
                //[[[[980AE8]+1c]+08]+24]+14

                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x08]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x14]
                        mov i,ecx
                }               
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回地面物品数量出错,已恢复~");
        }

        return i;
}


int CMyHookDlg::Game_Array_Ground_PickOffset(int i)  //捡取物品偏移
{
        int j=0;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x4]
                        mov ecx,[ecx+0x110]
                        mov j,ecx
                }               
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"捡取物品偏移出错,已恢复~");
        }
        return j;
}

CString CMyHookDlg::Game_Array_Ground_Name(int i)   //地面物品名字
{
        wchar_t *wmz=NULL;

        _asm
        {
                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x8]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x18]
                mov ebx,i
                lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                mov ecx,[ecx+0x4]
                mov ecx,[ecx+0x168]
                mov wmz,ecx
        }               

        USES_CONVERSION;
        return W2A(wmz);
}


bool CMyHookDlg::Game_Array_Ground_Base(int i)   //返回物品数组是否存在
{
        //[[[[[980AE8]+1c]+8]+24]+18]+0*4
    int j;
        _try
        {       
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov j,ecx
                }

        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回物品数组基址出错,已恢复~");
                return 0;
        }

        if (j==0)
        {
                return 0;
        }
        else
        {  TRACE("物品数组I:%d",j);
                return 1;
        }

}

DWORD CMyHookDlg::Game_Array_Ground_PickID(int i) //地面数组捡取ID
{
        //[[[[[[[980AE8]+1c]+8]+24]+18]+x*4]+4]
        DWORD ID;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+8]
                        mov ID,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回地面数组捡取ID出错,已恢复~");
        }

        return ID;
}

float CMyHookDlg::Game_Array_Ground_Space(int i)   //地面数组距离
{
        //[[[[[[[980AE8]+1c]+8]+24]+18]+x*4]+4]
        float j;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x4]
                        mov ecx,[ecx+0x158]
                        mov j,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回地面数组距离出错,已恢复~");
        }
        return j;
}

float CMyHookDlg::Game_Array_Ground_CoordX(int i)  //地面数组坐标X
{
        //[[[[[[[980AE8]+1c]+8]+24]+18]+x*4]+4]
        float j;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x4]
                        mov ecx,[ecx+0x7c]
                        mov j,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回地面数组坐标X出错,已恢复~");
        }
        return j;
}

float CMyHookDlg::Game_Array_Ground_CoordY(int i)  //地面数组坐标y
{
        //[[[[[[[980AE8]+1c]+8]+24]+18]+x*4]+4]
        float j;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x8]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x18]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x4]
                        mov ecx,[ecx+0x84]
                        mov j,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回地面数组坐标Y出错,已恢复~");
        }
        return j;
}
//======================技能数组======================================

CString CMyHookDlg::Game_Array_Skill_Name(int i) //返回技能数组名字
{
        char *mz;
        _asm
        {
                mov ecx,Adress_BaseAdress
                mov ecx,[ecx]
                mov ecx,[ecx+0x1c]
                mov ecx,[ecx+0x24]
                mov ecx,[ecx+0x948]
                mov ebx,i
                lea ecx,[ecx+ebx*4]
                mov ecx,[ecx]
                mov ecx,[ecx+0x4]
                mov ecx,[ecx+0x4]
                mov ecx,[ecx+0x67]
                add ecx,0x8
                mov mz,ecx
        }

        return mz;
}

int CMyHookDlg::Game_Array_Skill_Return_Number()  //返回技能数量
{
        int i;
        _try
        {       
                _asm
                {               
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x98C]
                        mov i,ecx
                }

        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回技能数量出错,已恢复~");
        }
        return i;
}

int CMyHookDlg::Game_Array_Skill_ID(int i)  //返回技能ID
{
        int id;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x948]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x8]            
                        mov id,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回技能ID出错,已恢复~");
        }

        return id;
}

int CMyHookDlg::Game_Array_Skill_CD(int i)  //返回技能CD
{
        int cd;
        _try
        {
                _asm
                {
                        mov ecx,Adress_BaseAdress
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x1c]
                        mov ecx,[ecx+0x24]
                        mov ecx,[ecx+0x948]
                        mov ecx,[ecx+0x0c]
                        mov ebx,i
                        lea ecx,[ecx+ebx*4]
                        mov ecx,[ecx]
                        mov ecx,[ecx+0x8]  
                        mov ecx,[ecx+0x0c]
                        mov cd,ecx
                }
        }
        _except(1)
        {
                m_list_record.InsertString(lognumber(),"返回技能CD出错,已恢复~");
        }

        return cd;
}
武林外传源代码.rar (99.49 KB, 下载次数: 0, 售价: 100 金钱)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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