Autor Wątek: MUD  (Przeczytany 2966 razy)

Offline skiter

  • Użytkownik

# Sierpień 02, 2006, 14:51:05
Witam.

Jestem programistą sieciowym, co za tym idzie pisze przewarznie aplikacje sieciowe, oparte na TCP/UDP.
Jestem w trakcie pisania serwera MUD, wraz z wlasnym klientem, co by bylo latwiej sie poruszac, po "wirtualnym" swiecie. Generalnie klient ma dzialac jak "klient prawdziwego muda", czyli jak telnet, a raczej widok bedzie taki jak w MUD, z roznica taka ze bedzie to wlasny klient a nie "graficzny" i nie na "protokole telnet'a".

Szukam?, mozna to tak nazwac, pomocy ... ? generalnie ochtnikow co znajsi sie na programowaniu sieci, pod systemami Windows/Linux ( i jednym i 2! ).

Dla pocieszenia, napisze tylko ze nie musi to byc jakis super wymiatacz sieciowy, bo sam nie uwarzam sie za jakiegos "guru", i nie oczekuje ze ktos kto by mnie chcial pomoc, tez bedzie "wszech-wiedzacy". Do pracy wystarczy "podstawowa" wiedza z dzialu Linux - sieć, i Windows - sieć, calosc jest oparta na "wątkach", pod Windows jest to _beginthread czyli "nie zalecane ; p" przez M$, rozwiazanie wtakow, a pod Linux, jest to biblioteka PThread.

Caly projekt jest napisany w C/C++, nie powiem ktory jezyk przewarza ; p, nie trzymam sie "jednego" i maniakalnie nie pisze "tylko" w jednym, ale generalnie kod jest napsiany w C, bo jakos tak mi wygodniej pisac ; p, czyli tam jest troszke, maly nie porzadek, dalo by sie to przerobic na "czyste" C++, ale jakos brak mi weny ... wole C ; p. Kompilator jaki jest wykozystywany to MinGW, czyli nie jest to VS jak tez BCB, gdzie pisanie "troszke" inaczej wyglada ( nie niema tam "pomocników", wszystko trzeba klepac recznie ; p ), z IDE Code::Blocks.

Projekt wygklda tak:
- brak strony ( z informacjami, bo co tam dam ? ... ze jest i brak plikow ; p, nie ma grafiki bo to MUD, w pewnym zalozeniu ; p )
- brak forum ( jak jestem sam to co sobie mam pisac sam do siebie ? )
- brak dokumentacji ( powodem jest to ze dokumentacji nie ma bo nie ma za wiele kodu - raptem ok 1500 linijek kodu, serwer i klient - wiec nie ma co dokumentowac )

Za to jest podstawowy protokol ( wlasny ), pare podstawowych, kodow jak poruszanie sie, rozmowa, mozliwosc banowania ( no to tylko narazie sprawdza czy jest, bo nie ma GM'ow i innych ... jeszcze ; p ), i jakies takie ... inne, czyli za wiele nie ma.

Szukam kogos kto by mial ochpte sie pobawic w "wielo systemowe" programowanie, bo na tym wlasnie chcialem oprzec "nauke" pisania.

W razie checi do pisania zapraszam na mail: skajter(at)gmail.com lub d owypowiedzenie sie w tym poscie ; )

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 02, 2006, 15:12:29
Cytuj
calosc jest oparta na "wątkach"
Chyba sobie chcesz utrudnić życie. ;) Znacznie prościej i efektywniej jest obsługiwać całość w jednym wątku przy użyciu funkcji select() (tak to jest rozwiązane w większości MUDów, w które grałem). :)

Cytuj
Caly projekt jest napisany w C/C++, nie powiem ktory jezyk przewarza
Chyba mylisz podział na C/C++ z podziałem na strukturalnie/obiektowo, bo nie sąszę, żebyś niektóre pliki kompilował przez gcc (C), a inne przez g++ (C++). W C++ też można bez problemu pisać strukturalnie i nadal będzie to kod C++. :)

Offline skiter

  • Użytkownik

