गेम बॉट खेल की दुनिया और अन्य संस्थाओं को कैसे देखते हैं?


52

यह सवाल मेरे दिमाग पर कुछ समय के लिए रहा है ... मुख्य रूप से क्योंकि मैं वाह और अन्य जैसे सभी प्रकार के खेल के लिए बॉट देखता हूं। मेरा सवाल यह है कि; बॉट कैसे जानते हैं कि स्क्रीन पर क्या दिखाई दे रहा है? मैं वाह नहीं खेलता हूं तो मेरा उदाहरण गलत हो सकता है लेकिन उदाहरण के लिए एक राक्षस है, तो बॉट को कैसे पता चलता है कि वह राक्षस स्क्रीन पर कहां है और यह कैसे जानता है कि उसके साथ कैसे बातचीत करनी है?

क्या आप इसे किसी गेम में लागू कर सकते हैं या यह प्रत्येक गेम के लिए विशिष्ट है? मुझे क्षमा करें यदि प्रश्न स्पष्ट नहीं है ... और मैं बॉट बनाने का तरीका नहीं पूछ रहा हूं, तो अधिक यह पूछने पर कि वे स्क्रीन पर चीजों का पता कैसे लगाते हैं क्योंकि यह मेरे लिए काफी आकर्षक है!

अग्रिम में धन्यवाद :)


14
ज्यादातर समय, ये बॉट गेम की मेमोरी पर हुक करते हैं और स्क्रीन पर क्या है, यह समझने की कोशिश करने के बजाय सीधे गेम एलिमेंट की स्थिति को पढ़ते हैं।
— अलेक्जेंड्रे डेसिबेंस

2
Aceboy1993, क्या आप एक प्रोग्रामर हैं? कृपया प्रश्न संपादित करें और हमें रास्ता बताएं। जवाब शायद थोड़ा अलग करने की जरूरत है, उस पर निर्भर करता है।
— पैंज़रक्रिसिस

3
केवल स्पष्ट करने के लिए; आप गेमप्ले के गैर-निर्मित स्वचालन के बारे में बात कर रहे हैं, है ना? सोने की खेती करने वाले बॉट, एंबियोट्स और ऐसे? या आप सिर्फ एआई खिलाड़ियों से मतलब रखते हैं?
— एको

नमस्ते, मैं एक प्रोग्रामर हूँ। हाँ, मैं सोने की खेती करने वाले बॉट और लक्ष्य बॉट के बारे में बात कर रहा हूँ, लेकिन मुझे AI खिलाड़ियों में भी दिलचस्पी है :)
— TheRapture87

3
@ Aceboy1993 दोनों को कवर करने से यह सवाल और भी व्यापक हो जाएगा। कृपया उन्हें विभाजित करें।
— मस्त

जवाबों:


77

ऐसे कई बिंदु हैं जहां एक बॉट खेल में खुद को इंजेक्ट कर सकता है।

  • स्क्रीन उनमें से एक है, लेकिन अब तक सबसे उपयोगी नहीं है। हालाँकि, मैंने एक बार काउंटर स्ट्राइक के लिए एक बहुत ही शुरुआती ऐम्बोट देखा है जिसमें कलर कोडिंग का इस्तेमाल किया गया था। यह एकल-रंग वाले बनावट के साथ वैकल्पिक चरित्र मॉडल के साथ आया था (यह अनुमति देने के लिए खेल काफी अनुकूल था) और फिर बस उन रंगों के पिक्सेल का पता लगाया। हालांकि यह बहुत प्रभावी तरीका नहीं है। यह पहले से ही काफी क्लंकी था, और कम और कम व्यवहार्य हो जाता है क्योंकि ग्राफिक इंजन अधिक से अधिक शक्तिशाली हो जाते हैं, जिसका अर्थ है किसी भी ऑप्टिकल पहचान एल्गोरिदम को भ्रमित करने के लिए अधिक से अधिक विस्तार।

  • एक और बिंदु सीधे मेमोरी को पढ़ रहा है [1] । आपके कंप्यूटर पर एक प्रोग्राम होना संभव है, दूसरे की मेमोरी को पढ़ें। तो डेवलपर को केवल यह पता लगाना है कि किस पते पर गेम बॉट के लिए प्रासंगिक है, जो गेम को सहेज रहा है। ऐसे उपकरण हैं जो डेवलपर को मेमोरी इमेज बनाने और विभिन्न खोज उपकरण प्रदान करके जो कुछ भी चाहते हैं उसे खोजने में सहायता करते हैं। एक प्रतिसाद पता लेआउट रैंडमाइजेशन का उपयोग करना है, लेकिन एक स्मार्ट बॉट अभी भी खोजने में सक्षम हो सकता है कि वे स्वचालित रूप से क्या देख रहे हैं।

  • खेल निष्पादन योग्य को संशोधित करना संभव है। ऐसा करने के लिए बॉट डेवलपर्स को कोडांतरक में पढ़ने और प्रोग्राम करने में सक्षम होना चाहिए, जो कि कुछ अभ्यास के साथ कठिन नहीं है। वे फिर उस कोड की तलाश करते हैं जो उन सूचनाओं को संभालता है जो वे रुचि रखते हैं और इसे अपने बॉट को पास करने के लिए इसे फिर से लिखते हैं। गेम डेवलपर के दृष्टिकोण से एक संभावित प्रतिवाद खेल के कोडांतरक कोड को कम पठनीय बनाने के लिए एक ऑबफ्यूज़ेटर का उपयोग करना है, लेकिन ये आमतौर पर प्रदर्शन के लिए अच्छे नहीं होते हैं और कई ऑबफ्यूज़ेटर के लिए उपकरण होते हैं जो उनके काम को उलट देते हैं।

  • और फिर नेटकोड है। एक ऑनलाइन गेम में, सर्वर नेटवर्क के माध्यम से गेम में सभी वस्तुओं के गुणों और पदों को भेजता है। सर्वर और क्लाइंट के बीच नेटवर्क डेटा स्ट्रीम को इंटरसेप्ट और एनालिसिस किया जा सकता है। ऐसा करने के लिए एक लोकप्रिय उपकरण वायरशार्क है। जब डेवलपर ने नेटकोड को रिवर्स-इंजीनियर किया, तो वे एक बॉट लिख सकते हैं जो नेटवर्क ट्रैफिक को इंटरसेप्ट करता है, जैसे कि विंडसर्क करता है और अपने निर्णय लेने के लिए सूचना का उपयोग करता है। जब डेवलपर अधिक प्रेरित होता है, तो वे खरोंच से एक पूर्ण गेम क्लाइंट भी विकसित कर सकते हैं जो नेटवर्क प्रोटोकॉल को लागू करता है और बिना किसी ग्राफ़िकल आउटपुट के भी गेम खेलता है। ऐसे बॉट सोने के किसानों के साथ बहुत लोकप्रिय हैं क्योंकि ग्राफिक्स आउटपुट के बिना क्लाइंट आमतौर पर कहीं अधिक संसाधन-अनुकूल है, जिसका अर्थ है कि वे एक छोटे सर्वर पर एक ही बार में बहुत सारे चला सकते हैं।


1: जब से आप वाह का उल्लेख करते हैं, यह इंगित करने योग्य है कि प्रारंभिक और कुख्यात WoWGlider बॉटिंग प्रोग्राम ने प्रत्यक्ष मेमोरी एक्सेस का उपयोग किया है। बर्फ़ीला तूफ़ान एक सबप्रोग्राम था जिसे वार्डन कहा जाता था जिसे वाह के आंतरिक खेल राज्य तक पहुंचने से कार्यक्रमों का पता लगाने और ब्लॉक करने के लिए डिज़ाइन किया गया था। चूंकि बॉट कार्यक्रम ने इस संरक्षण को दरकिनार कर दिया और बिना अनुमति के मेमोरी को पढ़ा, 2006 के मुकदमे MDY v Blizzard को बर्फ़ीला तूफ़ान के पक्ष में फैसला दिया गया था कि बॉट निर्माता कॉपीराइट के उल्लंघन के लिए अपने उपयोगकर्ताओं को प्रोत्साहित और सक्षम कर रहा था और DMCA का उल्लंघन कर रहा था ।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
— जोश

18

