NextBot NPC Oluşturma
Nextbot, Team Fortress 2 ve Left 4 Dead'deki yapay zekanın kullandığı sistemdir. Bu eğitim, düşmanları (sizi) arayacak ve ölene ya da çok uzaklaşana kadar onları kovalayacak basit bir yapay zeka için gereken adımları ele alacaktır. Ayrıca, hiç düşman olmadığında rastgele başka şeyler de yapacaktır.
Hadi başlayalım
Öncelikle, varlığınız (entity) için .lua dosyasını oluşturun. Bu eğitim için oluşturduğum dosya "addons/Nextbot_tut/lua/entities" klasöründe bulunuyor ve "simple_nextbot.lua" olarak adlandırılmıştır. Şimdi bu dosyayı açın, böylece kodu eklemeye başlayabilirsiniz.
Kod
Varlıklar için ihtiyacımız olan temel şeyler
Kullanılacak temel varlığı tanımlayarak ve onu spawn edilebilir (spawnable) yaparak başlayın. Şu ana kadar diğer tüm varlıklarla hemen hemen aynı. Burada modeli ayarlıyor ve daha sonra kullanacağımız bazı değişkenleri tanımlıyoruz.
Düşmanla ilgili şeyler
Bu bölüm, düşmanla ilgili konular için bazı kullanışlı fonksiyonlar ekler. Bir NPC/bot bir şeyleri hedefleyemiyorsa tamamlanmış sayılmaz, değil mi? Bunlar, hala bir düşman olup olmadığını ya da düşmanın kaçıp kaçmadığını kontrol eden bir fonksiyon ve düşman aramak için bir fonksiyon içerir. Ne işe yaradıklarını tam olarak bilmeniz için her türlü yorumu ekledim.
Coroutine'ler
Artık bot düşmanları bulabildiğine göre, sadece bir düşmana sahip olmaktan başka bir şey yapmasını sağlamalıyız.
Bu sonraki bölüm, yapay zekamızın çoğunun kurulacağı yerdir.
Fonksiyon bir coroutine'dir, yani coroutine.wait( zaman ) kullanarak belirli bir süre için duraklatabileceğiniz devasa bir döngüsel kod bölümüdür.
Coroutine'ler, işleri zamanlanmış bir sırayla yapmanıza olanak tanır ve botun oyuncuya dönmesini veya bir animasyon oynatmasını sağlamak için fonksiyonu duraklatmanıza izin verir.
Ve hepsi bir while true döngüsü içinde olduğu için, bot var olduğu sürece çalışacaktır. Yani yapay zekanız yapabileceği her şeyi çalıştırmayı bitirdikten sonra geri dönüp tekrar yapacaktır.
İşte çok basit bir bot örneği.
Oldukça basit, değil mi? Rastgele bir noktaya yürü ve başka bir rastgele noktaya yürümeden önce 2 saniye boşta bekle. Bu ne kadar hoş olsa da istediğimiz şey bu değil, sırada çok daha iyi bir yapay zeka var.
Botumuzun "beyni"
Bu kod bazılarına ne kadar korkutucu görünse de, aslında oldukça basittir:
- Bir düşmanımız olup olmadığını kontrol et, yoksa yukarıdaki
HaveEnemy()fonksiyonunu kullanarak bir tane arayacak. - Eğer bir düşman varsa, bazı animasyonları oynat ve oyuncuya doğru koş.
- Hiç düşman yoksa, rastgele bir noktaya yürü.
- 2 saniye boşta bekle. O kadar da kötü değil, değil mi? Koda bir göz atın, her şeyin ne işe yaradığını bilmeniz için yorumlarla doldurdum.
ChaseEnemy() fonksiyonu nedir?
Kodu inceledikten sonra muhtemelen wiki'de hiçbir yerde olmayan ve bu eğitimde henüz yayınlanmamış bir fonksiyon fark ettiniz.
ChaseEnemy(), şimdi inceleyeceğimiz şeydir; bazı kullanışlı değişiklikler dışında Garry'nin Nextbot tabanında yaptığı MoveToPos fonksiyonuyla hemen hemen aynıdır:
- Doğrudan belirlenen düşmana giden bir takip yolu oluşturur.
- Düşman ve bot hareket ettikçe yolu güncellemeye devam eder.
HaveEnemy()fonksiyonunu kullanarak, artık bir düşmanımız yoksa onu kovalamayı bırakır. İşte böyle görünüyor:
Garry'nin fonksiyonuna ve ardından buna bir göz atın ve nelerin daha ayrıntılı olarak değiştirildiğini görün.
Neredeyse bitti
Artık bot tamamlandığına göre, onu NPC spawn sekmesine eklemek isteyeceksiniz. Oldukça kolay, ama yine de bu eğitim için kullanılan kod burada:
Bunu kullandığınızda, her iki "simple_nextbot" ifadesini de botun dosya adıyla değiştirin, geri kalanını kendiniz çözmeniz oldukça kolaydır.
Görevler
Artık haritada dolaşan temel bir botunuz var ve hepsi bu kadar. İşte işleri biraz renklendirmek için kendi başınıza deneyebileceğiniz bazı şeyler:
- Sadece oyunculardan daha fazlasını ara
- Etrafta dolaşırken sesler çal.
- Sadece önündeki düşmanları ara, etrafındakileri değil.
- Düşman pompalı tüfek tutuyorsa saklanmasını sağla.
- Düşmana çok yaklaştığında kovalamayı bırak ve bir yakın dövüş saldırısı yap.
Kodun tamamı
Kullanışlı Konsol Komutları
İşte NextBot'larınızı oluşturmanıza ve hatalarını ayıklamanıza yardımcı olabilecek bazı kullanışlı konsol komutları.
| Komut | Açıklama |
|---|---|
| nb_debug <değerler> | Nextbot'ların çeşitli bölümlerinde hata ayıklamanızı sağlar. Değerler bir boşlukla birleştirilebilir. Olası değerler şunlardır: BEHAVIOR, LOOK_AT, PATH, ANIMATION, LOCOMOTION, VISION, HEARING, EVENTS, ERRORS |
Diğer Örnekler
Size yol göstermesi için bazı ek örnekler.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord