Diskuze: MMO server

Volná diskuze MMO server

Avatar
Posix
Člen
Avatar
Posix:

Zdravím, zajímalo by mě, jak se řeší kontrola kolize, nalezení cesty atd. v online hrách, především tedy ve 3D MMORPG. Co jsem nad tím tak přemýšlel, tak jsem dospěl k tomu, že kolize je dobré řešit u klienta i na serveru (kvůli cheatování), jenže jak je to řešené. Ve 2D je to celkem jasné (server jednoduše načte mapu), ale ve 3D mi to přijde docela velká zátěž na server. Napadlo mě, že by se z mapy vyexportovaly jednoduché tvary (kvádr, válec) pro všechny objekty a poté se to nějak počítalo. Na serveru by nebylo třeba počítat přesné kolize, jen taková kontrola proti těm cheatrům. Není mi ale zase jasné, jak by se to udělalo s terénem. Vzájemné kolize hráčů a NPC bych taky nepočítal. Jak byste to udělali vy?

Odpovědět 25.12.2013 4:28
Proč to dělat jednoduše, když to jde složitě.
Avatar
mnauik
Člen
Avatar
Odpovídá na Posix
mnauik:

Jak píšeš ty, udělal bych to na jednoduché tvary a pak zkoumal průnik mezi tvarem toho objektu a např. zdí. Důvod proč jednoduché tvary je jasný - k popsání kvádru ti stačí 2 souřadnice a k popsání koule souřadnice a poloměr.

Ber můj názor jako názor laika. 3D MMO jsem nikdy nedělal a ještě dlouho dělat nebudu, ale dělal bych to tímto způsobem :)

Nahoru Odpovědět  +1 25.12.2013 11:27
minusuj mě, ale zdůvodni to ;)
Avatar
Vojtěch Pospíchal:

Já bych to neřešil úplně tímhle stylem. Vzhledem k tomu že to má být MMO, je velká pravděpodobnost, že se najednou budou odesílat data tisíců lidí. Na to by jsi potřeboval NASA servery. Řešil bych to stylem - všechny kolize client, v případě nějaké nesrovnalosti přepočítat na serveru + po nějakém pravidelném intervalu třeba 10-15 minut to také překontrolovat na serveru. S jednoduchými tvary to nedává příliš smysl, vzhledem k tomu, že těžko tím vyřešíš nějaký problém typu: hacker prochází zdí.

 
Nahoru Odpovědět  -2 25.12.2013 11:49
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Posix
Jiří Gracík:

Určitě udělat kolem hráčů válec, kontrola u klienta, a na serveru bych prováděl kontrolu stejnou, ale ne každý tick, ale třeba každý desátý. Pokud bude klient dobře fungovat a bez nějakých nechtěných modifikací, tak se nemůže nic stát. Pokud se však hráč objeví někde, kam se nemůže dostat a přijde na to server, tak bych ho buďto vrátil, nebo vyhodil :)

Nahoru Odpovědět 25.12.2013 11:51
Creating websites is awesome till you see the result in another browser ...
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Vojtěch Pospíchal
Jiří Gracík:

10-15 minut? k čemu to bude?

Editováno 25.12.2013 11:55
Nahoru Odpovědět  +1 25.12.2013 11:52
Creating websites is awesome till you see the result in another browser ...
Avatar
Michal Žůrek (misaz):

U klienta kontroluj kolize, na serveru jestli se uživatel nedostal kam neměl, pokud ano kickniho ze serveru.

Nahoru Odpovědět  +3 25.12.2013 11:57
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Jiří Gracík
Vojtěch Pospíchal:

V případě kontroly každá desátý tick bude objem dat tak enormní, že jenom náklady za servery by mnohonásobně převýšilo to, co si všichni na Devbooku za celý život vyděláme. Jednou za 10 minut +- to stačí vzhledem k tomu, že pokud je někdo hacker, hackovat bude v kuse i déle než 10 minut.

 
Nahoru Odpovědět  -1 25.12.2013 12:05
Avatar
Odpovídá na Michal Žůrek (misaz)
Vojtěch Pospíchal:

