Luksor Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 Przejdę od razu do rzeczy. Jak w 39dll napisać synchronizację obiektów, czyli: - jeden z graczy wciska przycisk strzału i tworzy objBullet - gracz wysyła dane, że go stworzył - serwer odbiera te dane i wysyła je do innych graczy - inni gracze widzą obiekt Proszę o pomoc jak to wykonać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 Czyli chodzi Ci ogólnie o połączenie wielu klientów do jednego serwera...? Ja np. tworzę sobie obj_client, w którym są zapisane wszystkie informacje o danym graczu, czyli sock, nick, i inne jakieś tam bajery. (że każdy klient na serwerze ma własny obj_client - są w nim zapisane jego dane) I obj_server odbiera dane po kolei od każdego clienta, a to, co odbierze, wysyła odpowiednio do każdego, innego klienta... :P Gracz naciskając spację wysyła do servera informację id wiadomości powiedzmy s_bullet_client (to jest stała, dawaj jej jakąś tam wartość naturalną), zawierającą x, y, i direction pocisku Kiedy serwer odbierze taką informację, wysyła ją po kolei do wszystkich graczy (oprócz tego, który ją wysłał), o id powiedzmy s_bullet_server. A w cliencie jest kod, który po odebraniu takowej wiadomości tworzy pocisk na odpowiedniej pozycji o odpowiednim kącie. Jak się nad tym głębiej pomyśli, to to jest proste :P PS: Przyjmuję, że wiesz, jak się przesyła dane w 39DLL ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cekol Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 Jak chcesz jak najbardziej dziadowski sposób jaki jest , lecz dzialający , W create obiektu objBullet , wyślij: instance_id , x , y, direction , speed. W serwerze zrób odbiór danych, i przesłanie ich do innych graczy. Możesz zgapić , jak to zrobić patrząc jak gracz przesyła dane do serwera o swojej pozycji i na ten sam wzór zrobić z obiektami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 6 Listopada 2008 Autor Udostępnij Opublikowano 6 Listopada 2008 <POST SKASOWANY> EDIT: Udało się!!! :D Problem tkwił w tym, że w cliencie tworzył się obiek objBullet, który tworzy też gracz, więc dane znowu zostały wysłane do serwka, a ten do innych graczy a gracze do serwka a serwek... i tak się zapętlało. xD Rozwiązaniem było dodanie objBullet_other ktory nie wysyła danych do serwera, jest jako pocisk innego gracza. Teraz wszystko działa poprawnie. Dziękuję bardzo za pomoc! :thumbsup: Ale mam jeszcze 2 pytanka: 1. Jak sprawdzić kogoś IP? 2. Jak wyliczyć ping? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 2. Jak wyliczyć ping? W teorii wysyłasz krótki komunikat innemu graczowi. Potem on ma być zwrócony. Po tym zwrocie oblicza się ping. To chyba jakoś tak. Poczytaj sobie: http://pl.wikipedia.org/wiki/Ping Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 6 Listopada 2008 Autor Udostępnij Opublikowano 6 Listopada 2008 Wyliczanie pingu już zrobione. :) Dzięki Jaklub. :thumbsup: Jeszcze tylko to IP... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 - podziel sobie domyślną ilość klatek na sekundę na milisekundy (np 30/1000) (nie trzeba bo w sumie po co ?) - Gracz wysyła ping i powiedzmy start_ping = true i startuje timer - Server odbiera ping i wysyła z powrotem do gracza, gdzie graczowi zmienia się znów na false, timer się stopuje - podany wynik to ping :) Rozumiesz ? Bo trośke namiesiałem ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 6 Listopada 2008 Autor Udostępnij Opublikowano 6 Listopada 2008 - podziel sobie domyślną ilość klatek na sekundę na milisekundy (np 30/1000) (nie trzeba bo w sumie po co ?) - Gracz wysyła ping i powiedzmy start_ping = true i startuje timer - Server odbiera ping i wysyła z powrotem do gracza, gdzie graczowi zmienia się znów na false, timer się stopuje - podany wynik to ping :) Rozumiesz ? Bo trośke namiesiałem ;P Rozumiem, mam tak samo jak ty. :P Ale dzięki za pomoc. :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Listopada 2008 Udostępnij Opublikowano 6 Listopada 2008 skrypcik lastinIP() :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 7 Listopada 2008 Autor Udostępnij Opublikowano 7 Listopada 2008 skrypcik lastinIP() :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 7 Listopada 2008 Udostępnij Opublikowano 7 Listopada 2008 uwzględniłeś wielkość liter przy wywoływaniu skryptu? :> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 7 Listopada 2008 Autor Udostępnij Opublikowano 7 Listopada 2008 uwzględniłeś wielkość liter przy wywoływaniu skryptu? :> tak, pisałem z małych i tak jak ty EDIT: Działa! :D Skrypt nazywał się lastip ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harv Opublikowano 7 Listopada 2008 Udostępnij Opublikowano 7 Listopada 2008 A dałeś nawiasy? :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 7 Listopada 2008 Udostępnij Opublikowano 7 Listopada 2008 ale ja nie pisałem z małych. :P IP a być dużymi, zresztą przekopiuj z poprzedniego postu ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 7 Listopada 2008 Autor Udostępnij Opublikowano 7 Listopada 2008 Napisałem że pisałem z małych liter i również tak jak ty (duże IP), źle mnie zrozumiałeś ;p Teraz mam problem z czatem. Teorytycznie powinno być dobrze, ale nie jest. client wysyła do serwera tekst: GML clearbuffer(); writebyte(chat); writestring(objControl.nick+" : "+keyboard_string); sendmessage(objControl.socket); serwer odbiera dane, wyświetla w oknie serwera i przekazuje do innych GML server.chatline[4]=server.chatline[3]; server.chatline[3]=server.chatline[2]; server.chatline[2]=server.chatline[1]; server.chatline[1]=server.chatline[0]; server.chatline[0]=readstring(); clearbuffer(); writebyte(rchat); writestring(server.chatline[0]); with(objPlayer) { if(id != other.id) { sendmessage(socketid); } } gracz odbiera i wyświetla dane GML objPlayer.chatline[4]=objPlayer.chatline[3]; objPlayer.chatline[3]=objPlayer.chatline[2]; objPlayer.chatline[2]=objPlayer.chatline[1]; objPlayer.chatline[1]=objPlayer.chatline[0]; objPlayer.chatline[0]=readstring(); Co jest nie tak? Wiadomość nie dociera ani do serwera, ani do innych graczy. Proszę o pomoc. 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ę