बॉट खिलाड़ी हैं। वे हर दूसरे खिलाड़ी की तरह ही सर्वर से प्लेयर / मॉन्स्टर के पोजीशन को पढ़ते हैं और कीबोर्ड एम्स और माउस क्लिक द्वारा प्रोग्राम में क्रिया करने के लिए एक सरल AI स्क्रिप्ट के साथ संयुक्त उन मानों का उपयोग करते हैं। अगर बॉट्स वास्तव में एक एल्गोरिथ्म का पता लगाने के लिए था कि स्क्रीन पर राक्षस क्या है और इसके साथ बातचीत करता है, तो यह एक बहुत ही प्रभावशाली सॉफ्टवेयर होगा जो लाखों का होगा। यह मूल रूप से रोबोटों के लिए AI है।


2
यह जांचना आसान है कि क्या बॉट ने राक्षस को देखा है और फिर राक्षस क्या कर रहा है, यह जांचने के लिए एनीमेशन स्थिति का उपयोग करने के लिए कुछ रोड़ा जाँच और किरण डाले।
— शाफ़्ट ने

ऐसा करने के लिए आपको गेम को रिवर्स इंजीनियर करना होगा, रे कास्टिंग को लागू करना होगा और राक्षस के एनीमेशन स्टेट को भी पढ़ना होगा, जिसके लिए कोड को इंजेक्ट करना और .exe को संशोधित करना होगा। सर्वर से प्राप्त होने वाले नेटवर्क पैकेजों को पढ़ने से यह सरल कैसे है ( वायरशार्क का उपयोग फिलिप के रूप में सुझाव दिया गया है) और फिर नेटवर्क पैकेटों के आधार पर कीबोर्ड / माउस क्रियाओं का अनुकरण करने के लिए बस एक एआई स्क्रिप्ट है?
— डिमिट्रिश93

2
मैं एक मॉड्यूल्ड क्लाइंट बॉट के बजाय "एआई प्रतिद्वंद्वी" बॉट मान रहा था।
— शाफ़्ट सनकी

3
@ratchetfreak ओह अब यह समझ में आता है। सवाल में वाह संदर्भ वास्तव में तात्पर्य है कि "बॉट" मूल रूप से सोने के किसान हैं, एआई प्रतिद्वंद्वी नहीं।
— dimitris93

7

फिलिप ने पहले से ही एक महान अवलोकन दिया कि कैसे सबसे अधिक बॉट्स संचालित होते हैं, लेकिन मैं बस चीजों को थोड़ा और विस्तार से कवर करना चाहता था, क्योंकि मेरे पास उन सभी प्रकार के बॉट्स को विकसित करने या उन सभी प्रकार के व्यक्तिगत अनुभव हैं।

Runescape में, एक बड़ा प्रोजेक्ट (RSBot) था जो Runescape क्लाइंट से मेमोरी की सामग्री को उसकी स्थानीय मेमोरी में कॉपी कर देगा, जहाँ यह तब गेम के पूरे राज्य को देख सकता है, जिसमें क्लाइंट के कोई जोखिम नहीं है। यह निर्धारित करने के लिए रिवर्स इंजीनियरिंग की थोड़ी आवश्यकता होती है कि डेटा को पॉइंटर्स खोजने के लिए मेमोरी में कहाँ देखना है, लेकिन एक बार ऐसा करने के बाद, उन्होंने जानकारी का लाभ लेने के लिए एक एपीआई उजागर किया। यह वास्तव में जानता था कि किसी वस्तु के निर्देशांक प्राप्त करने के बाद दुनिया में क्या था और फिर ऑन-स्क्रीन स्थिति प्राप्त करने के लिए उन्हें कैमरा ट्रांसफॉर्म मैट्रिक्स के साथ बदल दिया गया। हिट मास्क भी पठनीय थे, इसलिए वांछित परिणाम प्राप्त करने के लिए माउस को स्थानांतरित करने के लिए वास्तव में क्या सीमा निर्धारित करना तुच्छ था।

