Rozumiem, że MMORPG to gry, które działają na twoim komputerze, jak każda normalna gra wideo w 3D, ale z każdą akcją, która ma miejsce w grze, zmiany są wprowadzane we wszechświecie za pośrednictwem wywołań HTTP do serwera. Tak więc komputer gracza robi wszystko, co w jego mocy, jeśli chodzi o renderowanie grafiki i animacji, ale ramy sieciowe wykonują komunikację online.
Zastanawiam się więc, jakie frameworki, serwery i bazy danych są używane do tworzenia MMORPG, takich jak EVE Online i WOW?
Jakie języki programowania i silniki gier 3D są używane, aby część klienta (grafika 3D / animacja / dźwięki) była częścią gry?
Odpowiedzi:
Większość firm używa C ++. Eve jest wartością odstającą, główny silnik graficzny jest w C ++, podczas gdy logika gry jest, jak zauważyli inni, w Pythonie. CCP ma również duży wkład w samą Stackless, która w większości jest w C. WoW to C ++ dla samej gry, choć interfejs użytkownika jest napisany w Lua. Cryptic (Champions Online, Star Trek Online) używa zwykłego C, ale jest to dość rzadkie w branży. Java pojawia się co jakiś czas, np. Runescape, ale nie mogę wymyślić niczego AAA. Disney używał Panda3D (silnik napisany w języku Python napisany w C) w wielu swoich MMO, ale jak w przypadku Ewy jest to rzadkie.
Ogólnie wygląda na to, że C ++ dla logiki gry i silnika, Lua dla skryptów klienckich jest najbliższa standardowi.
Jeśli chodzi o stronę internetową, to już koniec. My (Cryptic) używamy kombinacji PHP, C i Python (Django) do różnych bitów. CCP korzysta z ASP dla samej strony internetowej i Pythona do zasilania backendu (choć powoli dryfuje razem). Zarówno WAR, jak i LOTRO używają PHP na swojej stronie, choć nie jest jasne, jakich konkretnych ram używają (jeśli w ogóle).
Wspomniałeś, że MMO działają za pośrednictwem wywołań API sieci Web, co nie jest prawdą. Protokół oparty na HTTP byłby zdecydowanie zbyt nieefektywny, a HTTP nie jest przeznaczony do długotrwałych połączeń. Prawie wszystkie gry MMO (które nie są oparte na sieci, takie jak Kingdom of Loathing czy Urban Dead) używają niestandardowych serwerów i niestandardowych protokołów. Klienci są bardzo dobrze poinformowani, ponieważ tworzenie interfejsu użytkownika zasobów reklamowych nie spowoduje wysłania żądania do serwera, ponieważ wszystkie te informacje są buforowane na kliencie.
źródło
Kilka linków do EVE Online:
Zasadniczo EVE Online działa na SQL Server 2005 i niektórych innych programach Microsoft. Szkielet klienta jest jednak w większości napisany w Pythonie (konkretnie Python bez stosu, z tego co pamiętam) i prawdopodobnie w C ++.
Jeśli chodzi o World of Warcraft, wiem, że używają Lua do wszystkich elementów GUI klienta, ale poza tym nie sądzę, że używają Lua do czegokolwiek innego. Prawdopodobnie używany jest C ++. WoW, myślę, że używa również niektórych pudełek Windows, ale wydaje się prawdopodobne, że będą miały inne typy pudełek specyficzne dla niektórych zadań, które mogą wcale nie być oparte na Windowsie.
Niewiele informacji, ale mam nadzieję, że to pomoże.
Wiele z tych gier oddziela serwery w zależności od funkcjonalności, więc miałyby one serwer bazy danych, który jest odpowiedzialny tylko za przechowywanie obiektów / czegokolwiek i serwery, które faktycznie działają w świecie gry (sprawdzają działania graczy itp.).
źródło
Nie jestem pewien co do EVE i WoW, ale widziałem, że gry MMO używają C ++, C #, Java, a nawet PHP na serwerze (to ostatnie tylko dla prostych gier opartych na przeglądarce).
Klient jest najczęściej napisany w C ++ (lub Flash, jeśli jest to gra przeglądarkowa); Raz pracowałem z klientem opartym na .NET (C # zmieszany z C ++ / CLI).
I prawie zawsze używany jest jakiś rodzaj dynamicznego języka skryptowego, aby ułatwić tworzenie treści „projektantów” - np. Umiejętności, questy itp. - rzeczy, które często się zmieniają i mogą być zmieniane przez projektantów gier w przeciwieństwie do programistów.
źródło
Po pierwsze, MMORPG ani żadna gra online nie używa HTTP ani „frameworków sieciowych”.
Serwer jest programowany tak jak sama gra, w C ++, a komunikacja odbywa się za pomocą gniazd do przesyłania pakietów przez sieć.
Na serwerach często działa inny system operacyjny i zawierają one tylko kod gry, więc wielu graczy może płynnie grać na jednym serwerze.
Nie wiem, jak zamieć zarządza swoimi serwerami, nie wiem, czy używają klastrów, czy nie.
Oczywiście, kiedy mówię „gniazda” i „C ++”, mówię o grze w czasie rzeczywistym, a nie o innych usługach, które może ona oferować, na przykład o zbrojowni z WoW. Mogą po prostu korzystać z bazy danych, którą można odczytać z wielu usług, takich jak forum, zbrojownia, gra, administracja kontem itp., Ale uważam, że mają zależne bazy danych, które szukają nowych wpisów itp., Więc wszystko może się zsynchronizować ładnie.
Myślę, że facet odpowiedzialny za część sieci WoW może być prawdziwym badassem.
źródło
W przypadku EVE wygłosili wykład o StacklessIO na PyCon 2009: http://us.pycon.org/2009/conference/schedule/event/91/
źródło
Istnieją dziesiątki silników gier. Dwa, które mi przychodzą do głowy, to silnik Unreal i Source.
Jeśli chodzi o języki, zależy to od zadania. Renderowanie i inne części krytyczne pod względem wydajności są zwykle wykonywane w jednym z języków ojczystych. Na przykład C ++. Ale często używa się dynamicznego języka do definiowania skryptów, ponieważ ten kod jest bardziej podatny na zmiany i często jest napisany przez mniej „hardkorowych” programistów :-) Lua, Python, Ruby - można ich tutaj użyć.
źródło
WoW używa Lua również do wszystkich wewnętrznych skryptów. Nie jestem pewien, czy zmodyfikowali sam język, ale nie wątpiłbym w to, by odpowiadał ich potrzebom. Możesz się założyć, że mają różne narzędzia, które ułatwiają ich projektantom modyfikowanie / modyfikowanie skryptów. To informacje poufne od moich przyjaciół, którzy byli / byli deweloperami WoW.
źródło