Oyun botları oyun dünyasını ve diğer varlıkları nasıl algılıyor?


52

Bu soru bir süredir aklımdaydı ... temelde WoW ve diğerleri gibi her tür oyun için bot görüyorum. Sorum şu; Robotlar ekranda neyin göründüğünü nasıl biliyorlar? WoW oynamıyorum bu yüzden örneğim yanlış olabilir ama örneğin bir canavar varsa, bot bu canavarın nerede olduğunu ve onunla nasıl etkileşime gireceğini nasıl biliyor?

Bunu herhangi bir oyuna uygulayabilir misiniz yoksa her oyuna özgü mü? Eğer soru net değilse özür dilerim ... ve bir botun nasıl yapılacağını sormuyorum, daha çok ekranda bir şeyleri nasıl algıladıklarını sormak benim için oldukça büyüleyici.

Şimdiden teşekkürler :)


14
Bu botlar çoğu zaman oyunun hafızasına bağlanır ve ekranda ne olduğunu anlamaya çalışmak yerine doğrudan oyun öğesinin konumunu okur.
Alexandre Desbiens

2
Aceboy1993, sen programcı mısın? Lütfen soruyu düzenleyin ve her iki şekilde de bize bildirin. Cevapların muhtemelen buna bağlı olarak biraz farklı yapılması gerekiyor.
Panzercrisis

3
Sadece açık olmak için; dahili olmayan oyun otomasyonu hakkında konuşuyorsunuz, değil mi? Altın tarım botları, nişancılar ve benzeri? Yoksa sadece AI oyuncuları mı demek istiyorsun?
Anko

Merhaba, ben programcıyım. Evet, altın tarım botlarından ve amaç botlarından bahsediyorum ama aynı zamanda AI oyuncularına da ilgi duyuyorum :)
TheRapture87

3
@ Aceboy1993 Her ikisini de kapsayan bu soruyu çok geniş hale getirir. Lütfen onları ayırın.
Mast

Yanıtlar:


77

Bir botun oyuna kendisini enjekte edebileceği pek çok nokta var.

  • Ekran bunlardan biri, ancak bugüne kadar en kullanışlı değil. Bununla birlikte, bir zamanlar renk kodlaması kullanan Counter Strike için çok erken bir hedef nişancı gördüm. Tek renkli dokulara sahip alternatif karakter modelleriyle geldi (oyun buna izin verecek kadar mod uyumluydu) ve sonra sadece bu renklerin piksellerini algıladı. Yine de çok etkili bir yöntem değil. O zamanlar zaten oldukça tıknazdı ve daha az ve daha az canlı hale geliyordu çünkü grafik motorları gittikçe daha güçlü hale geliyordu, bu da herhangi bir optik tanıma algoritmasını karıştırmak için giderek daha fazla ayrıntı anlamına geliyor.

  • Başka bir nokta, belleği doğrudan okumaktır [1] . Bilgisayarınızda bir programın diğerinin hafızasını okuması mümkündür. Bu yüzden geliştiricinin oyunun hangi hafıza adresinde olduğunu ve botla ilgili bilgileri kaydettiğini bulması yeterlidir. Bir bellek görüntüsü oluşturarak ve çeşitli arama araçları sağlayarak geliştiricinin istediklerini bulmalarına yardımcı olan araçlar vardır. Bir önlem, adres düzeni rastgelelemesini kullanmaktır, ancak akıllı bir bot aradıklarını otomatik olarak bulabilir.

  • Yürütülebilir oyunun kendisini değiştirmek mümkündür. Bunu yapabilmek için bot geliştiricilerin assembler içinde okuma ve programlama yapabilmeleri gerekir ki bu bazı uygulamalarda zor değildir. Daha sonra ilgilendikleri bilgiyi işleyen kodu ararlar ve onu botlarına iletmek için yeniden yazarlar. Oyun geliştiricisinin bakış açısından olası bir önlem, oyunun montajcı kodunu daha az okunabilir hale getirmek için bir obfuskator kullanmaktır, ancak bunlar genellikle performans için iyi değildir ve birçok obfusatör için çalışmalarını tersine çeviren araçlar vardır.

  • Ve sonra netcode var. Çevrimiçi bir oyunda, sunucu oyundaki tüm nesnelerin özelliklerini ve konumlarını ağ üzerinden gönderir. Sunucu ve istemci arasındaki ağ veri akışı yakalanabilir ve analiz edilebilir. Bunu yapmak için popüler bir araç wireshark. Geliştirici netkodu tersine çevirdiğinde, Wireshark'ın yaptığı gibi ağ trafiğini kesen ve kararını vermek için bilgileri kullanan bir bot yazabilir. Geliştirici daha motive olduğunda, ağ protokolünü uygulayan ve hiçbir grafik çıktısı bile olmadan oyunu oynayan tam bir oyun istemcisini sıfırdan bile geliştirebilirler. Bu tür botlar, altın çiftçiler arasında çok popülerdir çünkü grafik çıktısı olmadan müşteri genellikle daha fazla kaynak dostudur, bu da birçoğunu aynı anda küçük bir sunucuda çalıştırabilecekleri anlamına gelir.


