EVE Online ve WOW gibi MMORPG'leri geliştirmek için hangi diller kullanılıyor? [kapalı]


22

Anladığım kadarıyla, MMORPG'ler diğer normal 3d video oyunları gibi bilgisayarınızda çalışan oyunlardır ancak oyunda olan her bir eylemde, sunucuya yapılan HTTP çağrıları yoluyla evrende değişiklikler yapılır. Bu nedenle, oyuncular bilgisayarı grafik ve animasyonları oluşturmak için tüm ağır kaldırma işlemlerini gerçekleştiriyor, ancak web çerçeveleri çevrimiçi iletişimi sağlıyor.

  • Bu yüzden EVE Online ve WOW gibi MMORPG'leri oluşturmak için hangi web çerçevelerinin, web sunucularının ve veritabanlarının kullanıldığını merak ediyorum?

  • Ayrıca, müşteri tarafını (3d grafik / animasyon / sesler) oyunun bir parçası yapmak için hangi programlama dilleri ve 3d oyun motorları kullanılıyor?


Her MMO'nun kullanıma hazır teknolojilerle başladığını ve daha sonra belirli bir boyuta ulaştıklarında ve aletlerini gerçekten uzmanlaşmaya başladıklarında cehennemi özelleştirdiğini düşünüyorum. EVE Online'daki yığınsız I / O harika bir örnektir: eveonline.com/devblog.asp?a=blog&bid=584
Michael Stum

TCP sunucusuna çağrı mı demek istiyorsun? HTTP (HyperText Transfer Protocol), web sunucuları ve tarayıcılar tarafından web sayfaları için kullanılır ve urbandead gibi bir tarayıcı tabanlı oyun demek istemediğiniz sürece MMO'larla ilgisi yoktur.
stonemetal

Michael Stum, Stackless G / Ç Stackless Python ile üretildi mi?

@Adam bu ikisi ilişkili olup olmadığını hiçbir fikrim yok.
Michael Stum

Yanıtlar:


30

Çoğu şirket C ++ kullanıyor. Havva bir üstünlüktür, çekirdek grafik motoru C ++ 'ta bulunurken, oyun mantığı diğerleri de belirtildiği gibi Python'dadır. ÇKP ayrıca, çoğunlukla C de yer alan Stackless'ın kendisine birçok katkı sağlar. Kullanıcı arayüzü Lua'da kodlanmış olsa da, WoW oyunun kendisi için C ++. Cryptic (Şampiyonlar Online, Star Trek Online) düz C kullanır, ancak sektörde biraz nadir görülür. Java her şimdi ve sonra, eski açılır. Runescape, ama AAA hiçbir şey düşünemiyorum. Disney, birçok MMO'su için Panda3D'yi (C dilinde yazılmış bir Python tabanlı bir motor) kullandı, ancak Havva'nın nadir olduğu gibi.

Genel olarak, oyun mantığı ve motoru için C ++ gibi görünüyor, müşteri komut dosyası için Lua ile standartlara en yakın olanı burası.

Web tarafı gelince, her şey bitti. (Cryptic), çeşitli bitler için bir PHP, C ve Python (Django) karışımı kullanıyoruz. ÇKP web sitesi için ASP'yi ve arka ucu çalıştırmak için Python'u kullanır (yavaşça birlikte sürüklenir). WAR ve LOTRO her ikisi de kendi siteleri için PHP kullanıyorlar, ancak hangi çerçeveyi kullandıkları belli değil (varsa).

