watch sexy videos at nza-vids!
Trang chủ| Tìm kiếm| Game 1| Game 2| Video phim Hot
title Quảng cáo
Ứng dụng SMS chúc tết 2013 Ứng dụng SMS chúc tết 2013 Những mẫu SMS làm “rung động lòng người”. Bạn có biết SMS qua điện thoại cũng là một “món quà rất có ý nghĩa, rất dễ thương” giành cho người mình yêu quý Tải về máy

Hướng dẫn viết auto cho game

2T_V.I.P [On]
Đang xem: 1
Lượt xem: 19714

ffX, m_OffY; //0x0D18 – toa do Npc trong

Cell 0

...

int m_nPeopleIdx; //0x0DE0 Npc can tan cong, hoac

theo sau

...

int m_nObjectIdx; //0x0DEC Obj can nhat

...

WORD m_RegX; //0x0EC4 – toa do Region

WORD m_RegY;

public:

void GetMapPos0;

};

Toàn bàn đồ được chia thành nhiều vùng, có kích

thước 512x1024, mỗi vùng lại chia thành nhiều cell,

có kích thước là 32x32. Hai biến WORD RegX, RegY

lưu giá trị vùng (Region), các biến MapX, MapY lưu

giá trị của cell; OffX,OffY là toạ độ Npc trong ô đó

giátrị=1024.

Toạ độ của nhân vật được tính như sau:

Code:

#define REGION_WIDTH 512

#define REGION_HEIGHT 1024

#define CELL_WIDTH 32

#define CELL_HEIGHT 32

void CNpc::GetMapPos0

{

*nX = m_RegX*REGION_WIDTH + m_MapX*CELL_

WIDTH + (m_OffX>>10);

*nY = m_RegY*REGION_HEIGHT + m_MapY*CELL_

HEIGHT + (m_OffY>>10);

}

Hàm sẽ trả về nX, nY giá trị toạ độ tuyệt đối của

nhân vật/ Npc trên bản đồ, tính theo pixel (không

phải toạ độ vẫn thường nói trong GAME đâu). Còn toạ

độ trong Game (thể hiện trên bản đồ nhỏ) sẽ được

tính bằng:

Code:

nOrgX = nX>>8; // dich phai 8 bit, chia cho 256

nOrgY = nY>>9; // dich phai 9 bit, chia cho 512

Đến đây các bạn có thể xác định được toạ độ của

nhân vật cũng như của Npc bất kỳ trong mảng 256

Npc rồi, và do đó sẽ xác định được khoảng các giữa

chúng. Vấn đề là khi quái bị chết, không phải tất cả

dữ liệu trong đối tượng bị xoá, trừ khi có quái hoặc

player khác được nạp vào vùng nhớ đó. Tôi có thấy 1

địa chỉ ở OFFSET 0x000C, tạm đặt tên biến là m_

NextAdd vì thấy nó lưu các địa chỉ quanh quanh trong

mảng 256 Npc, khi quái chết, hoặc ra khỏi vùng nhớ

(đi ra xa), giá trị m_NextAdd được đặt về 0.

Vậy thuật toán đơn giản để tìm quái để tấn công sẽ

như sau:

Code:

CNpc Player; Npc;

int nX, nY;

int nMinIndex, nMinDistance=2000;

//Read PLAYER information

lpCurAdd = lpBaseAdd + NPC_DATA_SIZE;

ReadProcessMemory(m_hVLProcess, lpCurAdd,

(LPVOID)&Player, sizeof(CNpc), NULL);

for 0

{

//Read NPC information

lpCurAdd = lpBaseAdd + i*NPC_DATA_SIZE;

ReadProcessMemory(m_hVLProcess, lpCurAdd,

(LPVOID)&Npc, sizeof(CNpc), NULL);

if (!Npc.m_NextAdd) continue; // Npc does not exist

if (Npc.m_CurLife<=0 || Npc.m_NpcKind != 0) continue;

//Xac dinh toa do quai

Npc.GetMapPos(int &nX, &nY);

//Tinh khoang cach den nhan vat

int nDistance = ...

//Kiem tra xem khoang cach la nho nhat de tan cong

truoc

if (nDistance<=nMinDistance)

{

nMinDistance = nDistance;

nMinIndex = i;

}

}

//Player.m_nPeopleIdx = nMinIndex; // Tan cong

quai o gan nhat

SendMessage(WM_HOOK_WRITE,...); // Ghi gia tri

vao bo nho Game thong qua Hook

Vòng for trên tôi viết đơn giản hoá để dễ hiểu, các

bạn có thể viết thêm các chức năng kiểm tra lag (sau

khi đánh một lúc mà quái ko mất máu thì đổi con

khác). Có 1 lưu ý nhỏ ở đây là khi máu quái = 0 nó vẫn

sống, < 0 nó mới chết nên trong việc kiểm tra đánh

quái, các bạn đánh đến khi máu < 0 thì mới search

tiếp con khác. Đó là việc ở trước vòng for này, còn

trong vòng for ở trên vì sao tôi vẫn kiểm tra Npc.m_

CurLife<=0 thì bỏ qua Npc, các bạn có thể tự tìm hiểu

nhé.

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

đánh, tự nhặt đồ (tiếp theo)

Khi các bạn đã có thể lấy toạ độ quái thì nên chọn

thuật toán đánh quái ở gần trước. Theo tôi mình ko

nên chọn phương pháp đánh quái ít máu trước vì sẽ bị

KS hết điểm kn và nhân vật phải chạy tới chạy lui tít

xa, không tối ưu.

Tiếp theo ta sẽ nghiên cứu mảng lưu th
<<12345>>
Cùng Chuyên Mục:
Hướng dẫn viết auto cho game
? 2013-01-10 / 07:34:22

» Ads:

» Liên kết
Facebook Twitter
SEO : Bạn đến từ :
title Thống kê site
C-STAT
U-ON
Thời gian load trang: 0.000