Skocz do zawartości

Jak stworzyć najprostszą grę online/mmo?


MetalowyNerd

Rekomendowane odpowiedzi

Witam. Jak zawsze jestem zielony w sprawach gier online. Dla mnie to zawsze było czarną magią i nigdy nie potrafiłem zapamiętać czegokolwiek z tematu programowania gier online. Jednak chciałbym spróbować stworzyć coś banalnego, co mógłbym później rozwijać dla ludzi. Na początek chciałbym stworzyć jedynie klienta i serwer dla na przykład czatu. Po odpaleniu serwera, w kliencie pokazywałaby się lista osób, które są na czacie i oczywiście rozmowa. Bardzo mi zależy na tym, żeby skrypty były możliwie jak najprostsze, bo serio to dla mnie czarna magia, a mam fajny pomysł na przekształcenie tego czatu w grę. Jeśli ktoś się zna na Networkingu w GM:S'ie, to bardzo proszę o odpowiedź ;). Pozdrawiam wszystkich serdecznie.

Odnośnik do komentarza
Udostępnij na innych stronach

Odesłał bym do wuja google ale

Odsyłanie do wujka google.pl nie rozwiązuje problemu! Lepiej podaj od razu konkretnego linka do strony gdzie użytkownik znajdzie rozwiązanie problemu, bądź po prostu w ogóle się nie udzielaj.

 

http://www.yoyogames.com/blog/6

https://docs.yoyogames.com/

https://forum.gmclan.org/index.php?showtopic=31065

 

Zrobienie chatu w gm:s to parę linijek kodu, a twoje pytanie jest zbyt ogólne.

Odnośnik do komentarza
Udostępnij na innych stronach

No więc chodzi mi właśnie o te parę linijek kodu. W pierwszym linku, który podałeś, jest tutorial do prostej gierki, nie czatu. W drugim dokumentacja, a szukam banalnego przykładu w postaci projektu, albo jak to zrobić krok po kroku. W trzecim linku jest już to, co mnie właśnie interesuje, ale akurat po wybraniu opcji "C - Client", wyskakuje błąd i nie wiem, dlaczego (bo to dla mnie czarna magia, nie zwykłe pisanie gierki). Nie wiem, o co w tym chodzi, bo się na Networkingu kompletnie nie znam, ale taki wyrzuca błąd:

 

ERROR in

action number 1

of Async Event: Networking

for object oServer:

 

Attempting to read from outside the buffer, returning 0

at gml_Object_oServer_Other_68

 

Ten błąd znajduje się w tej wersji: https://gmclan.org/up7589_4_Przyk_ad.html

Odnośnik do komentarza
Udostępnij na innych stronach

https://gmclan.org/up539_4_Multi_zabawy.html

 

Tutaj jest mój nieukończony projekt, miała to być platformówka ale skończyło się na byciu, chatem z kolorowymi tekstami (po stronie klienta tylko bo wip).

Graczy może wchodzić dowolna ilość. Porzuciłem projekt bo znudziło mi się :P

 

W oGameControler musisz podać swoje IP. Używam tutaj nie blokujących socketów co sprawiło że kod jest trochę zawiły i wszystko tylko i wyłącznie po to by kręciła się ikonka loadingu w rogu zamiast freezować grę haha.

 

 

U clienta chat włącza się klawiszem T, a na serverze jest zawsze widoczny, numerki na serverze przy każdej linice to HUE tekstu, a enterem chyba jest lista graczy.

Odnośnik do komentarza
Udostępnij na innych stronach

Podmień w oServer w Networking, tak swoją drogą to od 2 lat nikt tego nie sprawdził?

GML
var t_buffer = buffer_create(256, buffer_grow, 1);

var eventid = ds_map_find_value(async_load, "id");

 

if( server == eventid )

