2010-04-29 34 views
28

Điều tôi luôn tự hỏi, đặc biệt là vì nó đã truyền cảm hứng cho tôi để bắt đầu lập trình khi tôi còn là một đứa trẻ, đó là cách chương trình trò chơi điện tử hoạt động? Tôi chắc chắn có rất nhiều phương pháp khác nhau, nhưng về tự động hóa cho MMORPG thì sao? Hoặc thậm chí là các bot kiểu FPS?Bots trò chơi điện tử?

Tôi đang nói về các chương trình tự động hóa do người chơi tạo.

+2

Có sự khác biệt lớn giữa hai loại. Tôi không có bất kỳ kinh nghiệm nào, nhưng tôi khá chắc chắn rằng các game MMORPG đang mô phỏng đầu vào của người dùng (thực sự nhấp vào các phần của màn hình hoặc mô phỏng các phím bấm), trong đó các trò chơi FPS đi kèm với trò chơi được viết bởi các lập trình viên của trò chơi và có thể có quyền truy cập vào nhiều thông tin hơn (như nơi các bức tường được để họ không phải màn hình cạo để tìm ra nếu họ đang va vào tường) –

+8

'Cảnh báo! 'Câu hỏi này dường như được đăng bởi một bot! _Hey_ đang theo dõi chúng tôi để xem chúng tôi có hiểu họ không. ;-) Joke ngoài, câu hỏi này là khá rộng và nông, không giống như một số công cụ chúng tôi nhận được từ các chương trình ... – mjv

Trả lời

41

Để 'bot' một trò chơi, bạn cần có thể thực hiện hai việc theo chương trình: phát hiện những gì đang xảy ra trong trò chơi và cung cấp đầu vào cho trò chơi.

Phát hiện những gì đang xảy ra trong trò chơi có xu hướng khó hơn trong hai trò chơi. Một vài phương pháp để làm điều này là:

  • Screen-Scraping kỹ thuật này ghi lại hình ảnh trên màn hình và phân tích nó, tìm kiếm những thứ như kẻ thù, tình trạng máy nghe nhạc, điện-up, các thông điệp trò chơi, đồng hồ thời gian, vv Điều này có xu hướng là một phương pháp đặc biệt khó khăn.Kỹ thuật OCR có thể được sử dụng để xử lý văn bản, nhưng nếu văn bản được viết trên phần đầu của thế giới trò chơi (thay vì trên phần tử giao diện người dùng có nền chắc chắn), phông nền luôn thay đổi có thể gây khó khăn cho bạn để có được kết quả chính xác và nhất quán. Việc tìm các đối tượng không phải văn bản trên màn hình có thể còn khó khăn hơn, đặc biệt là trong thế giới 3D, vì có nhiều vị trí và hướng khác nhau mà một vật thể có thể tồn tại.
  • Audio Cues Trong một số trò chơi, hành động và sự kiện được đi kèm với hiệu ứng âm thanh độc đáo. Có thể phát hiện các sự kiện này bằng cách giám sát đầu ra âm thanh của trò chơi và kết hợp nó với bản ghi âm của hiệu ứng âm thanh liên quan. Một số trò chơi cho phép người chơi tự cung cấp hiệu ứng âm thanh cho các sự kiện, cho phép sử dụng hiệu ứng âm thanh được thiết kế để dễ nghe và lọc.
  • Giám sát bộ nhớ Nếu hoạt động bên trong của trò chơi được hiểu rõ, thì bạn có thể theo dõi trạng thái của trò chơi bằng cách kiểm tra không gian bộ nhớ của trò chơi. Một số công cụ gian lận cho các hệ thống bàn điều khiển (chẳng hạn như Game Genie) sử dụng phương pháp này. Bằng cách phát hiện bộ nhớ trò chơi cập nhật, có thể phát hiện những gì trò chơi đang làm. Một số trò chơi ngẫu nhiên các vị trí bộ nhớ mà chúng sử dụng mỗi khi chúng được khởi chạy trong một nỗ lực để loại bỏ lỗ hổng này.
  • Phân tích gói Với trình điều khiển thích hợp, bạn có thể chặn các gói dữ liệu của trò chơi khi chúng được gửi đến hoặc truy xuất từ ​​thẻ mạng của bạn (đối với trò chơi được chơi trực tuyến). Analysis của các gói này có thể tiết lộ những gì khách hàng trò chơi của bạn đang giao tiếp với máy chủ, thường xoay quanh hành động của người chơi/kẻ thù.
  • Game Scripting Một số trò chơi có giao diện tập lệnh tích hợp sẵn. Nếu có, đây thường là phương pháp dễ nhất vì nó là phần mềm trò chơi được thiết kế để làm (các phương pháp trước đây thường được tính là "hack"). Một số tập lệnh phải được chạy trong trò chơi (thông qua bảng điều khiển hoặc thông qua hệ thống tiện ích) và một số có thể được chạy bởi các chương trình bên ngoài giao tiếp thông qua trò chơi qua API được xuất bản.

