Skocz do zawartości

39dll - problemy


Jaklub

Rekomendowane odpowiedzi

1. Jak zrobić wyszukiwanie dostępnych sesji? Z tego co wyczytałem w helpie, w standardowym multiplayerze jest to chyba śmiesznie łatwe (przez co wydaje mi się, że chyba zrezygnuję z 39dll w mojej grze, poza tym jest prostszy i nie będę operował zbyt wieloma przesyłanymi wartościami).

2 ROZWIĄZANY. Jak najprościej poznać, czy gracz się rozłączył?

3 ROZWIĄZANY. Oto mój skrypt dołączenia się do serwera.

GML
global.host=0;

ip=get_string("Enter IP of the server.","127.0.0.1");

global.otherplayer = tcpconnect(ip, 14804, 1);

if(!global.otherplayer)

{

show_message("Unable to connect to server.");

exit;

}

room=net_servercreate;

Mimo że serwer nie istnieje, gra przechodzi do danego rooma i żaden komunikat nie jest wyświetlany. Jaka może być tego przyczyna?

4. Jak przesłać sprite? Nie chodzi o to, którego sprita używa obiekt, tylko jak przesłać sprite zmieniony funkcją sprite_replace.

 

Z góry dziękuję. Ten, kto pomoże (odpowie na minimum jedno z pytań), trafi do legendarnych creditsów.

Odnośnik do komentarza
Udostępnij na innych stronach

1. nie wiem

2.

W game_end daj

GML
clearbuffer();

writebyte(disconnect);

sendmessage(/*socket do którego m zostać wysłana wiadomość*/);

(musisz mieć stałą disconnect)

a w stepie

GML
while(1)

{

//odbiór wiadomości

switch(readbyte())

{

case disconnect:

show_message('Gracz rozłączony')

break;

}

}

 

3.

if(!global.otherplayer)

zamień na

GML
if(global.otherplayer<=0)
Odnośnik do komentarza
Udostępnij na innych stronach

Masz creditsy. Nie wiadomo, czy skorzystam, ale masz creditsy. ;p Bo chyba jednak skorzystam z wbudowanego mplaya.

 

Zdecydowanie odradzam. Wbudowany Mplay to jest tylko strata Twojego czasu, już lepiej jak się uczyć, to zacząć od 39dll. Na Mplayu będziesz miał masę problemów z firewallami i tego typu sprawami...

Nawet jak wykorzystasz do prostej gry. Moim zdaniem pierwszą rzecz jaką powinni zmienić w nowym GM ( o ile w ogóle cholerstwo wyjdzie ), to właśnie Mplay.

Odnośnik do komentarza
Udostępnij na innych stronach

39dll jest szybszy - tyle tylko powiem :)

Ja ucząc się zacząłem od 39dll, wogóle nie umiem obsługiwać mplaya :o

 

Szybszy, to swoją drogą, ale w Mplay każdy gracz musi się łączyć z następnym graczem. Dlatego są problemy z firewallami i przekierowywaniem portów. W 39dll łączysz się tylko do serwera, a ten rozsyła wszystkim informacje.

Odnośnik do komentarza
Udostępnij na innych stronach

Zdecydowanie odradzam. Wbudowany Mplay to jest tylko strata Twojego czasu, już lepiej jak się uczyć, to zacząć od 39dll. Na Mplayu będziesz miał masę problemów z firewallami i tego typu sprawami...

Nawet jak wykorzystasz do prostej gry.

To wypada tylko znaleźć naprawdę porządnego tutoriala, który wszystko wyjaśni (bo ten Yody, z całym szacunkiem, ale wyjaśnia bardzo podstawowe podstawy). Ten 39dll jest, powiedzmy, trudny do opanowania.

 

Wciąż szukam odpowiedzi na 1 punkt, bardzo mi na nim zależy.

Odnośnik do komentarza
Udostępnij na innych stronach

Ehhh... z tymi sesjami coś wymyśliłem, ale to chyba nie jest zbyt.... optymalne?

możesz najpierw zapisać graczy do jednej globalnej tablicy, później niech serwer prześle listę dostępnych sesji, coś takiego...

i zastosować dwuwymiarową tablicę players[nr_sesji,id_gracza]

a np. podczas gry wysyłanie czegoś takiego (od gracza na serwre):

GML
writebyte(nr_sesji) //na przykład

writebyte(id_gracza) //plus wszystkie inne info

//i sendmessage

a w serwerze:

GML
session = readbyte() //czytamy z jakiej sesji przyszło info

id_gracza = readbyte() //czytamy id

obj = players[session,id_gracza] //instancja gracza

//tuataj poruszanie tą insancją

//tutaj odbieranie innych info

clearbuffer();

writebyte(id_gracza);

//inne info

for(i=0;i>liczba_graczy;i+=1)

{

var _obj;

_obj = players[session,i] //wyszukiwanie instancji w tablicy

with(_obj)

{

sendmessage(/*serwer*/) //wysyłanie informacji

}

przy dołązaniu do sesji, to np. serwer może wysłać jej numer lub takie coś... :)

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam GM7 (powalone wpisywanie klucza, cracka ściągać nie zamierzam, a poza tym chcę robić tę grę również na kompie bez netu), więc nie mogę sobie użyć sprite_save, a poza tym mój sprite jes większy niż ekran. Ale spróbuję.

 

edit: nie działa.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli jest tak duży to i tak nie ma sensu. Jeśli wysyłasz mapę to może trzymaj ją w pamięci jako listę różnych figur które po narysowaniu i oteksturowaniu tworzą ziemię? Renderowanie miałoby miejsce po otrzymaniu mapy.

Chyba ze chodzi ci o wysyłanie spritów robali, to wtedy trzeba wymyślić coś innego. (Bo pamiętam że można tworzyć własne)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli jest tak duży to i tak nie ma sensu. Jeśli wysyłasz mapę to może trzymaj ją w pamięci jako listę różnych figur które po narysowaniu i oteksturowaniu tworzą ziemię? Renderowanie miałoby miejsce po otrzymaniu mapy.

Chyba ze chodzi ci o wysyłanie spritów robali, to wtedy trzeba wymyślić coś innego. (Bo pamiętam że można tworzyć własne)

Sprity nie, bo planuję wyłączyć modowanie do internetowej rozgrywki. Co do mapy, będę musiał opracować jakieś kody generowania. Ale dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie wiem, ale to jest proste, nie tak jak mój nowy problem (też pewnie prosty, ale jestem nowy w 39dll, a akurat nie bardzo wiem, jak temu zaradzić).

 

Otóż, kiedy jest dwóch graczy na serwerze (serwer i gracz), wszystko jest ok. Kiedy wchodzi trzeci gracz, robi się dziwnie. Kiedy trzeci gracz pisze na czacie, serwer tego nie chce odbierać (za to trzeci gracz dobrze widzi to, co piszą inni). Za to kiedy serwer przestawia ustawienia rozgrywki, oboje klienci odbierają to dobrze, natomiast kiedy serwer wysyła trzeciemu graczowi listę graczy, robi się kupa. Wniosek - trzeci gracz nie może wysyłać wiadomości i nie może niektórych (nie wszystkich) odbierać.

 

Podejrzewam, że coś jest nie tak z dołączaniem większej ilości graczy do serwera, a jakoś nie mam ochoty robić tylko internetowych dueli.

 

Mogę wysłać "obcięty" plik gm6 do niektórych osób.

Ale tylko wtedy, kiedy to będzie potrzebne, teraz daję kody.

 

Serwer przyjmuje nowych graczy (wycinek ze stepa).

GML
// Grab players.

sock = tcpaccept(listen, 1);

if(sock)

{

for(i=7; i>=1; i-=1)

{

if global.otherplayer<=0 {

listened=i;

}

}

players+=1;

global.otherplayer[listened] = sock;

show_message("global.otherplayer["+string(listened)+"]="+string(sock)+";");

listened=0;

}

 

Gracz lub serwer wysyła czat (czat jest wysyłany kiedy nowy gracz wchodzi na serwer, więc teoretycznie powinien być bezbłędny).

GML
clearbuffer();

writebyte(net_message_chat);

for(i=0; i<=13; i+=1)

{

writestring(chat_meh.linijka);

writeint(chat_meh.linijkakolor);

}

if global.host=0 sendmessage(global.otherplayer);

if global.host=1 for(i=1; i<=7; i+=1) sendmessage(global.otherplayer);

Kiedy serwer odbierze od gracza czat, automatycznie rozsyła go do innych graczy tą samą komendą.

 

Serwer wysyła listę graczy.

GML
// Sends player list, also map and bg.

for(i=1; i<=7; i+=1)

{

clearbuffer();

writebyte(net_message_actualnames);

writeshort(controlserver.players);

//sprite_assign(writestring(),cillitbang);

for(u=0; u<=7; u+=1)

{

writestring(global.nick);

writeshort(global.pindex);

}

sendmessage(global.otherplayer);

}

 

