Làm thế nào để các bot trò chơi nhận thức thế giới trò chơi và các thực thể khác?


52

Câu hỏi này đã xuất hiện trong đầu tôi một lúc ... chủ yếu là vì tôi thấy các bot cho tất cả các loại trò chơi như WoW và những người khác. Câu hỏi của tôi là; Làm thế nào để các bot biết những gì đang xuất hiện trên màn hình? Tôi không chơi WoW vì vậy ví dụ của tôi có thể sai nhưng nếu ví dụ có một con quái vật, làm thế nào bot biết con quái vật đó ở đâu trên màn hình và làm thế nào để nó biết cách tương tác với nó?

Bạn có thể áp dụng điều này cho bất kỳ trò chơi nào hay nó cụ thể cho từng trò chơi? Tôi xin lỗi nếu câu hỏi không rõ ràng ... và tôi không hỏi cách tạo bot, hơn nữa hỏi cách họ phát hiện ra những thứ trên màn hình vì nó khá hấp dẫn đối với tôi!

Cảm ơn trước :)


14
Hầu hết thời gian, các bot này móc vào bộ nhớ của trò chơi và trực tiếp đọc vị trí của yếu tố trò chơi, thay vì cố gắng hiểu những gì trên màn hình.
Alexandre Desbiens

2
Aceboy1993, bạn có phải là lập trình viên? Vui lòng chỉnh sửa câu hỏi và cho chúng tôi biết một trong hai cách. Các câu trả lời có lẽ cần phải được thực hiện một chút khác nhau, tùy thuộc vào điều đó.
Panzercrisis

3
Chỉ để được rõ ràng; bạn đang nói về tự động hóa không tích hợp của trò chơi, phải không? Bot nông nghiệp vàng, aimbots, và như vậy? Hay bạn chỉ có nghĩa là người chơi AI?
Anko

Xin chào, tôi là một lập trình viên. Vâng, tôi đang nói về các bot nuôi vàng và các bot nhắm nhưng tôi cũng quan tâm đến người chơi AI :)
TheRapture87

3
@ Aceboy1993 Bao gồm cả hai sẽ làm cho câu hỏi này quá rộng. Hãy chia chúng ra.
Cột

Câu trả lời:


77

Có nhiều điểm mà bot có thể tự tiêm vào trò chơi.

  • Màn hình là một trong số đó, nhưng cho đến nay không phải là hữu ích nhất. Tuy nhiên, tôi đã từng thấy một aimbot rất sớm cho Counter Strike sử dụng mã màu. Nó đi kèm với các mô hình nhân vật thay thế với kết cấu một màu (trò chơi đủ thân thiện với mod để cho phép điều này) và sau đó chỉ phát hiện các pixel của các màu đó. Không phải là một phương pháp rất hiệu quả, mặc dù. Lúc đó nó đã khá lộn xộn và ngày càng trở nên kém khả thi hơn vì các công cụ đồ họa ngày càng trở nên mạnh mẽ hơn, điều đó có nghĩa là càng ngày càng có nhiều chi tiết để nhầm lẫn bất kỳ thuật toán nhận dạng quang học nào.

  • Một điểm khác là đọc bộ nhớ trực tiếp [1] . Có thể có một chương trình trên máy tính của bạn đọc bộ nhớ của người khác. Vì vậy, nhà phát triển chỉ cần tìm ra địa chỉ bộ nhớ mà trò chơi đang lưu thông tin có liên quan đến bot. Có những công cụ hỗ trợ nhà phát triển tìm kiếm những gì họ muốn bằng cách tạo một hình ảnh bộ nhớ và cung cấp các công cụ tìm kiếm khác nhau. Một biện pháp đối phó là sử dụng ngẫu nhiên bố cục địa chỉ, nhưng một bot thông minh có thể vẫn có thể tìm thấy những gì họ đang tìm kiếm tự động.

  • Có thể sửa đổi các trò chơi thực thi chính nó. Để làm được điều này, các nhà phát triển bot cần có khả năng đọc và lập trình trong trình biên dịch chương trình, điều này không khó với một số thực hành. Sau đó, họ tìm kiếm mã xử lý thông tin mà họ quan tâm và viết lại để chuyển nó đến bot của họ. Một biện pháp đối phó có thể có từ quan điểm của nhà phát triển trò chơi là sử dụng obfuscator để làm cho mã trình biên dịch trò chơi không thể đọc được, nhưng chúng thường không tốt cho hiệu suất và có nhiều công cụ cho nhiều obfuscator làm đảo ngược công việc của họ.

  • Và sau đó là mã mạng. Trong một trò chơi trực tuyến, máy chủ sẽ gửi các thuộc tính và vị trí của tất cả các đối tượng trong trò chơi qua mạng. Luồng dữ liệu mạng giữa máy chủ và máy khách có thể bị chặn và phân tích. Một công cụ phổ biến để làm điều này là wireshark. Khi nhà phát triển thiết kế ngược mã mạng, họ có thể viết một bot chặn lưu lượng mạng giống như Wireshark và sử dụng thông tin để đưa ra quyết định. Khi nhà phát triển có động lực hơn, họ thậm chí có thể phát triển một ứng dụng khách hoàn chỉnh từ đầu, thực hiện giao thức mạng và chơi trò chơi mà không cần có bất kỳ đầu ra đồ họa nào. Những bot như vậy rất phổ biến với những người nông dân vàng vì không có đầu ra đồ họa, khách hàng thường thân thiện với tài nguyên hơn rất nhiều, điều đó có nghĩa là họ có thể chạy rất nhiều trong số chúng cùng một lúc trên một máy chủ nhỏ.