Tạo sự kiện nhập trở lại vào trò chơi thường là nhiệm vụ dễ dàng hơn. Một số phương pháp bao gồm:

  • Memory "Poking" Tương tự như phần kiểm soát bộ nhớ trên, bộ nhớ poking là hành vi ghi dữ liệu trực tiếp vào không gian bộ nhớ của trò chơi. Đây là phương pháp được sử dụng bởi Game Genie để áp dụng mã cheat của nó. Với sự phức tạp của các trò chơi hiện đại, đây là một nhiệm vụ rất khó khăn và có khả năng làm hỏng toàn bộ trò chơi.
  • Giả lập đầu vào Tín hiệu bàn phím hoặc chuột "giả" có thể được tạo thay cho tương tác trực tiếp của con người. Điều này có thể được thực hiện trong phần mềm bằng cách sử dụng các công cụ như AutoIt. Cũng có thể sử dụng các phần cứng, chẳng hạn như các thiết bị kết nối với cổng USB hoặc PS/2 của máy tính và xuất hiện với hệ thống là bàn phím, nhưng thay vào đó tạo các sự kiện nhấn phím giả dựa trên tín hiệu nhận được từ máy tính. cổng nối tiếp). Những phương pháp này có thể khó phát hiện hơn cho các trò chơi.
  • Kịch bản trò chơi Như đã đề cập ở trên, một số trò chơi cung cấp các phương pháp tích hợp để điều khiển chương trình và tận dụng những công cụ này thường là kỹ thuật đơn giản nhất (nhưng có lẽ không mạnh nhất).

Lưu ý rằng việc chạy 'bot' trong trò chơi thường là vi phạm Điều khoản sử dụng của trò chơi và có thể khiến bạn bị tạm ngưng, cấm hoặc tệ hơn. Ở một số khu vực pháp lý, điều này có thể mang hình phạt hình sự.Đây là một điểm cộng khác cho việc sử dụng khả năng kịch bản dựng sẵn của trò chơi; nếu nó được thiết kế để trở thành một phần của phần mềm trò chơi, thì nhà xuất bản trò chơi có nhiều khả năng sẽ không cấm bạn sử dụng phần mềm đó.

0

Nó được gọi là AI (trí thông minh nhân tạo) và thực sự không phải là khó để tái tạo, một bộ quy tắc và lệnh trong ngôn ngữ lập trình của trò chơi của bạn sẽ làm các trick. Ví dụ như một bot FPS sẽ làm việc bằng cách nhận tọa độ của cơ thể người chơi của bạn và đặt súng bot của đối phương để nhắm vào tọa độ đó và bắt đầu quay khi ở một phạm vi nhất định.

+0

Tôi đang tự hỏi về các kỹ thuật để có được tọa độ thực tế của cơ thể người chơi của bạn, vv. t hiểu làm thế nào tôi sẽ "kết nối" chương trình của tôi với một chương trình khác nếu nó không cung cấp bất cứ điều gì cho tôi để "kết nối" với. – cam

+0

@cam - trong trường hợp trò chơi người thứ nhất hoặc thứ ba (console hoặc PC) AI được tích hợp vào mã trò chơi để nó có quyền truy cập vào tất cả thông tin trò chơi cần thiết. Tôi không chắc chắn về MMORPG, nhưng tôi nghi ngờ rằng mã AI là trong công cụ máy chủ trò chơi. – ChrisF

+0

Kiểm tra hoặc can thiệp vào hoạt động của chương trình khác không phải là cách các thực thể trong trò chơi video được điều khiển. Nói chung có một chương trình thực hiện tất cả logic trên các cấu trúc dữ liệu nội bộ của riêng nó. Cấp, chương trình có thể bao gồm nhiều luồng và quy trình, nhưng với mỗi luồng dữ liệu mà chúng cần là nội bộ. –

10

Khi tôi đã tự mình viết một bot MMORPG đơn giản. Tôi đã sử dụng AutoHotkey.

  • Nó cung cấp nhiều phương pháp để mô phỏng đầu vào của người dùng - một phương pháp sẽ hoạt động. Đó là tẻ nhạt để lập trình một trong những làm việc trong C + + bởi chính mình (Hoặc nhìn vào nguồn của AutoHotkey).
  • Nó có thể trực tiếp tìm kiếm trên màn hình cho các mẫu pixel, thậm chí màn hình trò chơi (DirectX)

Vì vậy, những gì tôi đã làm là để tìm kiếm trên màn hình cho tên của một kẻ thù (Stored như một bức tranh với font chữ của trò chơi) và tập lệnh nhấp một vài pixel bên dưới để tấn công. Nó cũng theo dõi các thanh sức khỏe và chậu nếu nó quá thấp.