# Sierpień 02, 2006, 15:24:39
Cytuj
calosc jest oparta na "wątkach"
Chyba sobie chcesz utrudnić życie. ;) Znacznie prościej i efektywniej jest obsługiwać całość w jednym wątku przy użyciu funkcji select() (tak to jest rozwiązane w większości MUDów, w które grałem). :)
Powiedzmy ze ten select(), po prawnie dziala w windows ; ), a wiekszosc mudow jakei widziales dzialaja na systemach Linux, a roznica spora miedzy jednym systemem a drugim, a jak napsialem serwer dziala na 2 systemach!, z tym ze jeszcze zapomnialem dopisac ze klient jest tylko pod winde ; p

Cytuj
Caly projekt jest napisany w C/C++, nie powiem ktory jezyk przewarza
Chyba mylisz podział na C/C++ z podziałem na strukturalnie/obiektowo, bo nie sąszę, żebyś niektóre pliki kompilował przez gcc (C), a inne przez g++ (C++). W C++ też można bez problemu pisać strukturalnie i nadal będzie to kod C++. :)

Nie chodzilo mi o "kompilator" ale o kod ... ze wiekszosc jest napisana w C, jako kod!, a ze jest kompilowane za pomoca g++ to juz inna sprawa ; )

Offline Kurak

  • Użytkownik

# Sierpień 02, 2006, 15:34:56
Powiedzmy ze ten select(), po prawnie dziala w windows ; ), a wiekszosc mudow jakei widziales dzialaja na systemach Linux, a roznica spora miedzy jednym systemem a drugim, a jak napsialem serwer dziala na 2 systemach!, z tym ze jeszcze zapomnialem dopisac ze klient jest tylko pod winde ; p
Eee select działa dobrze i na Windows, i na Linuksie. Jeśli umiesz go obsługiwać ;p

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 02, 2006, 15:58:19
Powiedzmy ze ten select(), po prawnie dziala w windows ; ), a wiekszosc mudow jakei widziales dzialaja na systemach Linux, a roznica spora miedzy jednym systemem a drugim, a jak napsialem serwer dziala na 2 systemach!, z tym ze jeszcze zapomnialem dopisac ze klient jest tylko pod winde ; p
Jak napisałem, większość MUD'ów, w które grałem jest na tym oparta (tzn. była oparta na MUD'zie Envy, którego źródła są dostępne), a skoro większość działa na Linuksie, to znaczy że select też tam działa. :)

Cytuj
Nie chodzilo mi o "kompilator" ale o kod ... ze wiekszosc jest napisana w C, jako kod!, a ze jest kompilowane za pomoca g++ to juz inna sprawa ; )
Jak kompilujesz w g++, to znaczy, że piszesz w C++. Oczywiście możesz mieć taki kod, który się skompiluje i jako C i jako C++, ale samo używanie g++ powoduje, że musisz pisać w C++ (np. w C mógłbyś nazwać zmienną określającą klasę postaci jako "class", a ponieważ piszesz w C++, nie możesz tak zrobić). :)

Offline skiter

  • Użytkownik

# Sierpień 02, 2006, 16:06:32
Powiedzmy ze ten select(), po prawnie dziala w windows ; ), a wiekszosc mudow jakei widziales dzialaja na systemach Linux, a roznica spora miedzy jednym systemem a drugim, a jak napsialem serwer dziala na 2 systemach!, z tym ze jeszcze zapomnialem dopisac ze klient jest tylko pod winde ; p
Eee select działa dobrze i na Windows, i na Linuksie. Jeśli umiesz go obsługiwać ;p
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/select_2.asp
Cytuj
Four macros are defined in the header file Winsock2.h for manipulating and checking the descriptor sets. The variable FD_SETSIZE determines the maximum number of descriptors in a set. (The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.)
Przegladam w takim ukladzie moj plik ... i zgadza sie!
Cytuj
#ifndef FD_SETSIZE
#define FD_SETSIZE   64
#endif
Teraz ... no ok moge zmienic! ale .. grzebac ? - NIE!

Ciekawszym rozwiazniem bedzie:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaasyncselect_2.asp

I tutaj zostaje tak, ze mam w cholere kodu na pilnowanie, jednego systemu, i jeszcze podobny kod na pilnowanie innego systemu, czyli analizujac napisany kod za dzialanie to ja wybieram ilosc kodu!
Im mniej kodu napisze tym lepjej bo mniej bedzie bledow!, a na dzien dzisiejszy "serwery" nie maja 128 ramu, i procesorki po 133MHz, tylko sa to dosc poterzne maszyny ; )