1: WoW'dan bahsettiğinizden beri, erken ve ünlü WoWGlider bot programının doğrudan hafızaya erişimini kullandığına dikkat çekiyor. Blizzard, dış programların WoW'un dahili oyun durumuna erişmesini engellemek ve engellemek için tasarlanmış Warden adlı bir alt programa sahipti. Bot programı bu korumayı aştığından ve hafızayı izinsiz okuduğundan, 2006 Davası MDY v Blizzard'a bot üreticisinin, telif hakkı ihlali yapmalarını ve DMCA'yı ihlal etmelerini teşvik ettiği ve ihlal ettiği gerekçesiyle Blizzard lehinde karar verildi .


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Josh

18

Botlar oyuncu. Oyuncunun / canavarın pozisyonunu sunucudan okuyorlar, tıpkı diğer oyuncuların yaptığı gibi ve bu değerleri basit bir AI betiği ile birleştirerek, klavye vuruşlarını ve fare tıklamalarını programlı olarak simüle ederek oyunda işlem yapmak için kullanıyorlar. Eğer robotlar ekranda hangi canavarı olduğunu tespit edip onlarla etkileşime girecek bir algoritmaya sahip olsaydı, bu milyonlarca değere sahip oldukça etkileyici bir yazılım olurdu. Bu temelde robotlar için AI.


2
Botun canavarı görüp görmediğini kontrol etmek için bazı oklüzyon kontrolü ve ışın atmalarını yapmak ve canavarın ne yaptığını kontrol etmek için animasyon durumunu kullanmak daha kolaydır.
cırcır ucube

Bunu yapmak için oyunu tersine çevirmek, ışın dökümü uygulamak ve ayrıca kodun enjekte edilmesini ve .exe dosyasının değiştirilmesini gerektiren canavarın animasyon durumunu okumak zorunda kalacaksınız. Bu, sunucudan aldığınız ağ paketlerini okumaktan ( Phillip'in önerdiği şekilde wireshark'ı kullanarak ) ve ardından sadece ağ paketlerini temel alarak klavye / fare eylemlerini simüle etmek için bir AI komut dosyası kullanmaktan nasıl daha basittir?
dimitris93

2
Modded istemci botu yerine "AI rakibi" botu varsayıyordum.
cırcır ucube

3
@ ratchetfreak Oh şimdi mantıklı. Sorudaki WoW referansı aslında "botların" AI rakipleri değil, temelde altın çiftçiler olduğunu gösteriyor.
dimitris93

7

Phillip, çoğu botun nasıl işlediğine dair harika bir genel bakış sunmuştu, ancak üzerinde durduğu tüm bot türleri için veya kişisel gelişim konusunda biraz kişisel deneyimim olduğu için sadece olayları biraz daha ayrıntılı bir şekilde ele almak istedim.

Runescape'de, belleğin içeriğini Runescape istemcisinden yerel belleğine kopyalayacak büyük bir proje (RSBot) vardı, bu durumda oyunun tüm durumunu müşterinin yakalama riski olmadan görebileceği bir yer oldu. İşaretçileri verilere bulmak için nereye bakılacağını belirlemek için biraz tersine mühendislik yapılması gerekiyordu, ancak bir kez yaptıklarında, bilgiden yararlanmak için bir API'yi ifşa ettiler. Bir nesnenin koordinatlarını alarak ve ardından ekrandaki pozisyonu elde etmek için onları kamera dönüşüm matrisi ile dönüştürerek dünyanın neresinde olduğunu tam olarak bilirdi. Vuruş maskeleri de okunaklıydı, bu nedenle, istenen sonucu elde etmek için fareyi hangi mesafeye taşıyacağının tam olarak belirlenmesi önemsizdi.

Bot, geliştiriciye hangi karo koordinatlarının nerede olduğunu, bu nesnenin kimliğinin, belirli bir öğeye hangi kimliğin verildiğini vb. Söyleyen ek açıklamalar gibi birçok hata ayıklama bilgisi sağlamıştır. Bu bilgi daha sonra botlar yapmak için kullanılabilir. Bot betiğini yapma süreci, aslında oldukça basitti. Çerçeve , belirtilen eylemleri biraz inandırıcı bir şekilde gerçekleştiren move_to(world_coordinates)veya mouse_move(x,y)gerçekleştirecek olan birçok fayda işlevi sağladı (fareyi rasgele bir eğri boyunca hareket ettirmek, tekrar tekrar hem mini harita hem de ekran boyunca hareket etmek vb.)

Ayrıca Runescape'de grafik kalitesini önemli ölçüde azaltma seçeneğiniz de var. Dünyanın bir modelini oluşturmak için ekranı filme alarak ve bazı temel bilgisayarla görme kavramlarını uygulayarak bazı bot türlerini yapmak oldukça kolaydı. Her ikisi de oldukça iyi çalışan bu tekniği kullanarak hem lanet bot hem de eritme botu yaptım. Sadece kareyi alır, doygunluğu mümkün olduğu kadar arttırır ve daha sonra tıklama bölgeleri için bir olasılık haritası oluşturabileceği desenleri çıkarmaya çalışır.

