Solarah prototípus szerver indulás, konzol üzenetek. Sok a nyomkövetési céllal kiírt dolog még. Alapvetően a master és a logger működőképes, a többiek egyelőre elhányják magukat.Keveredett egy-két naplóüzenet is a szövegbe . :)
avagy "It's A Long Way To The Top, If You Wanna... MMORPG"
Ennek a bejegyzésnek a témája most elég technikai jellegű lesz, nem titkoltan azzal a szándékkal, hogy hátha felkelti valaki hozzáértő érdeklődését és beszáll a fejlesztésbe a gyorsabb haladás érdekében. Egy-két újabb konceptrajzot is beraktunk a szövegbe, hogy a többieknek is jusson valami csemege.
Kicsit több mint egy hónapja publikáltam a launchpad-on a majdani szerverünk prototípusának kezdetleges állapotban lévő forráskódját. Ezzel a célunk egy szerver keretrendszer kialakítása, amelyből majd a trunk-ba illesztve a szerver programunk első bevethető verziója fejlődne ki. Az alábbiakban ennek az általunk tervezett felépítését és nagyvonalú működését mutatom be.
A szerver öt önálló binárisként (és processzként) futtatott kiszolgáló egységből áll: master, worker, auth, chat és logger. Ezek mind képesek külön számítógépen futni vagy alapesetben a master indítja a többi processzt – vagy azokat, amelyek azonos hoston futnak vele - forkkal. A processzek egymással tcp kapcsolaton beszélnek, meghatározott portokon keresztül.
A master felügyeli egy un. masterporton kapcsolódva a többiek futását, statisztikát gyűjt róluk, indítja és leállítja a szolgáltatásokat. Később egy szöveges (ncurses alapú) konzolt is megvalósítunk, amin keresztül közvetlenül lehet felügyelni a szerver futását.
Minden processzt alapvetően azonos felépítéssel tervezünk, aminek az alapelemeit az ACE Framework adja. Az un. half-sync/half-async mintát használjuk. Ennek az a lényege, hogy egy threadben kezeljük a hálózati kapcsolatokat és a forgalom (küldés és fogadás) lebonyolítását az ACE_Reactor és kapcsolódó osztályok segítségével és egy másik – ehhez képest aszinkron módon futó - thread-ben végezzük a beérkezett üzenetek feldolgozását és a kiszolgáló funkciók futtatását. A két thread egymással egy üzenetsoron keresztül kommunikál.
A kiszolgálók tehát úgy működnek, hogy a hálózati kapcsolatokon beérkező üzenetek egy üzenetsorba kerülnek, amiből egy feldolgozó thread veszi ki, és dolgozik velük. Opcionálisan threadpool-t is használhatunk, ami azt jelenti, hogy egyszerre több feldolgozó szál vár üzenetre, és így párhuzamosan üzenet feldolgozása is futhat – amennyiben ez megoldható és szükség van rá.
A master által végzett feladatokat már leírtam, következzen most a többi négy kiszolgáló.
A logger processz végzi a szerverben a többi kiszolgálótól érkező logbejegyzések rögzítését fáljba vagy adabázisba. A konkrét feladatokat megvalósító rész készülhet luában is, mert nincsen szükség a c++ sebességelőnyére ebben az esetben, viszont talán kevesebb kóddal és rugalmasabban megvalósítható (esetleg akár menet közben is cserélhető).
A chat processz végzi a szerverben a felhasználói csevegés és egyéb hasonló feladatok (pl. hírek, bejelentések) lebonyolítását. Alapvetően csatornák vannak, amelyekhez felhasználók kapcsolódnak és az adott csatornára küldött üzeneteket szórja szét a tagoknak. A megvalósítás itt is lehetne akár luában.
Az auth processz végzi a szerverben a felhasználók azonosítását a nevük és jelszavuk alapján ill. az un. „game session” létrehozását. A felhasználói adatokat és jogosultságokat egy Postgresql alapú adatbázisban tároljuk. Ezt az adatbáziskezelőt használjuk igény szerint máshol is. A megvalósítás itt is lehetne akár luában.
A worker végzi a szerverben a felhasználói hálózati kapcsolatok kezelését a RakNet rutinkönyvtár segítségével, az entitásrendszer és szabályrendszer szkriptek futtatását és az entitások egymáshoz való térbeli viszonyát követő (máshol talán fizika modulnak hívott) proximity motor futtatását. A szkriptek fájlrendszeren (esetleg adabázisban) foglalnak helyet, az entitások adatai pedig egy entitásadatbázisban.
Ez a processz valósítja meg a játékszerver legfontosabb funkcionalitását, a többi kiszolgáló tulajdonképpen az erről leválasztható és önállóan működni tudó funkciókból jött létre.
Ezek voltak a legfontosabb információk a Solarah Online első szerverprogramjáról ill. arról, hogy hogy akarjuk kialakítani. Feltűnhetett, hogy nincsen szó itt klaszterezésről, terheléselosztásról, monitorozhatóságról, távoli menedzselhetőségről, stb. Ezeket a tulajdonságokat, képességeket nem akarjuk mindjárt ebben a szerververzióban megvalósítani. Próbálunk (épeszű idő és munka árán) megvalósítható célokat kitűzni magunk elé, és a fokozatosság elvét követjük.
Remélem minden mondat értelmesre sikerült. Kérdéseiteket és észrevételeiteket a honlapon megtalálható kontaktokra írjátok.
Azt hiszem, ha valaki külső érdeklődőként követi nyomon a projektet, akkor elég kevés információhoz tud hozzájutni az aktuális, csapaton belüli történésekről. Ezt a hiányt szeretném most kicsit pótolni azzal, hogy leírom az egyes részlegeknél ill. az egész csapatot érintő eseményeket.
Na lássuk akkor sorban, felülről lefelé. :)
Világ. Az ynevesek éppen Armen kidolgozásával vannak elfoglalva, a leírásokat a wikibe pakolgatják fel folyamatosan, csak nem mindig sikerül a menübe is betenni őket. :) Kialakítás alatt van egy egységes formátum a leírásokhoz, hogy könnyebb legyen az információcsere a többi részleggel.
Szabályrendszer. Itt elsősorban Vigi koordinációs munkájának köszönhetően lassan megállapodni látszanak a harcrendszer alapjai, amit a múlt hétvégi csapattalálkozón sikerült rögzíteni. Ugyancsak Vigi kezdeményezése alapján készül egy központi anyag, amiben a fórumon, wikin és a találkozókon elhangzott elgondolások alapján összegzi a jelenlegi terveinket, tudásunkat. Személyes véleményem szerint ez nagyon hasznos lesz, mert jelenleg nincsen egy olyan referencia, amire mindenki hivatkozhatna. Most arról folyik a diskurzus, hogy nagy vonalakban milyen témák kerüljenek bele ill. milyen eszközzel készüljön (párhuzamos szerkesztés, verziózás).
Grafika/3D. Gabo feldobta a grafosoknak, hogy álmodják meg az editorunk interfészét. Na nem konkrétan a skin-t, hanem, hogy milyen képernyőelrendezésben milyen funkciók legyenek elérhetők róla. Rushkiller feldobott egy jó vázlatot, és megy az ötletelés, bár szerintem kicsit alacsony prioritású dolgokról (terepfestés). Temaruk itt is és más részlegeknél is érdekesnél érdekesebb linkekkel bombázza a fórumot, amelyek néha csak lazán kapcsolódnak az adott témához. Ez nem mindenkinek tetszik, de van rá felhatalmazása. :)) Számomra a fórum egyik legérdekesebb témája a „Renderek, shotok” című, ahol mostanában pl. „putrikat” és egy Maleran rendert láthattunk Rushkiller-től.
Audio. Itt kevés „mozgás” van, legutóbb Rushkiller töltött fel tetszetős zenemintákat, hangulatzenének, faluba, csata alá, stb. (Heh, Rush mindenhol ott van újabban. :D ) Gabo feldobta az ötletet, hogy az IrrKlang-ot használjuk az eddig tervezett OpenAL helyett, ami nagyon jó ötletnek tűnik, mivel ingyenes, benne van az ogg-streaming és lehet illeszteni az Ogre erőforráskezelőjéhez.
Prog. Az általam vezetett részleg – erről fogok a legtöbbet írni. Nemrég a Shireel projekttől kerestek meg bennünket, aminek következményeként egy barátságos tapasztalat- és véleménycsere alakult ki köztünk, először az irc csatornánkon beszélgettünk, aztán azóta közvetve-közvetlenül a jatekfejlesztes.hu-n. Sok mindent másképp gondolnak, mint mi, de ígéretes projekt, érdemes odafigyelni rájuk.
Gabo készül a (szokásos) nyári „remeteségére”, így össze kellett hangolnunk a munkáinkat, hogy mivel tud dolgozni a távollétében. Az editorba készíti el az entitásrendszeréhez a guifelületet FLTK alapon, amivel még barátkozik, de szerintem nem lesz komoly problémája vele. ;)
A jelenlegi mérföldkő feladataival kapcsolatban megy a munka, a karaktermodellek animációtámogatásának elkészítése után mutattam egy shotot, ahol egy ninja :) mászkál Blendir kihalt utcáin. Talán lesz belőle film is, csak kell egy rögzítő, ami elfut a kliens mellett, és normális videót csinál.
A terepjáráshoz a PhysX fizikamotort akartuk eredetileg bevetni, de sajnos a Windows oldali mingw fordítókörnyezetben nem támogatott a használata (ebben a kérdésben kicsit konzultáltunk syam-al a jf.hu-ról), ill. vannak bizonyos korlátai, amelyek nem feleltek meg nekünk, ezért most alternatívakeresés zajlik – a legvalószínűbb befutó a Bullet, az ODE mellett. Szeretnénk kialakítani egy magasszintű belső interfészt, amin keresztül használnánk egyébként is, és esetleg másik motorokat is úgy tudunk illeszteni és tesztelni, hogy ne érintse a programjaink többi részét a csere.
Egyébiránt zajlik a következő mérföldkő tervezése, az elvégzendő feladatok az editorra vonatkoznak majd, ill. Gabo kezdeményezésére elindult az editor modulrendszerű megtervezése.
Csapat. A csapat háza táján három fontosabb eseményt említenék meg. Egy programozásban tapasztalt taggal bővült az én részlegem, ill. egy animátor jelentkezett a modellezőkhöz. Remélem jól és sokat fogunk együtt dolgozni a projektben. A másik téma, hogy javában szerveződik a nyári CSAPATTÁBOR, amit nem egészen egy hónap múlva tartunk! Alakul a szállás, a kaja, a pia, a net és a gépek, úgyhogy minden nagyon együtt lesz, hogy egy jót fejlesszünk a projekten, de legalábbis együnk-igyunk és ismerkedjünk. Én már nagyon várom, mert a résztvevők nagyobb felével nem találkoztam még.
Na ennyit az aktuális hírekről, majd kijavítanak, ha esetleg pontatlan voltam, vagy rosszul írtam le valamit. :)
$ pkg-config --cflags PhysXés boldog is az ember.
/usr/lib/PhysX/v2.8.1Ha ez is megvan már tényleg csak egyetlen dolog maradt, íme:
$ sudo ldconfig
Blogged with Flock
Blogged with Flock

Blogged with Flock
2. lépés: Környezetbzr co http://bazaar.launchpad.net/~silentvertigo/solarah/trunkcmake . paranccsal létrehozzuk a makefileokat. Amennyiben a cmake nem találná meg magától a feltelepített függőségeket `-i` kapcsolóval indítva kézileg megadhatjuk neki.make solarah-client utasítás konzolba pötyögése elindítja a fordítást.Blogged with Flock
Blogged with Flock
"A halál továbbra is permanens, azonban össze kéne írni azokat a szituációkat, ahol a karakternek meg kéne halnia normálisan, de mi mégis megmentjük az életét. (a bagatellhalálokra gondoltunk, amikor pölö a nyuszi átharapja a torkodat, meg ilyenek)"
"Ám, nem kell feltétlenül km-nek lenned, ilyesmikhez. Ha szert teszel egy kis hatalomra, pénzre, más játékosokat felbéreljetsz, segitheted öket, küldetéseket adsz nekik, pl hogy szerezzenek meg neked ezt -azt... Sok mindent lehet igy is. Persze igy nemtudod öket felügyelni, irányitani a szörnyeket, de én ily modon is imádtam játszani, még anno nwn-be."
Animált kamera klikk