Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Więc mam w client'cie taki kod:

GML
clearbuffer();

writebyte(3); //1-wysylanie id //2-wysylanie pozycji //3-wyjscie gracza //4-polaczenie gracza

writeshort(global.idd);

sendmessage(global.sock);

Jest on w game_end, ale po wyłączeniu aplikacji przez X nie wysyła wiadomości o

odłączeniu się gracza, więc slot na server'ze zostaje pełny. Jak to rozwiązać, lub

może jak inaczej wykryć disconnect gracza.

Opublikowano

Jeśli serwer odbierze wiadomość od klienta o rozmiarze 0.

 

 

Ogólne to staraj się całą logikę programować po stronie serwera. Klient powinien być tylko takim wizualizerem stanu gry dla gracza.

Prosty przykład, ruch. Zamiast wysyłać swoją pozycję to klient powinien się "pytać" serwera czy może się ruszyć w to miejsce i serwer w razie czego przesuwa gracza i wysyła pozycję.

Opublikowano

Nie, nie mam.

Dzięki Utermiko za poradę, ale zostanę przy tym sposobie.

Może znacie jakiś inny sposób na wykrywanie czy gracz się rozłączył?

Opublikowano

ale game_end nie rozwiaze problemu gdy np komus sie komputer wylaczy, zamknie gre przez zabicie procesu czy po prostu gdy gra sie scrashuje.

To o czym napisałem wyżej jest odporne na wszystko.

  • Administratorzy
Opublikowano

Pakiet nie zdąży być wysłany przed zamknięciem gry. Jeśli gracz się rozłącza, to musi wysłać pakiet, dostać potwierdzenie z serwera i wtedy dopiero się odłaczyć - oczywiscie na serwerze też nie można od razu po ostatnim pakiecie usunąć gracza, tylko dać 1s. zeby ten ostatni pakiet doszedł (był taki problem w Almorze i czasem jak się gracze rozłączali, dostawali komunikat o niestabilnym połączeniu i w rezultacie po 10s. ich wywalało z gry... mimo, że oni sami z niej wychodzili).

Opublikowano

Dobra zamykam, problem nie leżał po stronie game_end tylko po stronie server'a.

Okazuje się że odbierał informacje tylko przy połączeniu, już to naprawiłem :D

  • 1 miesiąc temu...
Opublikowano
A co jeśli ktoś wyjdzie alt+f4 :) Twoja metoda się tutaj nie sprawdzi :P

 

To chyba logiczne, że piszę się skrypcik, który sprawdza czy gracz się rusza, a jak nie to po 5min wywala go.

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...