Magyar, nyílt forrású MMO
Pár éve írtam egy cikket a játékfejlesztésben szerzett tapasztalataimról egy Zandagort nevű játék kapcsán. Akkor a kommentekben tettem egy óvatlan ígéretet, hogy összedobok egy MMO „sablont”, ami nyílt forráskódú és viszonylag jól dokumentált lenne, hogy bárki tudjon belőle saját játékot fejleszteni.
Az élet máshogy alakult, így egy év csúszással egy picit módosult formában tartom meg az ígéretem. A rossz hír az, hogy a dokumentáció szinte teljesen hiányzik. A jó hír viszont, hogy nem egy sablon, hanem egy teljes, működőképes és meglehetősen összetett MMO játék forráskódját adom közre. Méghozzá MIT licensszel, ami a GPL-nél is engedékenyebb, vagyis akár eredeti, akár módosított formában, akár nyílt, akár zárt kóddal, akár non-profit, akár kereskedelmi céllal fel lehet használni.
A forráskód a GitHubon érhető el. Mellékeltem hozzá egy telepítési útmutatót, így akinek minimális lövése van a LAMP-üzemeltetésről, az változatlan formában biztosan el tud indítani egy saját Zandagort szervert. A kód megértése és átírása már nehezebb falat. Dokumentáció nincs, viszont a nevek elég beszédesek (és gyarló módon magyar nyelvűek), így egy FireBuggal felszerelkezve bárki nekiállhat a megfejtésnek. ■
Köszi
Gratula.
Ha adhatok tanácsot, keress valami csapatot, akik ilyesmivel foglalkoznak, akár opensource mód, és próbáld ki magad csapatban is.
Ha jól sejtem ez egy egyszemélyes történet volt.
Csapat
Értékelem a szándékodat, és
+1. Én is értékelem a
Csak egy kérdés. Nem baszogatásból, tényleg érdekel, mert annál az oldalnál is előfordult ugyanez a jelenség, és nem tudtam rájönni, hogy miért. Minden php fájl elején van cache control meg content type header. Miért írtad ki ezeket minden fájl elejére, miért nem tetted külön fájlba, vagy függvénybe. A csatlak.php-ben van egy csomó függvényed, miért nem került ez a nyilvánvalóan ismétlődő dolog egy vagy több ilyen függvénybe?
Másik hasznos dolog lenne, ha utánanéznél a tranzakció kezelésnek, mert kb 5 perc alatt kerül ezzel a kóddal inkonzisztens állapotba az adatbázisod.
Még adhatnék rengeteg tanácsot, de nem lenne sok értelme, struktúrált megoldásokról áttérni OO-ra nem egy napos dolog, és unit testek nélküli kódot hosszan refaktorálni egy olyan hiba, amit nem követ el kétszer az ember. ;-)
Egyetértek
A kritikákkal nagyrészt egyetértek. Éppen ezért csak két olyan dologra reagálok, amikkel nem teljesen. Pontosítok: két olyan dologra, amiknél szerintem elsősorban "webshopos" tapasztalatokból indultok ki.
Az egyik a tranzakciók. Szép dolog a konzisztencia, de ugye mindennek van ára, ennek pedig a sebesség. És van, hogy a sebesség fontosabb szempont. Nem véletlen, hogy MEMORY táblákban van az egész játék, annak minden hátrányával együtt. A gyakorlat ebben az esetben szerintem igazolta ezt a döntést, mert nem igazán volt ezzel probléma. Leszámítva egy-két jól körülhatárolható esetet és helyet, ahol végül LOCK-okkal lettek "szimulálva" a tranzakciók.
A másik az OOP. Szerintem elsősorban a strukturáltság hiányzik a kódból, nem az OOP, de ez részlet kérdés. Ami viszont nem az, hogy megint csak a konkrét rendszerből érdemes kiindulni, nem általában a webshopokból. A konkrét rendszer pedig tömve van olyan részekkel, ahol hatékonyan kell nagy tömegű egymással összefonódott objektumot kezelni. Igen, sokkal szebb lenne a kód, ha egy bolygó termelése, egy flotta mozgása, két bolygó közti kereskedelem egy-egy metódus lenne, amiket csak végighívunk az összes bolygóra, flottára, bolygó-bolygó párra, de ha mindez lecserélhető néhány jól indexelt sql-re, és a sebesség elsőrendű kérdés, akkor az ember lecseréli. Ezért mondom, hogy inkább a strukturáltság hiánya a probléma, nem pedig a "tiszta" OOP-é.
Még egyszer: ezeket nem védekezésképp írtam, és nem is azért, mert ne értenék egyet a kritikákkal. Csak ez a két dolog volt az, amihez a rendszer ismeretében hozzá tudtam tenni némi plusz szempontot.
Én is köszönöm, hogy