1: Kể từ khi bạn đề cập đến WoW, đáng để chỉ ra rằng chương trình đóng chai WoWGlider sớm và khét tiếng đã sử dụng truy cập bộ nhớ trực tiếp. Blizzard có một chương trình con tên là Warden được thiết kế để phát hiện và chặn các chương trình bên ngoài truy cập vào trạng thái trò chơi nội bộ của WoW. Do chương trình bot phá vỡ sự bảo vệ này và đọc bộ nhớ mà không được phép, vụ kiện năm 2006 MDY v Blizzard đã được quyết định có lợi cho Blizzard với lý do nhà sản xuất bot khuyến khích và cho phép người dùng của mình vi phạm bản quyền và vi phạm DMCA .


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Josh

18

Bots là người chơi. Họ chỉ đọc vị trí của người chơi / quái vật từ máy chủ giống như mọi người chơi khác và sử dụng các giá trị đó kết hợp với tập lệnh AI đơn giản để thực hiện các hành động trong trò chơi bằng cách mô phỏng các nét trên bàn phím và nhấp chuột theo chương trình. Nếu các bot thực sự có một thuật toán để phát hiện quái vật nào trên màn hình và tương tác với nó, thì đó sẽ là một phần mềm khá ấn tượng, đáng giá hàng triệu. Về cơ bản đó là AI cho robot.


2
Thật đơn giản để thực hiện một số kiểm tra tắc và các tia tia để kiểm tra xem bot có nhìn thấy quái vật hay không và sau đó sử dụng trạng thái hoạt hình để kiểm tra xem quái vật đang làm gì.
quái vật ratchet

Để làm điều đó, bạn sẽ phải thiết kế ngược lại trò chơi, thực hiện đúc tia và cũng đọc trạng thái hoạt hình của quái vật, sẽ yêu cầu tiêm mã và sửa đổi .exe. Làm thế nào đơn giản hơn việc đọc các gói mạng mà bạn nhận được từ máy chủ (sử dụng wireshark như Phillip đề xuất) và sau đó chỉ cần có một tập lệnh AI để mô phỏng các hành động bàn phím / chuột, dựa trên các gói mạng?
dimitris93

2
Tôi đã giả sử một bot "đối thủ AI" chứ không phải là một bot khách được điều chỉnh.
quái vật ratchet

3
@ratchetfreak ơi bây giờ nó có ý nghĩa. Tham chiếu WoW trong câu hỏi thực sự ngụ ý rằng các "bot" về cơ bản là nông dân vàng, không phải là đối thủ của AI.
dimitris93