Podlinux nie chcialo mi sie szukac z "select()", ale sprawa wyglada calkiem podobnie z tym ze tam jest ograniczenie na "user" i "root", gdzie na maszynie "dedykowanej" nie zawsze mam dostep do "plikow" i nie bede mogl zmienic "ustawien" select'a, lub wlasciciel serwera ( ja ktylko wyporzyczam w pewnym sensie ), nie pozwoli na takei akcje, jak na "select()", dlatego inne serwery, uzywaja wątkow wymieszanych z "select", ot chociazby Apache ...

@UP
Select pod linuxem dziala!, i smiga wysmienicie!, nawet dziala poll i pare innych bajerow ale:

TO JEST GRA I SERWER NAPISANY POD 2 SYSTEMY OPERACYJNE!

Windows i Linux!, umiecie czytac z zrozumieniem czy nie bardzo ?

Offline Kurak

  • Użytkownik

# Sierpień 02, 2006, 16:45:11
Powiedzmy ze ten select(), po prawnie dziala w windows ; ), a wiekszosc mudow jakei widziales dzialaja na systemach Linux, a roznica spora miedzy jednym systemem a drugim, a jak napsialem serwer dziala na 2 systemach!, z tym ze jeszcze zapomnialem dopisac ze klient jest tylko pod winde ; p
Eee select działa dobrze i na Windows, i na Linuksie. Jeśli umiesz go obsługiwać ;p
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/select_2.asp
Cytuj
Four macros are defined in the header file Winsock2.h for manipulating and checking the descriptor sets. The variable FD_SETSIZE determines the maximum number of descriptors in a set. (The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.)
Przegladam w takim ukladzie moj plik ... i zgadza sie!
Cytuj
#ifndef FD_SETSIZE
#define FD_SETSIZE   64
#endif
Teraz ... no ok moge zmienic! ale .. grzebac ? - NIE!

Ciekawszym rozwiazniem bedzie:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaasyncselect_2.asp

I tutaj zostaje tak, ze mam w cholere kodu na pilnowanie, jednego systemu, i jeszcze podobny kod na pilnowanie innego systemu, czyli analizujac napisany kod za dzialanie to ja wybieram ilosc kodu!
Im mniej kodu napisze tym lepjej bo mniej bedzie bledow!, a na dzien dzisiejszy "serwery" nie maja 128 ramu, i procesorki po 133MHz, tylko sa to dosc poterzne maszyny ; )

Podlinux nie chcialo mi sie szukac z "select()", ale sprawa wyglada calkiem podobnie z tym ze tam jest ograniczenie na "user" i "root", gdzie na maszynie "dedykowanej" nie zawsze mam dostep do "plikow" i nie bede mogl zmienic "ustawien" select'a, lub wlasciciel serwera ( ja ktylko wyporzyczam w pewnym sensie ), nie pozwoli na takei akcje, jak na "select()", dlatego inne serwery, uzywaja wątkow wymieszanych z "select", ot chociazby Apache ...

@UP
Select pod linuxem dziala!, i smiga wysmienicie!, nawet dziala poll i pare innych bajerow ale:

TO JEST GRA I SERWER NAPISANY POD 2 SYSTEMY OPERACYJNE!

Windows i Linux!, umiecie czytac z zrozumieniem czy nie bardzo ?
Nie za bardzo zrozumiałem Twojego posta (mam problemy z czytaniem ze zrozumieniem?), ale ja używałem spokojnie select na Windows. Beej mi to polecił.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 02, 2006, 16:49:36
Cytuj
Teraz ... no ok moge zmienic! ale .. grzebac ? - NIE!
Nie musisz nigdzie grzebać. Z tekstu, który zacytowałeś oraz z przytoczonego kodu jasno wynika, że możesz samemu przedefiniować FD_SETSIZE bez żadnego grzebania. Wystarczy zwykłe "#define FD_SETSIZE 1024" przed każdym włączeniem <windows.h>. :)

Cytuj
Select pod linuxem dziala!, i smiga wysmienicie!, nawet dziala poll i pare innych bajerow ale:

