109遍歷人物揹包物品信息源碼(VC)

void CZXWG::ShowMyBagMsg( void )
{
    DWORD dwZXBaseAddr = 0x009403E4;    //0x00920724;
    DWORD dwBaseAddr;    // 存放人物基地址
    // ---------------------------------------------------------
    DWORD dwBB_Addr;        // 揹包基址
    DWORD dwBB_GeShu;        // 揹包格數
    DWORD dwBB_FirstAddr;    // 揹包首地址
    DWORD dwBB_TempAddr;
    DWORD dwBB_WPID;        // 揹包物品ID
    DWORD dwBB_WPSL;        // 揹包物品數量
    DWORD dwBB_WPLX;        // 揹包物品類型
    DWORD dwBB_WPSLMax;        // 揹包物品最大數量
    WCHAR wcBB_WPName[128];    // 揹包物品名稱(寬字符)
    CHAR  szBB_WPName[32];    // 揹包物品名稱
    DWORD dwBB_WPPY1;        // 物品名稱偏移1
    DWORD dwBB_WPPY2;        // 物品名稱偏移2

    // ---------------------------------------------------------
    HWND hWndGame = ::FindWindow(NULL, "Element Client");
    DWORD dwGameProcessID;
    ::GetWindowThreadProcessId(hWndGame, &dwGameProcessID);
    HANDLE hGameProcess=::OpenProcess(PROCESS_ALL_ACCESS, 0, dwGameProcessID);

    // ----人物基址---------------------------------------------
    ReadProcessMemory(hGameProcess, (LPCVOID)dwZXBaseAddr, &dwBaseAddr, 4, 0);            // 一級基址
    ReadProcessMemory(hGameProcess, (LPCVOID)(dwBaseAddr + 0x28), &dwBaseAddr, 4, 0);    // 人物基址

    // ----物品信息---------------------------------------------
    ReadProcessMemory(hGameProcess, (LPCVOID)(dwBaseAddr + 0x880), &dwBB_Addr, 4, 0);        // 揹包地址
    ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_Addr + 0x10),  &dwBB_GeShu, 4, 0);        // 揹包格數
    ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_Addr + 0x0C),  &dwBB_FirstAddr, 4, 0);    // 揹包首地址

    CString strTemp;    // 顯示

    for( DWORD i = 0; i < dwBB_GeShu; i++ )
    {
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_FirstAddr + 4 * i), &dwBB_TempAddr, 4, 0);    // 讀取揹包物品偏移
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + 0x08),  &dwBB_WPID, 4, 0);        // 讀取揹包物品ID
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + 0x04),  &dwBB_WPLX, 4, 0);        // 讀取揹包物品類型
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + 0x14),  &dwBB_WPSL, 4, 0);        // 讀取揹包物品數量
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + 0x18),  &dwBB_WPSLMax, 4, 0);        // 讀取揹包物品最大數量
        if( dwBB_WPLX < 7)            // 物品類型<7 : 藥物,材料...
        {
            dwBB_WPPY1 = 0x68;        // 物品名稱偏移1
            dwBB_WPPY2 = 0x0C;        // 物品名稱偏移2
        }
        else if( dwBB_WPLX < 15 )    // 7<=物品類型<15 : 仙符...
        {
            dwBB_WPPY1 = 0x60;        // 物品名稱偏移1
            dwBB_WPPY2 = 0x04;        // 物品名稱偏移2
        }
        else if( dwBB_WPLX < 20 )    // 15<=物品類型<20 : 配方...
        {
            dwBB_WPPY1 = 0x60;        // 物品名稱偏移1
            dwBB_WPPY2 = 0x0C;        // 物品名稱偏移2
        }
        else                        // 20<=物品類型 : 坐騎...
        {
            dwBB_WPPY1 = 0x60;        // 物品名稱偏移1
            dwBB_WPPY2 = 0x04;        // 物品名稱偏移2
        }
        memset(wcBB_WPName, 0, sizeof(wcBB_WPName));    // 清0
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + dwBB_WPPY1), &dwBB_TempAddr, 4, 0);    // 讀取揹包物品名稱偏移
        ReadProcessMemory(hGameProcess, (LPCVOID)(dwBB_TempAddr + dwBB_WPPY2), wcBB_WPName, 32, 0);        // 讀取物品名稱(寬字符)
        WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)wcBB_WPName, -1, szBB_WPName, sizeof(szBB_WPName), NULL, NULL);

        strTemp.Format("揹包信息:[第%d格/共%d格] : %s [類型:%d, ID:%d, 數量:%d/%d]",
            i+1, dwBB_GeShu, szBB_WPName, dwBB_WPLX, dwBB_WPID, dwBB_WPSL, dwBB_WPSLMax);
        AfxMessageBox(strTemp);
    }

    ::CloseHandle(hGameProcess);
}
'本文轉摘自:【外掛海】 更多精彩內容和詳細出處請參考:http://wghai.com/html/65/n-265.html

 

發佈了18 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章