Marzec Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Witam. Tak się ostatnio bawię i nie wiem czy wyjdzie z tego coś poważniejszego, ale zawsze to jakiś krok w przód :sp_ike: Zastanawiam się jak wysłać mapkę z serwera do klienta, tak by wszystkie dane na pewno doszły i nie obciążając tym samym serwera. Robiąc zwykłą metodą podobną do wysyłania wiadomości czatu przy wolniejszych łączach nie pokazywały się wszystkie elementy mapki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Używaj TCP, a inną sprawą jak wygląda sama mapka, mógłbyś podać szczegóły? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Jak mapa jest w pliku, np. obj[1]=objLamp objx[1] = 200 objy[1] = 200 To wysyłałbym w pętli for, po kolei, nazwe, x, y, a client, by tworzyl na mapie, tak mialem u siebie, i dobrze bylo ;p @EDIT: Podobnie miałem bronie ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Grudnia 2009 Administratorzy Udostępnij Opublikowano 29 Grudnia 2009 Tak, najlepiej wyślij 10Mb w jednej sekundzie.... Roki, to nie zda egzaminu :) Może na localhoście działa, ale poza nim nie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 najprościej alarm co 4 sekundy GML with(oItem) { if distance_to_player()<800 { sendTCP(x); sendTCP(y); sendTCP(typ); sendThis(); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marzec Opublikowano 29 Grudnia 2009 Autor Udostępnij Opublikowano 29 Grudnia 2009 Używaj TCP, a inną sprawą jak wygląda sama mapka, mógłbyś podać szczegóły? obiekty rozłożone w siatce 32x32 lub 16x16, jeszcze się nie zdecydowałem. do tego dochodzą jeszcze zmienne startowe w większości obiektów no i trochę tilesów. Mapka ma rozmiar póki co 1024x768 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 dla mnie wogole glupotą jest wysyłanie map podczas gry, jesli koniecznie musisz przeslac jakas mape to zrob oddzielna aplikacje jako downloader chociaz i tak wiekszego sensu w tym nie widze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 I potem każdy server wygląda tak samo... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 I potem każdy server wygląda tak samo... Tak samo ? no jesli przerabiasz przykład to tak, ale jesli robisz swoją mapkę nigdy nie bedzie taka sama jak inne, przeciez nie musisz robic w aplikacji jednej mapy i reszty przesyłać bo nie ma po co, tylko niepotrzebnie zmulisz łącze i utrudnisz uzytkownikom gre. Pozatym nawet jesli musisz dodać jakąś mapkę to albo jesli trzymasz ją w oddzielnym pliku udostępniasz do pobrania czy to przez swoj downloader czy to przez pobieranie na stronie i problemu nie ma. Tak robią w mmo, zawsze puki nie uaktualnisz wersji nie grasz bo sie downloader włancza, i to jest myk. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Grudnia 2009 Administratorzy Udostępnij Opublikowano 29 Grudnia 2009 Dokładnie. Mapy jako update możesz umieścić normalnie na WWW, na pierwszym lepszym hostingu i przy starcie gra sprawdza czy jest update, np. wysyłając do PHP zapytanie które zwraca, czy gra jest akutalna czy potrzebny jest update. Oczywiście jak www nie działa to też zakładasz sobie, że gra jest aktualna/nieaktualna jak tam chcesz i na tej podstawie zezwalasz/odmawiasz dalszej gry. Zawsze możesz dodatkowo przy starcie klienta wysyłać do serwera gry jakieś id wersji mapy i ten najwyżej nie pozwoli się zalogować. Absolutnie odradzam wysyłania tych danych na zasadzie klient<>serwer, bo niepotrzebnie zamulisz łącze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Jeśli wszystko jest wyrównywane do siatki to w sumie nie musisz wysyłać dokładnej pozycji x,y tylko jej krotność 32 czy 16, ograniczysz to do 2 bajtów. Więc ja bym zrobił to tak, dla serwera, w oddzielnym obiekcie o nazwie np. WysylaczMapy: GML (Create) socket = -1; // ID socketa klienta do którego serwer wyśle dane krok = 0; // Czyli ktora operacje bedziemy wykonywac alarm[0] = 300; // Timeout 30 sekund</span></span> GML (Alarm0) // Sprawdz czy socket jest polaczony if( socket_podlaczony( socket ) ) zamknij_socket( socket ); // Zamknij jesli tak // Zniszcz show_debug_message( 'Wyslanie mapy nie powiodlo sie.' ); instance_destroy(); GML (Step) // Sprawdzenie czy przekazano ID socketa i czy jest on polaczony switch( krok ) { // Wyslanie pakietu inicjujacego case 0: wyczysc_bufor(); dodaj_do_bufora( 1 ); // ID pakietu dodaj_do_bufora( ilosc_obiektow ); // Ilosc obiektow dodaj_do_bufora( ilosc_tilesetow ); // Ilosc tilesetow wyslij_bufor( socket ); alarm[0] = 300; // Wyzeruj timeout // Nastepny krok krok += 1; break; // Oczekiwanie potwierdzenia odbioru pakietu inicjujacego case 1: if( odebrano_dane() ) { alarm[0] = 300; // Wyzeruj timeout if( odczytaj_z_bufora() == 1 ) krok += 1; // Nastepny krok } break; // Wysylanie okietow case 2: wyczysc_bufor(); dodaj_do_bufora( 2 ); // ID pakietu dodaj_do_bufora( obiekty_wyslane ); // ID obiektu with( obiekty[obiekty_wyslane] ) { dodaj_do_bufora( x ); // x obiektu dodaj_do_bufora( y ); // y obiektu // ... inne zmienne } wyslij_bufor( socket ); alarm[0] = 300; // Wyzeruj timeout krok += 1; // Nastepny krok break; // Oczekiwanie potwierdzenia odbioru obiektu case 3: if( odebrano_dane() ) { alarm[0] = 300; // Wyzeruj timeout if( odczytaj_z_bufora() == 2 ) { obiekty_wyslane += 1; if( obiekty_wyslane < obiekty_do_wyslania ) krok -= 1; // Poprzedni krok else krok += 1; // Nastepny krok } } break; // Wysylanie tilesetow case 4: wyczysc_bufor(); dodaj_do_bufora( 3 ); // ID pakietu dodaj_do_bufora( tilesety_wyslane ); // ID tileseta with( tilesety[tilesety_wyslane] ) { dodaj_do_bufora( x ); // x tilesetu dodaj_do_bufora( y ); // y tilesetu // ... inne zmienne } wyslij_bufor( socket ); alarm[0] = 300; // Wyzeruj timeout krok += 1; // Nastepny krok break; // Oczekiwanie potwierdzenia odbioru tilesetu case 5: if( odebrano_dane() ) { alarm[0] = 300; // Wyzeruj timeout if( odczytaj_z_bufora() == 3 ) { tilesety_wyslane += 1; if( tilesety_wyslane < tilesety_do_wyslania ) krok -= 1; // Poprzedni krok else krok += 1; // Nastepny krok } } break; // Wyslanie pakietu konczacego case 6: wyczysc_bufor(); dodaj_do_bufora( 4 ); // ID pakietu wyslij_bufor( socket ); alarm[0] = 300; // Wyzeruj timeout // Nastepny krok krok += 1; break; // Oczekiwanie potwierdzenia odbioru pakietu inicjujacego case 7: if( odebrano_dane() ) { if( odczytaj_z_bufora() == 4 ) { instance_destroy(); } } break; } Obiekt tworzymy tak:GML i =instance_create(WysylaczMapy); i.socket = id_socketa_klienta; Dla klienta analogicznie, odpowiada tylko na wiadomości serwera. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Do wszystkich co twierdzą, że wysyłanie mapy podczas gry jest bezsensu, nie nie jest. W Tibii jest takie rozwiązanie i nikt nie narzeka, że laguje, wręcz przeciwnie. >.> I dzięki czemu mapa może być na bierząco modyfikowana. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 No, o to mi chodziło mówiąc że każdy server potem ma te samą mapę, że np. ktoś ma server mojej gry, hostuje, ale wiele innych osób też hostuje, a co za tym idzie na każdym servie jest ta sama mapa, no i jak potem zrobić np. ranking serverów, cokolwiek? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Do wszystkich co twierdzą, że wysyłanie mapy podczas gry jest bezsensu, nie nie jest. W Tibii jest takie rozwiązanie i nikt nie narzeka, że laguje, wręcz przeciwnie. >.> I dzięki czemu mapa może być na bierząco modyfikowana. Nie wzieles tylko pod uwage kilku istotnych faktów, takich jak szybkość łącza ich serwerów, tego że podczas takich zmian dodawany nie jest jakiś ogromny teren tylko najwyżej mały lub wogole to są zmiany kosmetyczne polegające na zmianie kilku gifowych grafik. Dla wiekszych rzeczy ktore dodają przecież są updaty clienta. No, o to mi chodziło mówiąc że każdy server potem ma te samą mapę, że np. ktoś ma server mojej gry, hostuje, ale wiele innych osób też hostuje, a co za tym idzie na każdym servie jest ta sama mapa, no i jak potem zrobić np. ranking serverów, cokolwiek? Nie musi być ta sama jesli udostępnisz ich kilka rob zrobisz jakiś mapeditor :P. Ranking serwerów to jest błahostka bo przecież nie rozróżniasz serwerów po mapie tylko po jakimś unikalnym identyfikatorze! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Nie wzieles tylko pod uwage kilku istotnych faktów, takich jak szybkość łącza ich serwerów, tego że podczas takich zmian dodawany nie jest jakiś ogromny teren tylko najwyżej mały lub wogole to są zmiany kosmetyczne polegające na zmianie kilku gifowych grafik. Dla wiekszych rzeczy ktore dodają przecież są updaty clienta. Ja nie mówie o grafice do mapy : O, tylko o pozycjach przedmitów, tilesów. Przesyłanie grafiki to inna sprawa, powinno być to załatwiane poprzed update. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Ja bym to zrobił przez ftp serwer tworzy plik tekstowy z położeniem wszystkich obiektów i wysyła na ftp. Aplikacja klienta wykrywa że serwer używa innej mapy, więc łączy się z ftp, ściąga na dysk, przetwarza i można grać. Coś na kształt contentu ściąganego jak ktoś użyje custom mapy do cs'a. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Po co FTP? lol. przecież można do tego zrobic swój własny prosty protokół. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Po co FTP? lol. przecież można do tego zrobic swój własny prosty protokół. dlatego że są gotowe dlle do tego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Grudnia 2009 Administratorzy Udostępnij Opublikowano 29 Grudnia 2009 Ale ftp? to normalnie przez HTTP można pobierać, masz problem z głowy z logowaniem itp :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 dlatego że są gotowe dlle do tego? To jest żaden argument. Może odrazu do zrobienia gry zaprzęgnijmy HTTP, albo nie, SSH! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Grudnia 2009 Administratorzy Udostępnij Opublikowano 29 Grudnia 2009 To jest żaden argument. Może odrazu do zrobienia gry zaprzęgnijmy HTTP, albo nie, SSH! POP3. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 Heh, no na przykład :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 GG? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 29 Grudnia 2009 Udostępnij Opublikowano 29 Grudnia 2009 GG? Taa... przy tym zarąbistym GG'owskim transferze danych nie doczekalibyśmy sie mapy do 24.12.2012 ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marzec Opublikowano 31 Grudnia 2009 Autor Udostępnij Opublikowano 31 Grudnia 2009 Tymon dzięki za wyczerpujący przykładzik :D postaram się go ogarnąć jak znajdę chwilkę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LordVoldemort Opublikowano 18 Stycznia 2010 Udostępnij Opublikowano 18 Stycznia 2010 Przepraszam że odświeżam. Ale jak np chciałbym zrobić tak że jak gracz wejdzie do gry to serw wysyła mape.. Podobnie jak u kolegi mam siatkę 32x32. W tym stringu może być ponad 500obj. Jak już mówiłem mapka jest wysyłana tylko podczas gdy gracz wchodzi pierwszy raz do gry. Jak zrobić jakiś pasek postępu czy coś w tym stylu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 18 Stycznia 2010 Udostępnij Opublikowano 18 Stycznia 2010 tu masz takowy pasek, podejrzyj go i zrob na jego podstawie swój: https://gmclan.org/index.php?sciagnijplik=144 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ę