TO JEST GRA I SERWER NAPISANY POD 2 SYSTEMY OPERACYJNE!
Mi select działał i smiga pod oboma systemami. Tak naprawdę, to WinSock jest totalną zrzynką Linuksowych gniazdek, więc wystarczy dobrze napisany kod, parę #define'ów załatwiających niekompatybilności w stylu EWOULDBLOCK/WASEWOULDBLOCK i gniazdka śmigają. :)

Offline skiter

  • Użytkownik

# Sierpień 02, 2006, 17:10:54
Mozliwe ... nie wiem : P, tzn wiem ze dzialaja ale jaka maja wydajnosc to nie wiem bo nie sprawdzalem, ale czy musze pisac jak "kazdy" ... ? czyli "MUD = select()" ?, raczje nie ; p, wiec pisze na wątkach.

Chcialem jednak napisac jeszcze ze to jest post z "proźbą o pomoc" a nie dyskutowaniem "select vs. wątki". ; p, kod jaki jest kazdy widzi, a jezeli ktomus nie lezy taki to zawsze napisze swoj ; p

Offline MoN

  • Użytkownik

# Sierpień 02, 2006, 17:29:10
Ja mam jedno pytanko: czy klient bedzie oferowal graczom wszystkie udogodnienia, jakie maja standardowe klienty do MUDow? Tzn automappery, skrypty, triggery, aliasy itp.? Czy tez ma byc z zalozenia takim telnetem, tylko ze na innym protokole?

Pozdrawiam

MoN

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 02, 2006, 19:17:45
Mozliwe ... nie wiem : P, tzn wiem ze dzialaja ale jaka maja wydajnosc to nie wiem bo nie sprawdzalem, ale czy musze pisac jak "kazdy" ... ?
Jasne, że nie musisz - wybór użytego rozwiązania należy do Ciebie. Ja tylko chciałem po prostu ostrzec, że pakujesz się w wątki, razem z ich wszystkimi implikacjami (synchronizacja, komunikacja pomiędzy wątkami, itp.), chociaż istnieje łatwiejsze rozwiązanie. Z doświadczenia wiem, że zrobienie aplikacji na wątkach nie jest banalne, zwłaszcza, jeżeli wątki mają ze sobą ściśle współpracować. :)

Offline skiter

  • Użytkownik

# Sierpień 02, 2006, 19:27:40
Ja mam jedno pytanko: czy klient bedzie oferowal graczom wszystkie udogodnienia, jakie maja standardowe klienty do MUDow? Tzn automappery, skrypty, triggery, aliasy itp.? Czy tez ma byc z zalozenia takim telnetem, tylko ze na innym protokole?

Pozdrawiam

MoN
Auto mapery i inne bajery wynikaja z samego "protokolu", bo sam "telnet" w sobie jest ujednolicony jako standard, wiec sila rzeczy sa takie dodatki, do typowego MUD'a, bo gracz poruszajac sie po swiecie, musi np pisac:

go up lub go north
move bag
open door

etc...

Takie cos leci w postaci "tekstu" do serwera nie jest to kod "binarny" w zadnym stopniu, a to oczym piszesz to jest swego rodzaju "ułatwiacz", ktory wysyla i pisze za ciebie, czyli ty naciskasz strzalke, i on wysyla:

go up

Moj al'a MUD jest pisany od 0 co za tym idzie ma wlasny protokol, i wlasnego klienta, generalnie zasada dzialania jest podobna do "prawdziwego" muda, z ktorego winno sie kozystac z "Telnet'a", a nie klientem ktory "pomaga", przynajmniej takmi sie wydaje.

Nic nie stoji na drodze by "klienta" napisac w trybie graficznym!, taki tez plan mam w zamiarach, kozystajac z BCB Personal, gdzie sie szybciochem pisze GUI, a raczej sklada, a "ulatwiacze" tez pewnie beda ... pytanie na ile mi starczy sil i pomyslow by takie bajery jak "auto mapa" czy "skrypty".

Narazie jest to "telnet" na wlasnym protokole, z dzialaniem strzalek ; ), ale kto wie ... : P

Offline skiter

  • Użytkownik

# Sierpień 04, 2006, 09:39:20
A po co programujesz ?, przeciez tyle programistow na swiecie i ty tez piszesz kod ... po co ? daj innym te rozrywke i niech inni pisza, pisza tyle lat maja tyle doswiadczenia!, ( nie wiem nieznam, ale strzelam ).

