Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Lập trình auto game, những vấn đề trong lập trình auto game?

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    2

    Mặc định Lập trình auto game, những vấn đề trong lập trình auto game?

    tôi đang nguyên cứu về lập trình auto cho game nhưng mà ko biết từ đâu cả. Ai cao thủ về mảng này chỉ cho tôi với. Tôi phải nguyên cứu về những cái gì trong C/C++ và cách hoạt động của các chương trình auto game như thế nào. AI có mã nguồn về mấy cái này có thể chia sẽ ko tôi được ko ?

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn ngocnl hướng dẫn viết auto võ lâm : cám ơn ngocnl

    Đáp ứng lòng mong mỏi của các bạn tôi xin viết bài này để tổng hợp lại các đoạn code và hướng dẫn các bạn viết một phần mềm tự chơi hoàn chỉnh.

    Tôi sẽ lần chia bài viết thành từng phần theo thứ tự như sau:

    Bài 1 – Lấy các thông tin cơ bản về nhân vật và tự BUFF máu, mana
    Bài 2 – Lấy thông tin về tọa độ nhân vật, tự tìm quái đánh, tự nhặt đồ
    Bài 3 – Điều khiển nhân vật chạy

    Ở đây không bàn đến việc dùng kỹ thuật đồ họa và chiếm chuột để điều khiển nhân vật. Các phần mềm hiện nay thường dùng chương trình chính Autoplay thực hiện việc đọc bộ nhớ Game lấy thông tin và dùng cơ chế Hook để ghi thông tin cần thay đổi vào bộ nhớ Game. Một điểm lưu ý là khi Hook sẽ chiếm tài nguyên, nên ta có thể dùng một mẹo nhỏ, sau khi Hook ta Unhook ngay lập tức và dùng LoadLibrary để nạp hook.dll vào bộ nhớ game, thay đổi địa chỉ WndProc để thực hiện nhiều ý đồ khác.
    (Các bạn có thể tham khảo bài viêt sau để biết cách dùng Hook và mẹo này: http://www.codeproject.com/threads/winspy.asp
    Ngoài ra, để chương trình có thêm nhiều chức năng, có thể ta sẽ phải gọi các hàm trong game_y.exe và khi đó ta phải mở rộng cái Hook.dll để có thể hook + inject code vào Game process (sẽ nói trong bài 3).

    Bài 1 - Lấy các thông tin cơ bản về nhân vật và tự BUFF máu, mana
    Tất cả các nhân vật (người chơi, quái, Npc...) được lưu thông tin trong mảng gồm 256 đối tượng, mỗi đối tượng kích thước 0x7E4C, địa chỉ lưu địa chỉ của mảng trên là 0x00D3A570. Đối tượng 0 để trống, đối tượng 1 là người chơi, còn lại là quái & Npc.
    Khi chưa dùng cơ chế inject code nói trên ta có thể đọc bộ nhớ của Game bằng hàm ReadProcessMemory. Dưới đây là minh họa lớp đối tượng Npc và một số biến thành viên cần dùng (phần ... là phần dữ liệu chưa dùng tới, các bạn phải đặt một mảng BYTE với kích thước tương ứng vào đó để các địa chỉ OFFSET của các biến được chính xác)

    Visual C++ Code:
    1. #define     NPC_BASE_ADD    0x00D3A570
    2. #define     NPC_DATA_SIZE    0x00007E4C
    3. #define    MAX_NPC        256
    4. #define     PLAYER_INDEX    1
    5.  
    6. class CNpc
    7. {
    8.     ...
    9.     DWORD        m_NpcKind;    //0x0020 1=mod, 1=player,...
    10.     ...
    11.     DWORD        m_Doing;    //0x00EC 1=stand, 2=walk, 3=run...
    12.     ...
    13.     int        m_CurLife;    //0x0B44
    14.     int        m_CurLifeMax;
    15.     int        m_CurLifeRep;
    16.     int        m_CurMana;
    17.     int        m_CurManaMax;
    18.     ...
    19.     BOOL        m_bRideHorse;    //0x0D58
    20.     char        Name[32];        //0x0D5C Ten nhan vat
    21.     int        m_nSex;
    22.     ...
    23.     BOOL        m_FightMode;    //0x0EAC
    24.    
    25. };
    26.  
    27. // Tim cua so va xac dinh Game Process Handle o day
    28. ...
    29. CNpc Npc;
    30. LPBYTE lpBaseAdd, lpCurAdd;
    31. //Read start Address of Npc Array
    32. ReadProcessMemory(m_hVLProcess, (LPBYTE)NPC_BASE_ADD, (LPVOID)&lpBaseAdd, 4, NULL);
    33. //Start Address of PLAYER
    34. lpCurAdd = lpBaseAdd + PLAYER_INDEX*NPC_DATA_SIZE;
    35. //Read PLAYER ìnormation
    36. ReadProcessMemory(m_hVLProcess, lpCurAdd, (LPVOID)&Npc, sizeof(CNpc), NULL);
    37. ...


    Khi đọc được các thông số máu và mana rồi ta có thể dùng hàm PostMessage(hWnd, WM_KEYDOWN...) để gửi phím 1, 2, 3. Các bạn thấy ở trên có 1 biến m_FightMode dùng để xác định nhân vật đang ở chế độ đánh (ở bản đồ có quái) hoặc đang ở trong thành (không dùng chiêu được). Căn cứ vào đó ta có thể gửi phím 1, 2, 3 khi cần thiết (m_FightMode=TRUE). Nếu nhân vật về thành rồi khỏi bơm máu nữa (nhiều khi dính độc về cả phút mà cứ đứng trong thành bơm máu thì phí quá).

    Linh tinh khác: Game VLTK có định nghĩa một số hàm macro có thể dùng ở dòng gõ CHAT, ví dụ:
    “/Switch Horse”, “/Switch Sit”, “/SayPhrase 0”, , “/SayPhrase 1” các bạn thử mà xem, cũng thũ vị lắm. Các bạn mở file UIconfig.ini sẽ thấy nhiều hàm hơn. Dưới đây là đoạn code mà có thể thêm vào chương trình của mình dùng để chat hoặc chạy một hàm macro trong Game. Bạn có thể lập trình lên xuống ngựa hay ngồi xuống, đứng lên, ... mà ko phải dùng WM_KEYDOWN gửi phím tắt V, M (vì ở chế độ phím Mặc định, nhấn V sẽ ko ngồi đâu).

    Visual C++ Code:
    1. void PostChatMessage(LPCTSTR szChatMsg)
    2. {
    3.     //Set focus to CHAT edit control
    4.     ::PostMessage(m_hVLWin, WM_KEYDOWN, VK_RETURN, 0x001C0001);
    5.     //Clear CHAT edit control
    6.     ::PostMessage(m_hVLWin, WM_KEYDOWN, VK_DOWN, 0x00500001);
    7.     while (szChatMsg[0])
    8.     {
    9.         ::PostMessage(m_hVLWin, WM_CHAR, LOBYTE(szChatMsg[0]), 0);
    10.         szChatMsg++;
    11.     }
    12.     //Set focus to Game Window
    13.     ::PostMessage(m_hVLWin, WM_KEYDOWN, VK_RETURN, 0x001C0001);
    14. }

    Đến đây các bạn có thể lập được một chương trình tự buff mana, ngồi rao bán hàng rồi đấy. Ở bài 2 tôi sẽ nói về cách xác định tọa độ nhân vật (cũng giống như của các Npc khác) và đồ. Địa chỉ OFFSET tọa độ của nhân vật & Npc không phải là 0x10F8 như các bạn tưởng đâu, đó là địa chỉ đích Npc sẽ chạy tới, sẽ đánh tới... nếu nhân vật ngồi xuống, giá trị này sẽ bằng 0.



    Bài 2 – Lấy thông tin về tọa độ nhân vật, tự tìm quái đánh, tự nhặt đồ


    Bây giờ đến phần toạ độ của nhân vật. Bổ sung thêm các biến thành viên vào lớp CNpc, chúng ta có các thông tin về toạ độ và thông tin đối tượng cần đánh/ theo sau/ đồ cần nhặt:

    Visual C++ Code:
    1. class CNpc
    2. {
    3. public:
    4.     ...
    5.     int    m_NextAdd;    //0x000C – xac dinh Npc ton tai hay ko
    6.     ...
    7.     int    m_ActiveSkill;    //0x0114 – ky nang dang su dung
    8.     ...
    9.     int    m_MapX, m_MapY, m_MapZ;    //0x0D0C – toa do Cell
    10.     int    m_OffX, m_OffY;        //0x0D18 – toa do Npc trong Cell (*1024)
    11.     ...
    12.     int    m_nPeopleIdx;    //0x0DE0 Npc can tan cong, hoac theo sau
    13.     ...
    14.     int    m_nObjectIdx;    //0x0DEC Obj can nhat
    15.     ...
    16.     WORD    m_RegX;        //0x0EC4 – toa do Region
    17.     WORD    m_RegY;
    18. public:
    19.     void GetMapPos(int *nX, int *nY);
    20. };

    Xin ngừng trích dẫn....... ở đây... (đang bận)
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    01 2012
    Bài viết
    1

    Ban oi minh moi hoc c/c# can ban ha`. Nhung minh rat thich mon lap trinh nay, nhat la lap trinh autogame. hien nay minh dang choi game kiem the . Ban co the giup minh giai thich nhung lenh o tren chi tiet 1 chut duoc ko, thanks ban nhieu lam.

Các đề tài tương tự

  1. Cần tìm người thiết kế auto cho game !
    Gửi bởi kyupro trong diễn đàn Việc làm IT(tự do)
    Trả lời: 0
    Bài viết cuối: 11-12-2013, 10:37 AM
  2. xin tài liệu lập trình hệ thống(viết auto game)
    Gửi bởi truongtanphu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 20-01-2013, 01:05 AM
  3. MouseModz Auto UP TIM,Auto KILL Boss,BUG HD,ĐÀO XINH..Auto Tim 6114,Auto Tim 6114,Auto Tim 6114
    Gửi bởi mrkhang trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-06-2012, 12:47 AM
  4. Hướng đi để tạo 1 auto Game?
    Gửi bởi SVPro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 14-08-2008, 04:32 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn