Skocz do zawartości

Zawiecha przy 39dll


ZyperPL

Rekomendowane odpowiedzi

Cześć!

Chciałem ostatnio dodać multika do mej gry. Robiłem wszystko wg. tego poradnika:

https://gmclan.org/index.php?czytajart=66&strona=2

 

Mimo kilku literówek w poradniku udało mi się to zrobić i wszystko działa jak należy. Klient łączy się przez TCP do hosta, a potem wszystko idzie UDP.

No i do tego momentu starczał mi poradnik. Jednak teraz mam taki problem. Gdy już obydwaj gracze przejdą do roomu z grą, u klienta następuje zawiecha. Host działa normalnie i można grać normalne (oczywiście bez drugiego gracza). Ale nie wiem dlaczego klient się crashuje. Może być to wina tego, że odpalam to na jednym kompie?

 

 

Wersja krótka:

Po połączeniu i przejściu do rooma z grą, gra klienta się zawiesza, a host może grać normalnie. W czym problem?

 

 

Bardzo proszę o choćby niewielką pomoc :P

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Finn.

Problem jest z tym:

GML
var size;

while(true)

{

size = receivemessage(global.udpsock);

if(size <= 0) size = receivemessage(global.otherplayer);

if(size < 0) break;

if(size == 0)

{

room_goto(start)

}

messageid = readbyte();

switch(messageid)

{

case 0:

x=readshort();

y=readshort();

image_index=readshort();

break;

}

}

 

Nie ma zmiennej global.udpsock. Co z tym zrobić? Serwer ma taką zmienną, a klient jak widać nie...

Gdy zrobiłem if variable_global_exists("udpsock") to robiła się wyżej wymieniona zawiecha.

Dlaczego nie ma tej zmiennej?

Odnośnik do komentarza
Udostępnij na innych stronach

Nic z tego co podaliście nie pomogło. Może coś źle robię? Btw, podaję wszystkie ważne kody:

GML
if point_distance(mouse_x,mouse_y,400,room_height/2)<60 && mouse_check_button(mb_left)

{

global.master = false;

server = tcpconnect("127.0.0.1",27015,true);

if(server <= 0)

{

room_goto(start)

exit;

}

global.otherplayer = server;

global.udp = udpconnect(27014, true);

global.otherip = tcpip(server);

global.otherudpport = 27016;

room_goto(levelmulti);

} //join button

Obiekt netcontrol:

CREATE: dllinit(0,1,0)

DRAW (może musi być step?):

if point_distance(mouse_x,mouse_y,400,room_height/2+120)<60 && mouse_check_button(mb_left)

{

global.master = true; // hostowanie

room_goto(wait)

} //host button</span>

To wyżej jest od obiektu z menu, który tworzy guziki. Jak ktoś kliknie Join to się łączy i od razu jest w roomie z grą multi, a jak ktoś klika host to idzie do pokoju wait i tam czeka.

 

Teraz w roomie wait jest obiekt "netwait":

w CREATE ma on:

GML
listen = tcplisten(27015, 2, true); //nasłuchiwanie

if(listen <= 0) //jeśli nie udaje się połączyć

room_goto(start); //wraca do menu</span>

 

STEP:

GML
client = tcpaccept(listen, true); //akceptowanie

if(client <= 0) exit;

global.udpsock = udpconnect(27016, true);

global.otherplayer = client;

global.otherip = lastinIP();

global.otherudpport = 27014;

room_goto(levelmulti); //jesli wszystko dziala cacy no to idzie do rooma z gra multi</span>

 

 

Mam nadzieje, że nic nie zgubiłem po drodze i ktoś mi jakoś pomoże (pomorze ftw!)

Odnośnik do komentarza
Udostępnij na innych stronach

Nosz racja. Tamten poradnik wypadałoby uaktualnić i ponaprawiać literówki, bo przez małe coś ludzie mają problemy potem.

 

Oczywiście wielkie dzięki wszystkim za pomoc i Tobie Edie ;)

Teraz muszę jeszcze rozkminić dlaczego host nie dostaje pakietów a klient tak o.O

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...