बॉट ने डिबगिंग जानकारी का एक गुच्छा प्रदान किया, जैसे कि एनोटेशन, जिसने डेवलपर को बताया कि कौन सी टाइल के निर्देशांक कहां हैं, इस ऑब्जेक्ट में कौन सी आईडी है, किसी दिए गए आइटम का क्या आईडी है, आदि। इस जानकारी का उपयोग तब बॉट बनाने के लिए किया जा सकता है। बॉट स्क्रिप्ट बनाने की वास्तविक प्रक्रिया वास्तव में काफी सरल थी। फ्रेमवर्क ने कई उपयोगिता कार्य प्रदान किए, जैसे कि move_to(world_coordinates)या mouse_move(x,y)जो कि कुछ हद तक विश्वसनीय तरीके से निर्दिष्ट क्रियाओं को करेगा (माउस को यादृच्छिक रूप से स्थानांतरित करके, बार-बार दोनों न्यूनतम और स्क्रीन के माध्यम से आगे बढ़ रहा है, और इसी तरह)

Runescape में भी, आपके पास ग्राफिक्स की गुणवत्ता को बहुत कम करने का विकल्प है। दुनिया के एक मॉडल के निर्माण के लिए स्क्रीन पर फिल्मांकन और कुछ बुनियादी कंप्यूटर विज़न अवधारणाओं को लागू करके कुछ प्रकार के बॉट्स बनाना वास्तव में बहुत आसान था। मैंने इस तकनीक का उपयोग करते हुए एक अभिशाप बॉट और स्मेल्टिंग बॉट दोनों बनाया, जिसमें दोनों ने काफी अच्छा काम किया। यह सिर्फ फ्रेम लेगा, संतृप्ति को जितना चाहे बढ़ा सकता है, और फिर इससे पैटर्न निकालने की कोशिश करेगा, जो तब क्लिक जोन के लिए एक संभावना मानचित्र तैयार कर सकता है।

अभिशाप बॉट के मामले में, लक्ष्य एक कम दानव था, जो कि सिर्फ एक विशाल लाल चीज है, जिसे खोजने के लिए तुच्छ है। गलाने वाले बॉट के मामले में, यह ग्रे से घिरे एक छोटे नारंगी ट्रेपोजॉइड की तलाश करेगा, और यह भट्ठी होगी। यह एक बड़े, हल्के भूरे रंग के 'एल' आकार को खोजने की कोशिश करेगा, जो बैंक डेस्क होगा। यह सिर्फ डाउनस्कूलिंग और बुनियादी आंकड़ों के साथ किया गया था। यह अपने आप को न्यूनतम कम्पास के बगल में आसान कम्पास के साथ उन्मुख कर सकता है, इसलिए यह लक्ष्य वस्तुओं को खोजने के लिए कैमरे को अधिक विश्वसनीय स्थिति में उन्मुख कर सकता है।

विभिन्न नेक्सॉन खेलों में, सर्वर ग्राहकों पर बहुत भरोसा करते हैं। खतरों को दूर करने के लिए या युद्ध जोड़ने के लिए मैंने मैप्सटोरी में एक टन का दुरुपयोग किया है ताकि एक बॉट को लगभग परिष्कृत न हो। मैं दुनिया के एक मॉडल का निर्माण करने के लिए सर्वर से ट्रैफ़िक की निगरानी और निगरानी भी करूंगा, जिसका उपयोग राक्षसों को जल्दी से खोजने और मारने के लिए किया जा सकता है।

एक बार जब मुझे एहसास हुआ कि मैं वास्तव में अब MMO नहीं खेलता हूं और बस उन्हें स्वचालित करता हूं, तो मैंने पूरी तरह से खेलना बंद करने का फैसला किया। यदि मैं कानूनी रूप से खुद को उजागर करने के बारे में चिंतित नहीं था, तो शायद मैं एक हत्या कर सकता हूं जो कि बेची जाने वाली बोट्स बेच सकता है, लेकिन मैं वास्तव में मुकदमा नहीं करना चाहता था। यही कारण है कि मैं इन दिनों वास्तविक प्रोग्रामिंग करने में अपना समय बिताता हूं!


उस आखिरी पैराग्राफ पर आमीन। मैं 1 से प्रोग्रामिंग में पाया) 2 वाह खेल) वाह 3) बॉट वाह के लिए अपना खुद का बॉट लिखना शुरू कर दिया। केवल 2 वर्षों में मैंने जो प्रोग्रामिंग ज्ञान प्राप्त किया, वह अध्ययन के दौरान मेरे द्वारा सीखी गई किसी भी चीज़ से अधिक मूल्यवान था (अच्छी तरह से, कम से कम 'व्यावहारिक' प्रोग्रामिंग)।
— सेबस्टियन ग्राफ