7

Phillip đã đưa ra một cái nhìn tổng quan tuyệt vời về cách thức hoạt động của hầu hết các bot, nhưng tôi chỉ muốn đề cập đến mọi thứ chi tiết hơn một chút, vì tôi có một chút kinh nghiệm cá nhân phát triển trên hoặc cho tất cả các loại bot mà anh ấy đề cập.

Trong Runescape, có một dự án lớn (RSBot) sẽ sao chép nội dung của bộ nhớ từ máy khách Runescape vào bộ nhớ cục bộ của nó, nơi nó có thể xem toàn bộ trạng thái của trò chơi mà không có nguy cơ bị máy khách bắt gặp. Nó đòi hỏi một chút kỹ thuật đảo ngược để xác định vị trí cần tìm trong bộ nhớ để tìm con trỏ tới dữ liệu, nhưng một khi họ đã làm như vậy, họ đã đưa ra một API để tận dụng thông tin. Nó sẽ biết chính xác nơi nào trên thế giới bằng cách lấy tọa độ của một vật thể và sau đó biến đổi chúng bằng ma trận biến đổi camera để có được vị trí trên màn hình. Các mặt nạ hit cũng có thể đọc được, vì vậy thật đơn giản để xác định chính xác phạm vi di chuyển chuột vào để có được kết quả mong muốn.

Bot cung cấp một loạt thông tin gỡ lỗi, chẳng hạn như các chú thích cho nhà phát triển biết tọa độ ô vuông ở đâu, đối tượng này có ID nào, ID nào thuộc về một mục nhất định, v.v. Thông tin này sau đó có thể được sử dụng để tạo bot. Quá trình thực hiện các kịch bản bot thực sự khá đơn giản. Khung này cung cấp nhiều chức năng tiện ích, chẳng hạn như move_to(world_coordinates)hoặc mouse_move(x,y)sẽ thực hiện các hành động được chỉ định theo cách hơi đáng tin cậy (di chuyển chuột dọc theo một spline ngẫu nhiên, di chuyển nhiều lần qua cả bản đồ nhỏ và màn hình, v.v.)

Cũng trong Runescape, bạn có tùy chọn giảm đáng kể chất lượng đồ họa. Thực sự khá dễ dàng để tạo ra một số loại bot nhất định bằng cách quay màn hình và áp dụng một số khái niệm thị giác máy tính cơ bản để xây dựng một mô hình của thế giới. Tôi đã tạo ra cả bot nguyền rủa và bot nấu chảy bằng kỹ thuật này, cả hai đều hoạt động khá tốt. Nó sẽ chỉ lấy khung hình, tăng độ bão hòa hết mức có thể, và sau đó cố gắng trích xuất các mẫu từ đó có thể tạo bản đồ xác suất cho các vùng nhấp chuột.

Trong trường hợp bot nguyền rủa, mục tiêu là một con quỷ nhỏ hơn, nó chỉ là một thứ màu đỏ khổng lồ, rất tầm thường để tìm thấy. Trong trường hợp bot nấu chảy, nó sẽ tìm kiếm một hình thang nhỏ màu cam được bao quanh bởi màu xám, và đó sẽ là lò lửa. Nó cũng sẽ cố gắng tìm một hình chữ 'L' lớn, màu xám nhạt, sẽ là bàn ngân hàng. Điều đó chỉ được thực hiện với thu hẹp và heuristic cơ bản. Nó cũng có thể tự định hướng với la bàn tiện dụng bên cạnh bản đồ nhỏ, vì vậy nó có thể định hướng máy ảnh ở vị trí đáng tin cậy hơn để tìm các đối tượng mục tiêu.

Trong các trò chơi Nexon khác nhau, các máy chủ rất tin tưởng của khách hàng. Tôi đã lạm dụng tấn này trong Maplestory bằng cách sửa đổi bản đồ để loại bỏ các mối nguy hiểm hoặc thêm các sợi dọc để bot không cần phải quá phức tạp. Tôi cũng sẽ theo dõi lưu lượng đến và từ máy chủ để xây dựng mô hình thế giới mà sau đó có thể được sử dụng để nhanh chóng tìm và tiêu diệt quái vật.