Jak ale potom zjistí, kupříkladu nocollide s objektem, který je na místě které je normálně dostupné?

 
Nahoru Odpovědět 25.12.2013 12:07
Avatar
Jiří Gracík
Redaktor
Avatar
Nahoru Odpovědět 25.12.2013 12:11
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Vojtěch Pospíchal
Michal Žůrek (misaz):

Tak snad na server dá něco takového:

if (player.insertec(objekt) && !player.canGoTo(objekt)) {
    // player je debil a nemá tu co dělat
    // kickne playera
}
Editováno 25.12.2013 12:31
Nahoru Odpovědět 25.12.2013 12:30
Nesnáším {}, proto se jim vyhýbám.
Avatar
Posix
Člen
Avatar
Posix:

No dobře. Řekněme, že objekty bysme měli. Ale jak vyřešit terén..

Nahoru Odpovědět 25.12.2013 13:25
Proč to dělat jednoduše, když to jde složitě.
Avatar
Odpovídá na Michal Žůrek (misaz)
Vojtěch Pospíchal:

Dokážeš si představit, kolik u toho server kódu bude nutné mít vypsaných objektů? Budou to tisíce aktivních objektů které bude muset s kolizí hráče porovnat. Na to by žádný současný server nestačil.

 
Nahoru Odpovědět 25.12.2013 14:02
Avatar
Nahoru Odpovědět 25.12.2013 14:13
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Vojtěch Pospíchal:

Vytřídění doslova statisíců objektů a jejich porovnání je nad síly jakéhokoli stroje. Natož pak člověka.

 
Nahoru Odpovědět 25.12.2013 15:34
Avatar
Luboš Běhounek (Satik):