Lanet botunda hedef, daha küçük bir şeytandı, ki bu sadece bulmak için önemsiz olan büyük bir kırmızı şeydi. Eritme botu durumunda, gri ile çevrili küçük bir turuncu yamuk arar ve bu fırın olur. Ayrıca banka masası olacak büyük, açık gri bir 'L' şekli bulmaya çalışacaktı. Bu sadece küçültme ve temel sezgisel tarama ile yapıldı. Ayrıca mini haritanın yanındaki kullanışlı pusula ile kendisini yönlendirebilir, böylece hedef nesneleri bulmak için fotoğraf makinesini daha güvenilir bir pozisyonda yönlendirebilir.

Çeşitli Nexon oyunlarında sunucular müşterilere çok güveniyor. Tehditleri gidermek veya çözgü eklemek için haritaları değiştirerek bir botun neredeyse sofistike olması gerekmeyecek şekilde Maplestory'deki bir tonu kötüye kullandım. Ayrıca, daha sonra hızlı bir şekilde canavarları bulmak ve öldürmek için kullanılabilecek bir dünya modeli oluşturmak için sunucuya giden ve giden trafiği izlerdim.

Artık artık MMO'ları oynamadığımı ve onları otomatikleştirdiğimi fark ettiğimde, tamamen oynamayı bırakmaya karar verdim. Kendimi yasal olarak göstermek konusunda endişeli olmasaydım, muhtemelen MMO botları satarak bir ölüm yapabilirdim, ama gerçekten dava açmak istemedim. Bu yüzden vaktimi bugünlerde gerçek programlama yaparak geçiriyorum!


Amin son paragrafta. 1) WoW oynayarak 1) WoW oynayarak 3) WoW için kendi botumu yazmaya başladım. Sadece 2 yılda edindiğim programlama bilgisi, öğrenirken öğrendiğim her şeyden daha değerliydi (en azından 'pratik' programlama).
Sebastian Graf

2

Phillip'in cevabı harika, ancak Model / View / Controller modeli veya kısaca MVC hakkında kısa bir not.

Ekranınız, isterseniz oyunun gerçek hali olan "model" den verileri sunan "görünümün" bir parçasıdır. Botlar ve karakteriniz, hepsi bir anlamda model içinde 'var'. Ekranınızı çıkarttığınızı düşünün; oyun devam etse bile oyun devam eder.

Ağa bağlı bir oyunda, bir “model” kavramı aslında oldukça fazla modeliniz olduğundan biraz karmaşık. Sunucuda bir model ve daha sonra her bir istemcide, sunucudan aldığı veriler nedeniyle kendisini kısmen güncelleyen bir modeliniz var. Sunucunun modelini ve müşterinizin modelini kapsayan bir model olarak düşünebilirsiniz ya da sadece kendi müşterinizin modelini düşünebilirsiniz. Her iki durumda da, burası botların yaşadığı yer. Bu yüzden, onların veri girişi ve durumları için bir steno olarak kullanabileceğimiz "algıları", o zamanki modelin durumuna ve bu modeldeki farklı varlıklar / nesneler arasındaki etkileşime dayanmaktadır. Uygulamada, her bir bot "kare başına bir kere çalışan ve onu güncellemesine neden olan" refreshState "adlı bir işleve sahip olabilir.


0

Kodları bir dosyadan veya sunucudan okuyabilir, aynı zamanda bir ışın çarpışma tespit sistemiyle de okuyabilirler. Bottan (bu durumda) dışına çıkan ışınları kullanmak yaygındır. Işın bir şeyle çarpışırsa, o zaman, ışığın bulduğu şey bir oyuncu, bir bot, bir hayvan veya basit bir duvar olduğu gibi botla ilgili bazı bilgiler verir. Bunun nedeni, oyuncu ve bot durumunda, örneğin, tamamen kendi türüyle ilgili bilgileri içeren (örneğin, insan, bot, ...) görünmeyen bir kapsama sahip olmalarıdır. Bununla, örneğin sizi takip ediyorlarsa, duvarlarla ve diğer elementlerle çarpışmayı önleyebilirler.

Bu Sayfanın Çarpışma Tespiti bölümünü görebilirsiniz


Bu gerçekte gerçek oyuna kod enjekte etmenizi gerektirir
dimitris93

Evet tabi ki. Hepsi programlanmış ancak ücretsiz yollar veya sizi takip eden botlar gibi durumlar için kullanışlıdır. 3D oyunlarda AFAIK'in en yaygın yöntemidir ve en azından mmorp olmayan bir tane üzerinde çalıştınız ... belki de vay sunucudaki tüm bilgilere sahip ama bunun büyük bir mmorp'u kadar farklı.
Megasa3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.