{

//////////////////////////////////////Jezeli sie polaczyl////////////////////////////////////////////

{

var t = ds_map_find_value(async_load, "type");

var sock = ds_map_find_value(async_load, "socket");

var ip = ds_map_find_value(async_load, "ip");

 

if( t==network_type_connect)

{

global.idd++;

ds_list_add( socketlist, sock );

var inst = instance_create(64,192, oPlayer);

// Players[global.idd,0]= inst;

// Players[global.idd]= global.idd;

ds_map_add( Clients, sock, global.idd );

ConsoleAdd("Nowy gracz dolaczyl! ID:"+string(global.idd));

// show_message("Serwer: "+string(global.idd));

buffer_seek(t_buffer, buffer_seek_start, 0);

buffer_write(t_buffer, buffer_u8, 3 );

buffer_write(t_buffer , buffer_s8, global.idd);

network_send_packet(ds_list_find_value(Clients, global.idd-1), t_buffer, buffer_tell(t_buffer));

 

 

Online += 1;

 

 

// show_message(Players[]);

}

else

{////////////////////////////Gracz się rozlaczyl//////////////////////////////////

/*****Znajduje tego gracza co sie rozlaczyl*****/

var inst = ds_map_find_value(Clients, sock );

ConsoleAdd("Gracz "+string(Players[inst])+" sie rozlaczyl: ");

ds_map_delete(Clients, sock );

Players[inst]=0;

// with(inst) { instance_destroy(); }

Online -= 1;

// Also delete the socket from our global list of connected clients

var index = ds_list_find_index( socketlist, sock );

ds_list_delete(socketlist,index);

 

 

buffer_seek(t_buffer, buffer_seek_start, 0);

buffer_write(t_buffer, buffer_u8, 1);

buffer_write(t_buffer , buffer_string,"Gracz "+string(Players[inst])+" sie rozlaczyl: ");

for (var i = 0; i < ds_list_size(socketlist); i++;)

{

network_send_packet(ds_list_find_value(Clients, i), t_buffer, buffer_tell(t_buffer));

}

buffer_delete(t_buffer);

Players[inst]=0;

}

}

}//////////////////Do tąd///////////////////////////////////////////////////////////

else if( eventid==0)

{

}

else

{

/////////////////////////////////Odbieranie danych//////////////////////////////////

{

var buff = ds_map_find_value(async_load, "buffer");

var cmd = buffer_read(buff, buffer_s16 );

var sock = ds_map_find_value(async_load, "id");

var inst = ds_map_find_value(Clients, sock );

 

 

if( cmd==1 ) //Wiadomosc

{

wiad = buffer_read(buff, buffer_string);

ConsoleAdd("<"+string(Players[inst])+">"+string(wiad));

buffer_seek(t_buffer, buffer_seek_start, 0);

buffer_write(t_buffer, buffer_u8, 1);

buffer_write(t_buffer , buffer_string,"<"+string(Players[inst])+">"+string(wiad));

for (var i = 0; i < ds_list_size(socketlist); i++;)

{

network_send_packet(ds_list_find_value(Clients, i), t_buffer, buffer_tell(t_buffer));

}

buffer_delete(t_buffer);

}

else if ( cmd == 2 )

{

Players[inst] = buffer_read(buff, buffer_string);

//show_message(Players[inst]);

 

ConsoleAdd("ID:"+string(global.idd)+" Nick: "+string(Players[inst]));

 

 

 

buffer_seek(t_buffer, buffer_seek_start, 0);

buffer_write(t_buffer, buffer_u8, 1);

buffer_write(t_buffer , buffer_string,"Gracz "+string(Players[inst])+" dolaczyl!");

for (var i = 0; i < ds_list_size(socketlist); i++;)

{

network_send_packet(ds_list_find_value(Clients, i), t_buffer, buffer_tell(t_buffer));

}

buffer_delete(t_buffer);

}

}

//////////////////////////////////Koniec////////////////////////////

}

Odnośnik do komentarza
Udostępnij na innych stronach

ediepl, nadal wywala mi ten błąd:

 

ERROR in

action number 1

of Async Event: Networking

for object oServer:

 

Attempting to read from outside the buffer, returning 0

at gml_Object_oServer_Other_68

 

 

I am Lord, Tu znowu nie mogę wejść, jako client, bo nie może się połączyć, a tylko server działa.

 

Niech mi ktoś podrzuci możliwie najprostszego clienta i server do czatowania w postaci projektu. Wiem, że jesteście w stanie to zrobić, bo macie doświadczenie w Networkingu.Chodzi mi tylko o to, żebym to zrozumiał w pełni

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