XxMichałxX Opublikowano 12 Kwietnia 2009 Udostępnij Opublikowano 12 Kwietnia 2009 Pracuję nad grą MMO+ mejbi RPG i teraz w serwerze zrobiłem tak: Create: GML global.listen=tcplisten(12345,30,1); if(global.listen<=0) { show_message('Nie mozna utworzyc serwera') closesocket(global.listen) game_end() } global.currentid=0 global.player=0 global.ilosc=0 Step: GML var new; new=tcpaccept(listen,1) if new { global.ilosc+=1 global.currentid+=1 global.player[global.currentid]=new } for(i=0; i<global.ilosc; i+=1) { var size,xv,yv; size=receivemessage(global.player) xv=readshort() yv=readshort() global.player[i,xx]=xv global.player[i,yy]=yv } i teraz mam odbieranie info o pozycji graczów i wsadzanie do tablicy, ale nie moge wykombinować jak zrobić wydajną pętle na rozsyłanie tych danych.. bo to trzeba zrobic chyba pętle w pętli .. nie wiem w głowie mi się kręci jak za duzo nad tym rozmyslam.. jakby ktos podal przyklad takiej pętli bede wdzieczny.. sam nie wymysle mam za maly umysl ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 12 Kwietnia 2009 Udostępnij Opublikowano 12 Kwietnia 2009 Ty nie odbieraj położenia graczy, to SERWER ma wiedzieć o położeniu, klient o tym nie wie, tylko się dowiaduje w locie =) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 12 Kwietnia 2009 Autor Udostępnij Opublikowano 12 Kwietnia 2009 no wiem ale to jest kod z serwera i on ma wysyłać do każdego gracza pozycje wszystkich innych graczy prócz niego Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 12 Kwietnia 2009 Udostępnij Opublikowano 12 Kwietnia 2009 i teraz mam odbieranie info o pozycji graczów Chyba czytać potrafię ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 12 Kwietnia 2009 Autor Udostępnij Opublikowano 12 Kwietnia 2009 no to źle sie wysłowiłem sorry ;p serwer odbiera info o pozycji WSZYSTKICH GRACZY i ma rozesłać do każdego info o wszystkich prócz niego .. chyba teraz dobrze powiedzialem e: bo kazdy gracz mu wysyla swoja pozycje Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 12 Kwietnia 2009 Udostępnij Opublikowano 12 Kwietnia 2009 No to źle robisz... wytarczy mały cheat i sobie będe zmieniał pozycje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 13 Kwietnia 2009 Autor Udostępnij Opublikowano 13 Kwietnia 2009 no to co serwer ma sie dowiadywac o kliknieciu przycisku i wtedy zmienic graczowi pozycje? edit: dobra juz wykombinowałem.. kod nie wydajny ale raczej bd działać GML for(i=0; i<global.ilosc; i+=1) { for(a=0; a<global.ilosc; a+=1) { if i=a exit; clearbuffer() writebyte(4) writebyte(a) writeshort(global.player[a,'x']) writeshort(global.player[a,'y']) sendmessage(global.player) } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 13 Kwietnia 2009 Udostępnij Opublikowano 13 Kwietnia 2009 W ogóle nieczytelnie to robisz... Zrób obj_client reprezentujący każdego gracza (na serwie). Przechowujesz w nim jako zmienne lokalne takie dane jak hp, exp, itemki czy co tam chcesz. obj_client pobiera od odpowiadającego jemu klienta (tego, którego reprezentuje) wszystkie dane. I właśnie ten obj_client wysyła do wszystkich innych graczy swoją pozycję, i inne dane. A global.player przechowuje jego id. Jak dla mnie to dużo czytelniejsze i pozytywniej nastawione na dalsze edycje niż Twoja metoda... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Kwietnia 2009 Administratorzy Udostępnij Opublikowano 13 Kwietnia 2009 Nie wysyłaj pozycji w każdym stepie! Jak masz 60 FPS, to wtedy 60 razy w ciągu sekundy zostanie wysłana pozycja. Jak pozycja to jest short, to są chyba dwa bajty, zatem w jednym pakiecie masz 4 bajty + nagłowek, w jednej sekundzie masz zatem 4B * 60 = 240B =~ 2 kb (kilobity). Więc jeżeli masz 11 graczy, to do każdego musisz wysłać pozycję pozostałych 10, zatem wysyłasz do 11 graczy po 10 takich pakietów, 11 * 10 * 2kb >= 220kb, tymczasem przeciętna Neostrada ma bodaj 256kb Uploadu (czyli 32 kB) - nie wliczyłem nagłówków TCP, a te też nieco ważą. 10 graczy zapycha zatem serwer i nic wiecej już nie wyślesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się