MMO'ların web API çağrıları üzerinden çalıştığını söylemiştiniz, durum böyle değil. HTTP tabanlı bir protokol çok fazla verimsiz olurdu ve HTTP uzun süren bağlantılar için tasarlanmamıştır. Neredeyse tüm MMO'lar (web siteleri İngiltere'den nefret etmeyen veya Urban Dead gibi) özel sunucular ve özel protokoller kullanır. Müşteriler oldukça devlet görevliler, envanter kullanıcı arayüzü getirmek gibi bir şey yapıyorlar, tüm bu bilgiler istemcide önbelleğe alındığından sunucuya bir istek göndermeyecek.


kod istemcisi, 'istemciler oldukça durumlu' derken, istemci uygulamasının orada bulunan tüm verileri depoladığı ve her zaman sunucuya istek göndermeyeceği anlamına mı geliyorsunuz? Ayrıca, özel sunucular ve özel protokoller geliştirmek nasıl öğrenilir?

2
Evet, ağ trafiğini azaltmak için müşteri yerel olarak çok fazla bilgi önbelleğe alır (genellikle her şeyin doğrudan sunucudan geldiği bir web oyunundan farklı olarak). Sunucu yine de, hile yapmamak için yetkili. Bu tür şeylerin nasıl geliştirileceğini öğrenmeye gelince. "Ağ programlama" ile ilgili bir kitap arardım. Bükülmüş, Protokol Tamponları, vb. Gibi konularda yardımcı olabilecek birçok araç var. Çoğu, hangi dilde ve çerçevede en rahat olduğunuza bağlı.
coderanger

3
Panda3d C ++ 'ta C'ye göre programlanmıştır
jokoon

5

EVE Online için birkaç bağlantı:

Temel olarak, EVE Online, SQL Server 2005 ve başka bir Microsoft yazılımı üzerinde çalışır. Bununla birlikte, müşteri omurgası çoğunlukla Python'da yazılmıştır (Stackless Python, tam olarak hatırlayabildiğim kadarıyla) ve bir miktar C ++.

World of Warcraft'a gelince, Lua'yı müşterinin GUI'si için kullandıklarını biliyorum, ama bunun dışında Lua'yı başka bir şey için kullandıklarını sanmıyorum. C ++ muhtemelen kullanılan şeydir. Ayrıca, bazı Windows kutuları da kullanacağını düşünürdüm, ancak Windows tabanlı olmayan belirli görevlere özgü başka türden kutuları da varmış gibi görünüyor.

Çok fazla bilgi yok, ancak yardımcı olacağını umuyorum.

Bu oyunların çoğu, işlevleri işlevselliğe bağlı olarak sunuculara ayırır; bu nedenle, yalnızca nesneleri / ne olursa olsun ve oyun dünyasını çalıştıran sunucuları (oynatıcı işlemlerini doğrulama vb.) Depolamaktan sorumlu bir veritabanı sunucusuna sahip olurlar.


3

EVE ve WoW konusunda tam emin değilim, ancak MMO oyunlarının sunucuda C ++, C #, Java ve hatta PHP kullandıklarını gördüm (ikincisi yalnızca basit tarayıcı tabanlı oyunlar için geçerlidir).

İstemci çoğunlukla C ++ ile yazılmıştır (veya tarayıcı tabanlı bir oyunsa Flash); Bir kez .NET tabanlı bir müşteri ile çalıştım (C # ile C ++ / CLI karışık).

Neredeyse her zaman bir tür dinamik komut dosyası dili, "tasarımcı" içeriği geliştirmeyi kolaylaştırmak için kullanılır - örneğin, yetenekler, görevler, vb. - sık sık değişen ve programcıların aksine oyun tasarımcıları tarafından değiştirilebilir.


3

İlk olarak, MMORPG'ler veya herhangi bir çevrimiçi oyun, ilk önce HTTP veya "web çerçeveleri" kullanmaz.

Bir sunucu, oyunun kendisi gibi, C ++ 'da programlanır ve paketi ağ üzerinden iletmek için soketler kullanılarak iletişim sağlanır.

Sunucular sıklıkla başka bir işletim sistemi çalıştırır ve yalnızca oyun kodunu içerir, böylece birçok oyuncu tek bir sunucuda sorunsuzca oynayabilir.

Blizzard'ın sunucularını nasıl yönettiğini bilmiyorum, küme kullanıp kullanmadıklarını bilmiyorum.

Tabii ki "soketler" ve "C ++" derken, örneğin WoW ile cephane gibi, oyunun sunabileceği diğer hizmetlerden değil, gerçek zamanlı oyundan bahsediyorum. Forum, cephanelik, oyun, hesap yönetimi vb. Gibi birden fazla hizmetten okunabilen bir veritabanı kullanabilirler, ancak benim düşüncem, yeni girişler vb. Arayan bağımlı veritabanlarına sahip olmalarıdır, böylece her şey senkronize edilebilir. güzel yukarı.

Bence WoW'un ağ bölümünden sorumlu adam gerçek bir gariplik olabilir.


3
“Bence WoW'un ağ bölümünden sorumlu olan adam gerçek bir kaçık olabilir.” Küçük sunucu popülasyonları ve müşteri tarafı hareketi bence çok kötü niyetli değil. Gezme 20/20 olsa da.


0

Dışarıda onlarca oyun motoru var. Aklıma gelen iki gerçek dışı motor ve kaynak.

Dillere gelince, bu göreve bağlıdır. Renderleme ve diğer performans açısından kritik parçalar genellikle ana dillerden birinde yapılır. C ++ örneğin. Ancak, betikleri tanımlamak için bazı dinamik diller kullanmak yaygındır, çünkü bu kodun değişme olasılığı daha yüksektir ve genellikle daha az 'hardcore' programcılar tarafından yazılmıştır :-) Lua, Python, Ruby - hepsi burada kullanılabilir.


0

WoW, Lua'yı tüm iç kodlamaları için de kullanır. Dili değiştirip değiştirmeyeceklerinden emin değilim, ama gereksinimlerine uygun olması için şüpheliyim. Tasarımcılarının komut dosyalarını değiştirmesini / düzenlemesini kolaylaştıran farklı araçlara sahip olduklarına bahse girebilirsiniz. Bu, WoW devs olarak kullanılan / benim arkadaşlarımdan gelen içeriden bilgidir.


biri Lua gibi bir dili değiştirdiğinde, Lua'ya dayanan kendi kişisel çerçevesini yarattıklarını kastediyorsun. Doğru? Eğer öyleyse, bu, geliştirilen programların performansını / hızını azaltır mı?

@ J3M7OR3 - Benim anlayışım, Lua'ya dayanarak kendi iç çerçevelerini yarattıkları, ancak performans / hız hakkında söyleyemediğim bir şey değil.
Kyle C
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.