Luksor Opublikowano 8 Września 2009 Udostępnij Opublikowano 8 Września 2009 Jak zrobić w 39dll aby mogła dołączyć tylko wyznaczona liczba graczy i jak zrobić aby wyrzucało też graczy z tym samym nickiem? Próbowałem już wielu rzeczy ale serwer graczy nie wyrzuca. Proszę o pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Września 2009 Administratorzy Udostępnij Opublikowano 8 Września 2009 Max liczbę graczy dajesz na początku inicjując połączenie ( tcplisten( port, liczba graczy) ), a z tym samym nickiem - sprawdzasz, czy już takiej osoby nie ma. Najlepiej trzymać graczy w jakiejś tablicy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 8 Września 2009 Autor Udostępnij Opublikowano 8 Września 2009 Max liczbę graczy dajesz na początku inicjując połączenie ( tcplisten( port, liczba graczy) ), a z tym samym nickiem - sprawdzasz, czy już takiej osoby nie ma. Najlepiej trzymać graczy w jakiejś tablicy. Zmieniłem kod na: listen = tcplisten(21001, 2, true); A nadal może grać więcej niż 2 graczy. :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Września 2009 Administratorzy Udostępnij Opublikowano 8 Września 2009 Widocznie ten argument mówi o tym ile osób może czekać w kolejce na połączenie... w takim razie kodem musisz ich odrzucać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 8 Września 2009 Autor Udostępnij Opublikowano 8 Września 2009 To teraz właśnie ten kod :/ Tyle już sposobów miałem... Ostatnio spróbowałem tak, ze gdy dołącza gracz to id jego obiektu zapisuje się w zmiennej newestplayer. W każdym obiekcie gracza co step jest sprawdzany warunek czy allplayers jest większe niż maxplayers. Jeśli tak to kolejny warunek: jeśli twoje id to newestplayer - wyślij wiadomość kick. Powinno działać, ale serwer nic nie robi, można odpalić ile się klientów chce. Proszę o pomoc. EDIT: Wracam za 20min Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Września 2009 Administratorzy Udostępnij Opublikowano 8 Września 2009 Zrób tablicę global.players[10], daj każdemu elementowi wartość -1, a gdy ktoś dołącza w pierwsze wolne miejsce dawaj ID jego obiektu. Gdy ktoś inny dołącza i w global.players nie ma żadnego elementu o wartości -1, wysyłaj info, że serwer jest pełen i rozłączaj (closesocket() bodaj). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Luksor Opublikowano 8 Września 2009 Autor Udostępnij Opublikowano 8 Września 2009 Ok, już mniej więcej działa, gracze i serwer nie widzą więcej niż 2 graczy, tyle że te pozostałe osoby mogą grać samemu ale od serwera nie otrzymują danych. Powinienem sprawdzać czy w tabeli players jest wolne miejsce, wtedy bym go rozłączał, jaką funkcją mogę to sprawdzić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Września 2009 Administratorzy Udostępnij Opublikowano 8 Września 2009 pętlą for ? GML (zobaczczywolne) for (i=0; i<10; i+=1) { if global.player==-1 then return true; } return false; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 2 Listopada 2009 Udostępnij Opublikowano 2 Listopada 2009 NAJPIERW odeślij wiadomość z błędem np. "Serwer jest pełny" i wyłącz grę u klienta, potem dopiero closesocket ze strony serwera. Jeśli ot tak "urwiesz" socketa to klient zostanie myśląc, że jest połączony, a serwer "o nim zapomni". 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ę