Vývojem jednoduššího MMO ( http://www.youtube.com/watch?… ) jsem se asi 3 roky při škole živil, tak sem zkusím něco málo zkušeností sepsat.

I když jsme dělali na hře pro 6.-7. třídu, tak se tam našel někdo, kdo dokázal posílat podvodné pakety a získat si tím spoustu peněz -> kontrola všeho musí být na straně serveru.

V rámci optimalizací je dobré dělat i kontrolu na straně klienta a případné nesmyslné nebo neproveditelné akce odfiltrovat už tam a ulevit tak serveru, ale právě kvůli podvrženým paketům, chybám apod. je nutné mít kontrolu i na serveru.

Měli jsme cizí fyzikální engine, takže se veškerý pohyb počítal na serveru - většinu času serveru pak žrala právě fyzika a to bylo vše dost zjednodušené - třeba stromy byly pro fyziku jen jako vysoký trojboký jehlan (-> větve se úplně ignorovaly), na klientovi se samozřejmě vykresloval normální strom.

U her typu WoW, kde není přesná fyzika, stačí pohyb hráče počítat na klientovi a na serveru jen kontrolovat, jestli tam hráč může být a jestli od minulé kontroly (obvykle 1x-několikrát za sekundu) kontrolovat, jestli se mohl dostat tam, kde je (podle hráčovy rychlosti apod.).

Vojtěch Pospíchal : při použití quadtree/octree pro tebe obvykle ani statisíce objektů na obří mapě nejsou problém.

Kolize s jednoduchým terénem (lze ho vyjádřit heightmapou) jsou úplně jednoduché, to můžeš řešit jako ve 2D.

V té 3D reprezentaci pak můžeš brát terén jako jednu entitu a zbylé entity jsou objekty a počítáš běžnou fyziku, objekty jsou reprezentovány zjednodušenou verzí, někdy se pro zjednodušení používá konvexní obálka.

Nahoru Odpovědět 25.12.2013 17:07
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Vojtěch Pospíchal:

A dokážeš si představit, jak obrovské servery by byli potřeba, pokud by to vaše MMO mělo hrát třeba byť "jen" 10K lidí? Tvorba MMO her je jeden z nejsložitějších úkonů herního vývojáře. Existují stovky řešení a žádné není ideální. Ale snažit se cheatery omezit pouze stranou serveru je prostě nesmysl. U malého projektu pro 100 lidí to možná může fungovat ale ve chvíli kdy to jde do tisíců je to nesmysl.

 
Nahoru Odpovědět 25.12.2013 17:26
Avatar
Odpovídá na Vojtěch Pospíchal
Luboš Běhounek (Satik):

Pro takovéhle množství hráčů už těch serverů je většinou víc, např. u zmiňovaného WoW prý každý svět počítá jeden server.

Kontrolovat na serveru vše, co jde (a dává smysl to kontrolovat), většinou není až tak velký problém.

Nahoru Odpovědět 25.12.2013 18:50
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Vojtěch Pospíchal:

Nepřirovnávej to chvíli k WoW prosím. WoW je hra které má 22 milionů aktivních subscriberů. To jest +- 450? * 22 000 000 = 9900000000 korun ročně. S takovým příjmem by jsi si mohl koupit NASU celou ne a ne jenom jejich servery. Počítej normální průměrné MMOčko jako je třeba Guild Wars II. Jejich příjmy tak velké kvůli Pay to Play režimu nemůžou být, tj. musí šetřit na serverech. A čím se nejvíc ušetří? Ubráním kvality/ výpočetního výkonu, počtu serverů atd...! A to vše znamená zatěžovat servery co nejméně. Jinak by prostě vývojář s penězma nevyšel.

 
Nahoru Odpovědět 25.12.2013 19:11
Avatar
Odpovídá na Vojtěch Pospíchal
Michal Žůrek (misaz):

jist jenomže aby vyšel s penězma by musel kontroly omezit na minimum nebo je úplně vypnout.

Nahoru Odpovědět 25.12.2013 20:03
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Vojtěch Pospíchal:

Nebo by stačilo to dělat jen tak pro jistotu po deseti minutách. Nikdo z nás nechce v naší práci prodělávat. MMO hry nemají budoucnost právě kvůli takovýmto blbostem.

 
Nahoru Odpovědět 25.12.2013 20:34
Avatar
Posix
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
Posix:

Jak by se řešil terén pro tento příklad (ve 3D si to doufám dokážeš představit :D ). Pomocí té výškové mapy by to asi nešlo.

Nahoru Odpovědět 25.12.2013 20:39
Proč to dělat jednoduše, když to jde složitě.
Avatar
Odpovídá na Vojtěch Pospíchal
Luboš Běhounek (Satik):

Jen pro upřesnění - WoW vydělává cca pětinu z tebou uváděného množství ( - daně apod.).

Samozřejmě i Blizzard se snaží šetřit, co to jde, takže mají spoustu optimalizací a většinu toho, co jim WoW vydělá, využívají rozhodně jinak, než na provozování WoW serverů, drtivá většina jde na vývoj nových her.

Ony ty základní kontroly většinou nejsou příliš náročné, je to většinou jen jednoduché porovnání hodnot - jestli hráč opravdu má dost financí na nákup toho předmětu, na který klikl, jestli má dost many na vykouzlení toho spellu, případně jednoduché anticheaty, které se dají provozovat na serveru - proti speedhacku apod. (pokud fyziku hráče počítá klient - např. WoW).

I kdyby jsi tu pozici hráče ověřoval jednou za sekundu a na serveru měl 10k hráčů, tak jednou za sekundu provést 10 000 x pár jednoduchých výpočtů s vektory moc času nezabere.

Kontrola speedhacku po 10 minutách by moc smymsl neměla, hráč by to zapl třeba jen v místě, kde musí plnit quest a běhá pořád v jedné lokaci a po těch 10 minutách by jsi to nepoznal.

Nahoru Odpovědět 26.12.2013 17:46
:)
Avatar
Odpovídá na Posix
Luboš Běhounek (Satik):

Buďto by to bylo jako ve WoW - kolize by řešil klient - pak výkon řešit nemusíš.
A nebo na serveru by i tohle bylo možné řešit 2D mapou - 2D mapy se dají používat i pro více vrstev nad sebou (samozřejmě pak má tvorba map nějaké omezení - je nutné navrhnout systém tak, aby vyhovoval všem požadavkům - když budu chtít složité 3D mapy, tak nepoužiju výškovou mapu...).

Nahoru Odpovědět 26.12.2013 17:50
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.