Rất trival. Nhưng tôi biết của một bot WoW cũng được thực hiện bằng cách sử dụng AutoHotkey. Và tôi see rất nhiều người khác đã có cùng ý tưởng (tôi không phải là cho WoW, nhưng có lẽ là bất hợp pháp, quá).

More advanced techniques không chụp màn hình mà trực tiếp read the game's memory. Bạn phải làm rất nhiều kỹ thuật đảo ngược để thực hiện công việc này. Và nó ngừng hoạt động khi trò chơi được cập nhật.

4

Làm thế nào để một cá nhân đi về ngày này sang ngày khác?

Đây là vấn đề mà AI trong trò chơi giải quyết.

Bạn muốn thực thể của mình làm gì? Mã thực thể của bạn để làm điều đó. Nếu bạn muốn con quái vật của bạn đuổi theo avatar của người chơi, con quái vật chỉ cần phải đối mặt với avatar và sau đó di chuyển về phía nó. Khi con quái vật đó nhận được trong một khoảng cách thích hợp, nó có thể chọn để cắn avatar người chơi, và sự lựa chọn này có thể đơn giản như AmICloseEnough(monster, player); hoặc phức tạp hơn hoặc thậm chí ngẫu nhiên.

Bots trong FPS là khó khăn để có được đúng bởi vì nó dễ dàng để làm cho họ hoàn hảo nhưng không dễ dàng như vậy để làm cho họ vui vẻ. Ví dụ. họ luôn biết chính xác vị trí của người chơi (gPlayer.GetPosition()), vì vậy, mọi người có thể dễ dàng quay đầu người chơi mỗi lần. Phải mất một chút "nghệ thuật" để làm cho bot di chuyển như con người.

+0

Tôi không biết tại sao điều này có một downvote. +1. –

+0

Tôi đã không downvote nó, nhưng nghĩ rằng nó đã quá không rõ ràng để upvote. – Earlz

+0

Xin lỗi nếu nó không rõ ràng - Tôi không chắc chắn làm thế nào để làm cho nó rõ ràng hơn mặc dù; thực thể của bạn cần một mục tiêu, sau đó mã cần phải tìm ra cách để đạt được mục tiêu đó.Đưa ra câu hỏi (vào thời điểm đó) không có câu trả lời nào tốt hơn thế. (Tôi có thể lấy downvotes nhưng nó sucks khi họ đến sau khi câu hỏi đã được chỉnh sửa và downvote là vì câu trả lời là cho các phiên bản trước của câu hỏi.) –

0

bta đã trả lời rất tốt. Tôi chỉ muốn nói thêm rằng các phương pháp khác nhau là nghi ngờ với các phương tiện phát hiện khác nhau của công ty game. Hacking vào các khách hàng trò chơi thông qua giám sát bộ nhớ hoặc phân tích gói nói chung là dễ dàng phát hiện hơn. Tôi thường không khuyên bạn nên nó vì bạn có thể bị bắt rất dễ dàng.

Cào màn hình được sử dụng với mô phỏng đầu vào thường là cách an toàn nhất để bot trò chơi và không bị bắt. Nhiều người, (bao gồm cả bản thân tôi) đã làm điều đó trong nhiều năm mà không có vấn đề gì.

Ngoài ra, để thêm một bước bổ sung giữa phát hiện những gì đang xảy ra trong trò chơi và cung cấp đầu vào, một số trò chơi yêu cầu tính toán rộng rãi trước khi bạn có thể quyết định loại đầu vào nào cung cấp cho trò chơi. Ví dụ, có một trò chơi mà tôi phải tính toán số lượng tàu để gửi khi tấn công kẻ thù, và điều này dựa trên số lượng tàu tôi có, loại tàu, và ai và loại kẻ thù đó là gì. Tính toán nói chung là phần "dễ dàng" vì bạn có thể làm điều đó thường trong hầu như bất kỳ ngôn ngữ lập trình nào.

-1

Khi tôi thấy rô bốt là kẻ giết người thực sự trong các ngành trò chơi/cờ bạc khác nhau. Tin tặc sử dụng bot để chơi thay cho họ và điều này đặt ra yếu tố đáng tin cậy nghiêm trọng đối với những người khác không bị xâm phạm. Như Ryan đã đề cập đến các bot thông minh nhất sử dụng màn hình cạo nhưng tôi không đồng ý với quan điểm của mình rằng các chương trình quét màn hình không thể bị bắt. Có nhiều dịch vụ ngăn ngừa cào màn hình bao gồm ShieldSquare.

Tuyên bố từ chối trách nhiệm: Tôi là một trong những người đồng sáng lập ShieldSquare

Các vấn đề liên quan