Dalczego powstaja nowe gry?, przeciez juz starczy tych gier! ... zadajesz takie pytania jak bys sie dopiero co urodzil.

Chce sie nauczyc pisac "sieć" to nie jest tak oczywiste jak sie nie napsize prawda ?, trzeba napisac! grobym tłustym drukiem:

"Hej! ja sie ucze!, uwaga ja sie ucze sieci, kto mi pomorze!"

Kazdy programista sie uczy, i raczej doputy nie bedzie kodowac i programowani, caly czas bedzie sie uczyl, swiadomie czy nie swiadomie, zawsze ... gdzies cos nowego innego mu sie pojawi na ekranie w postaci nie znanego kodu!, nie ma ludzi "wszystko wiedzacych!".

Ja dalem sobie cel!, napisac serwer do "gry", a ze jest to typowa konsolowa, gra ... samo przez siebie idzie w strone MUD'a to nie jest PRAWDZIWY!, mud ... tylko wlasna interpretacja "myśli" gry ... czyli wlasny klient, wlasny serwer, wlasne opracowanie "swiata", NPC i inne, a kto powiedziale ze to musi byc MUD? po malych poprawkach w protokole i kodzie nadaje sie na nowy serwer MMORPG, czy inne ustrojstwo, tak ze sam "silnik" pozostaje serwerem gry a nie jak juz pisalem w pierwszym poscie:

PRAWDZIWYM SERWEREM MUD!

Przypomne jeszcze raz!, to nie jest serwer MUD tylko jego imitacja, kopia, wlasne weobrarzenie o takim serwerku!.

Offline skiter

  • Użytkownik

# Sierpień 04, 2006, 12:19:31
Czyli ten dzial sprowadza sie do:

"Pisze gre!"

Acha .. czyli siadam wiem juz wszystko super cacy, przeczytalem tysiace ksiarzec, miliony stron, siedze i pisze nudzi mi sie ... jestem wszech-wiedzacy!, i zeby bylo mi razniej poszukuje kogos kto bedzie taki sam jak ja czyli wysztko wiedzial!, i odrazu pisze gre ... no ok.

Napisalem posta bo:
- nie wszystko wiem!
- nie mam pomylow na wiele rzeczy jakei mogly by sie tam znalezdz
etc ...





Offline skiter

  • Użytkownik

# Sierpień 04, 2006, 20:23:31
Nikt wszystkiego nie wie, nie ma sie co tym podniecac :) Raczej nikt ci nie pomoże, jeżeli na każdą sugestię będziesz odpowiadać takimi postami :) Chciałem Ci pomóc, ale za bardzo nie wiem w czym, bo brakuje konkretów. Potrzebujesz kogoś do testów? Żeby wytłumaczył Ci jak jest zrealizowana obsługa sieci w mudach? Żeby przetestować to co napisałeś? Żeby pomóc w zintegrowaniu świata z obsługą sieci? Żeby napisać grę na podstawie twojego kodu siecioewgo? Na razie mało wiadomo, napisz konkretniej po co potrzebujesz ludzi. :)
Przepisac, po swojemu na wersje "tekstowa" gre Tibia, o moze tak ; p, tamta jest "graficzna" i ma wiele ... rzeczy ktore bym z przyjemnoscia wywalil, i nie ma paru ktorych mnie brakuje, tam jest zwykle "zbijanie expa" i wyscig kto wiecej tym lepjej ... moze i system PVP tam wymiata, jednak mnie system PVP wcale nie bawi, nie a takim ukladzie jak jest zrobiony tam!

Czyli zrobic "tekstowego" MMORPG, lub cos pod tym katem, nie takiego "prawdziwego", MUD'a ... bo nie jestem az takim specem od "gier", ale wydaje mi sie ze taki "podstawowy" silnik serwer MMORPG.

Ale im dalej pisze tym bardziej wychodze z zalozenia ze nikt mnie nie pomoze, i bedzie mi o wiele przyjemniej pisac po swojemu, pisac swoj swiat i swoje pomysly ...

EOT.
Temat mozna zamknac ... bo jakos ten numer nie wyjdzie, nie mam "sily" pracowac z "grupie", jestem bylem i bede "samotnym programista", ktory w zaciszu swojego monitora, przepisuje mysli na program.