Z góry ogromne dzięki.

poradziłem sobie.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 lata później...

Brawo dla Jakluba za porządne napisanie co zostało rozwiązane, przekreślenie nieważnych treści itd. Lepiej się czyta po długim czasie.

 

Tylko teraz co z punktem 1?

 

 

Jak przeszukać cały internet (pobrać internet na dysk i wtedy szukać?) i dodaniu każdego ip z grą do tablicy? Ile jest w ogóle IP na świecie? :D Używać pętli for czy co?

Odnośnik do komentarza
Udostępnij na innych stronach

Mogłeś nic nie pisać zamiast pisać post nic nie wnoszący do tematu. Zauważyłem ostatnio, że wszystko wokoło hejtujesz. To źle...

Tematu nowego nie robiłem, ponieważ po 1:

Mój post odwołuje się do tego problemu, więc jak ktoś będzie szukał rozwiązania (tak jak ja) i znajdzie ten temat, to możliwe, że odpowiedź będzie miał.

 

Po 2: Robienie tematu a odświeżanie starego nie ma żadnej różnicy, więc o co Ci kurka chodzi?

Odnośnik do komentarza
Udostępnij na innych stronach

Jak przeszukać cały internet (pobrać internet na dysk i wtedy szukać?) i dodaniu każdego ip z grą do tablicy? Ile jest w ogóle IP na świecie? Używać pętli for czy co?

Jeśli jesteś w posiadaniu tak szybkiego łącza i tak pojemnego dysku to gratuluję. Wgl pobranie całego internetu nie jest możliwe:P

 

Załóż bazę i jak ktoś tworzy serwer to niech dopisuje go do tej bazy, a klient tylko odczytuje ip serwerów z bazy.

 

@EDIT Btw.

Brawo dla Jakluba za porządne napisanie co zostało rozwiązane, przekreślenie nieważnych treści itd. Lepiej się czyta po długim czasie.

Wystarczy skopiować cały post do notatnika i już nie masz przekreśleń :)

Odnośnik do komentarza
Udostępnij na innych stronach

Drogi Utermiko,

 

pierwsza cześć Twojego postu sugeruje, że nie potrafisz wyłapywać ironii w wypowiedziach.

 

Nastomiast patrząc na drugą cześć mam wrażenie, że myślisz jakoby moja wypowiedź, wyśmiewała się z tego co zrobił Jaklub.

Ja naprawdę sądzę, że te przekreślenia są dobre. Doczytać się można i wiadomo, co jest nie ważne i można pominąć :)

 

 

Btw.

Nad tym, żeby założyć serwer, do którego łączyłby się każdy host podawał swoje ip, a klient je pobierał też pomyślałem. Ale nie chce za bardzo w to inwestować, gdy chcę zrobić darmową grę. Już lepiej tak jak w większości gier, dołączasz do serweru podając jego IP i koniec.

 

@Dół:

"Jeśli jesteś w posiadaniu tak szybkiego łącza i tak pojemnego dysku to gratuluję."

No mi to wyraźnie sugerowało, że bierzesz na poważnie pobranie całego internetu na dysk.

 

Nie odpisujemy na posta pod nami! Pamiętaj! - Uzjel

Odnośnik do komentarza
Udostępnij na innych stronach

Jak przeszukać cały internet (pobrać internet na dysk i wtedy szukać?) i dodaniu każdego ip z grą do tablicy? Ile jest w ogóle IP na świecie? Używać pętli for czy co?

Wg. mnie to sugerowało, że chcesz sprawdzić każdy możliwy adres IP czy hostuje twoją grę. No cóż myliłem się :D Sądząc po reszcie postu wydawało mi się, że mówisz całkiem poważnie(choć wydawało się głupie)^^

@TOPIC

Już lepiej tak jak w większości gier, dołączasz do serweru podając jego IP i koniec.

To jest raczej najlepszy i najprostszy sposób :P Możesz dorobić ewentualnie listę "ulubionych" serwerów, aby nie trzeba było za każdym razem wpisywać IP :)

Odnośnik do komentarza
Udostępnij na innych stronach

ja w mojej gierce piłkarskiej online zrobiłem tak, że jak ktoś hostuje gre, to wysyła na serwer www info o nowym hoście, zapisuje w bazie IP, potem jak ktoś chce dołączyć do jakiejś gry, to pobiera liste serwerów z bazy, wybiera interesujący go serwer i łączą się.

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