2

फिलिप का जवाब बहुत अच्छा है, लेकिन मॉडल / व्यू / कंट्रोलर पैटर्न या शॉर्ट के लिए एमवीसी के बारे में सिर्फ एक त्वरित नोट ।

आपकी स्क्रीन "दृश्य" का हिस्सा है, जो "मॉडल" से डेटा प्रस्तुत करता है, जो यदि आप चाहें तो गेम की वास्तविक स्थिति है। मॉडल के भीतर बॉट, और आपका चरित्र, सभी 'अस्तित्व' (एक अर्थ में)। सोचिए अगर आपने अपनी स्क्रीन को अनप्लग कर दिया हो - खेल तब भी जारी रहेगा, जबकि दृश्य चला गया हो।

एक नेटवर्क गेम में, "मॉडल" की अवधारणा थोड़ी जटिल है, क्योंकि आपके पास वास्तव में बहुत सारे मॉडल हैं। आपके पास सर्वर पर मॉडल है, और फिर प्रत्येक क्लाइंट पर एक मॉडल है, जो सर्वर से प्राप्त होने वाले डेटा के कारण स्वयं को अपडेट करता है। आप "मॉडल" को सर्वर के मॉडल और अपने ग्राहक के मॉडल के रूप में देख सकते हैं, या आप इसे केवल अपने ग्राहक के मॉडल के रूप में सोच सकते हैं। किसी भी तरह से, यह वह जगह है जहाँ बॉट रहते हैं। तो, उनकी "धारणाएं", जिसे हम उनके डेटा इनपुट और स्थिति के लिए एक आशुलिपि के रूप में उपयोग कर सकते हैं, उस समय मॉडल की स्थिति और उस मॉडल के भीतर विभिन्न संस्थाओं / वस्तुओं के बीच बातचीत पर आधारित हैं। व्यवहार में, प्रत्येक बॉट में एक फ़ंक्शन हो सकता है जिसे "रिफ्रेशस्टेट" कहा जाता है जो एक बार प्रति फ्रेम या कुछ और चलता है, और जो इसे अपडेट करने का कारण बनता है '


0

वे एक फ़ाइल या एक सर्वर से कोर्ड्स को पढ़ सकते हैं, लेकिन एक किरण टक्कर डिटेक्शन सिस्टम के साथ भी। बॉट से जाने वाली किरणों का उपयोग करना आम बात है (उस स्थिति में) उसके बाहर। यदि किरण किसी चीज़ से टकराती है तो यह बॉट को कुछ जानकारी लौटाती है जैसे कि किरण को क्या मिला है एक खिलाड़ी, एक बॉट, एक जानवर या एक साधारण दीवार। ऐसा इसलिए है क्योंकि उदाहरण के लिए खिलाड़ी और बॉट के मामले में उनके पास एक अदृश्य कैप्सूल है जो उन्हें उदाहरण के लिए इसके प्रकार (मानव, बॉट, ...) के बारे में जानकारी के साथ पूरी तरह से शामिल करता है। अगर वे उदाहरण के लिए आपका पीछा कर रहे हैं तो इससे वे दीवारों और अन्य हाथियों के साथ दुर्घटनाग्रस्त होने से बच सकते हैं।

आप इस पृष्ठ के भाग टकराव का पता लगा सकते हैं


हालांकि आपको वास्तविक गेम में कोड को इंजेक्ट करना होगा
— dimitris93

हां बिल्कुल। यह सब प्रोग्राम्ड है, लेकिन यह मुफ्त पथों के लिए उपयोगी है या आपके बाद के बॉट्स जैसे मामलों और इसी तरह। 3 डी गेम में AFAIK सबसे आम तरीका है और कम से कम एक का अध्ययन किया है जो mmorp नहीं हैं ... हो सकता है कि वाह के पास सर्वर पर सभी जानकारी हो लेकिन यह एक बड़े mmorp के रूप में अलग है।
— मेगासा 3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.