Khi tôi nhận ra rằng tôi không thực sự chơi MMO nữa và chỉ tự động hóa chúng, tôi quyết định ngừng chơi hoàn toàn. Nếu tôi không lo lắng về việc phơi bày bản thân một cách hợp pháp, có lẽ tôi đã giết chết các bot MMO, nhưng tôi thực sự không muốn bị kiện. Đó là lý do tại sao tôi dành thời gian để lập trình thực sự những ngày này!


Amen ở đoạn cuối đó. Tôi tìm thấy lập trình bằng cách 1) chơi WoW 2) đóng chai WoW 3) bắt đầu viết bot của riêng tôi cho WoW. Kiến thức lập trình tôi có được chỉ sau 2 năm có giá trị hơn bất kỳ thứ gì tôi học được khi học (tốt nhất là viết chương trình 'thực tế' ít nhất).
Sebastian Graf

2

Câu trả lời của Phillip rất hay, nhưng chỉ là một ghi chú nhanh về mẫu Model / View / Controller hoặc viết tắt là MVC.

Màn hình của bạn là một phần của "chế độ xem", trình bày dữ liệu từ "mô hình", đây là trạng thái thực của trò chơi nếu bạn thích. Các bot và nhân vật của bạn, tất cả 'tồn tại' (theo một nghĩa nào đó) trong mô hình. Hãy tưởng tượng nếu bạn rút phích cắm màn hình của mình - trò chơi sẽ tiếp tục mặc dù chế độ xem đã biến mất.

Trong một trò chơi nối mạng, khái niệm "mô hình" hơi phức tạp, vì bạn thực sự có rất nhiều mô hình. Bạn có mô hình trên máy chủ, và sau đó là một mô hình trên mỗi máy khách, nó tự cập nhật một phần do dữ liệu mà nó nhận được từ máy chủ. Bạn có thể nghĩ về "mô hình" là bao gồm mô hình của máy chủ và mô hình của khách hàng của bạn hoặc bạn có thể nghĩ đó chỉ là mô hình của khách hàng của bạn. Dù bằng cách nào, đây là nơi các bot sống. Vì vậy, "nhận thức" của họ, mà chúng ta có thể sử dụng như một cách viết tắt cho dữ liệu và trạng thái của họ, dựa trên trạng thái của mô hình tại thời điểm đó và sự tương tác giữa các thực thể / đối tượng khác nhau trong mô hình đó. Trong thực tế, mỗi bot có thể có một chức năng gọi là "refreshState" chạy một lần trên mỗi khung hoặc thứ gì đó và khiến nó cập nhật nó '


0

Họ có thể đọc các cuộn dây từ một tập tin hoặc máy chủ nhưng cũng có hệ thống phát hiện va chạm tia. Người ta thường sử dụng các tia đi từ bot (trong trường hợp đó) ra bên ngoài anh ta. Nếu tia va chạm với một cái gì đó thì nó sẽ trả lại một số thông tin cho bot như nếu thứ mà tia tìm thấy là người chơi, bot, động vật hay một bức tường đơn giản. Đó là bởi vì trong trường hợp người chơi và bot chẳng hạn, họ có một viên nang vô hình liên quan đến họ hoàn toàn với thông tin về loại của nó chẳng hạn (con người, bot, ...). Với điều đó, họ có thể tránh được sự cố với các bức tường và các thành phần khác nếu họ đang theo dõi bạn chẳng hạn.

Bạn có thể thấy phần Phát hiện va chạm của Trang này


Điều đó sẽ yêu cầu bạn tiêm mã vào trò chơi thực tế
dimitris93

Phải, tất nhiên. Tất cả đều được lập trình nhưng nó hữu ích cho các đường dẫn hoặc trường hợp miễn phí như bot theo bạn, v.v. Trong các trò chơi 3D là cách phổ biến nhất AFAIK và đã nghiên cứu ít nhất một trò chơi không phải là mmorp ... có thể wow có tất cả thông tin trên máy chủ nhưng khác với một con bọ cạp lớn.
Megasa3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.