Skocz do zawartości

Kurs - jak zrobić szybko i łatwo grę multiplayer - skrypt, kurs i przykład.


Co sądzisz o kursie?  

100 użytkowników zagłosowało

  1. 1. Co sądzisz o kursie

    • Bardzo dobry.
      38
    • Dobry.
      12
    • Średni.
      5
    • Słaby.
      2
    • Bardzi słaby.
      8


Rekomendowane odpowiedzi

UWAGA! - Od razu mówię, że skrypt wymaga zarejestrowanej wersji GMa, lub niezarejestrowanej 5.0. Podam link do pobrania. Kurs wymaga umiejętności programowania w GML! <_<

 

Od razu mówię, że zrobienie gry multiplayer wcale nie jest łatwe, więc dla osób początkujących nie radziłbym korzystać z tego skryptu.

 

Jeżeli chcecie zrobić dobrą grę multiplayer, to najpierw zróbcie grę singleplayer. Wiele osób zadaje pytanie czy można zrobić grę MMORPG jak Tibia i jak. Od razu mówię, że można, ale jak to nie powiem, sami kombinujcie :P . Podam wam za to kilka przydatnych skryptów, opiszę co dają i gdzie je wstawić.

 

Zaczynajmy.

 

1. Kiedy już utworzyłeś grę i chciałbyś ją przekształcić na grę multiplayer. Do tego na początku potrzebne stworzenie sesji, a następnie gracze do niej dołączają. Są dwie możliwości takiego tworzenia:

1) Tworzysz klienta i serwer osobno, każdy pełni osobną funkcję (chyba nie muszę tłumaczyć)

2) Tworzysz klienta z możliwością tworzenia sesji i dołączania do nich (tak jak np. w Counter Strike'u itp.)

Kod wygląda następująco:

1) Tworzenie sesji :

GML
mplay_init_tcpip("127.0.0.1"); //inicjuje adres IP, do którego gra ma być podłączona, standardowo 127.0.0.1

if mplay_session_find()=0 //szuka czy nie ma sesji, czy jest

mplay_session_create("GMClanServer",200+1,"Gracz"); //jeżeli nie ma jeszcze sesji na danym adresie IP, to tworzy sesję "GMClanServer", a jednocześnie dołącza do gry jako gracz "Gracz", maksymalna ilość graczy to 200

2) Dołączanie do sesji :

GML
mplay_init_tcpip("127.0.0.1"); //inicjuje adres IP, do którego gra ma być podłączona, standardowo 127.0.0.1

if mplay_session_find()!=0 //sprawdza czy serwer jest ONLINE

mplay_session_join(0,"Gracz2"); //jeżeli jest to dołącz do gry jako gracz "Gracz2"

Tak wygląda właśnie tworzenie i dołączanie sesji. Jeśli rozumiesz to, to przejdźmy do kroku 2.

 

2. Jeżeli już dołączysz do sesji, potrzebną rzeczą jest pobranie numeru gracza. Serwera to nie dotyczy, ponieważ serwer dostaje automatycznie numer gracza 1. Gracz zaś, musi pobrać numer, a więc stwórzmy objekt, nazwijmy go "Player". Dodajemy event CREATE i tam wpisujemy :

GML
global.player_number=real(mplay_player_find()-1) //wyszukuje numer gracza

, oraz parametry, jakie będą potrzebne twojej postaci, czyli np. parametr health, ale to już zależy tylko od ciebie.

 

3. A więc jesteśmy i mamy już numer gracza, lecz niestety nie widzimy tego gracza na planszy. Co się dzieje? Potrzebny jest obiekt, który nazwijmy "OtherPlayer", oraz obiekt o nazwie "Controller". Damy jeszcze do obiektu pierwszego czyli obiektu "Player" w CREATE coś takiego :

GML
mplay_message_send(0,0,string(global.player_number)+"|"+string(x)+"|"+string(y)); //wysyła sygnał, że dołączamy do gry. Wiadomość wygląda tak : "<numer gracza>|<x gracza>|<y gracza>"

Oznacza to, że dołączyliśmy do gry, a przynajmniej tak będzie to czytał obiekt "Controller". Więc do obiektu "Controller" dajemy event STEP, a następnie do kodu :

GML
if mplay_message_receive(0) //jeżeli otrzymuje wiadomość to wybierz :

switch mplay_message_id(){

case 0 :

o=instance_create(0,0,OtherPlayer); //gracz dołączył do gry

Value=mplay_message_value();

o.Number=real(string_copy(Value,0,string_pos("|",Value)-1)); //inicjuje numer gracza, funkcja real zmienia z tekstu na liczbę

Value=string_copy(Value,string_pos("|",Value)+1,string_length(Value)); //skraca tekst o liczbę i znak "|"

o.x=real(string_copy(Value,0,string_pos("|",Value)-1)); //pobiera pozycje gracza, funkcja real zmienia z tekstu na liczbę

Value=string_copy(Value,string_pos("|",Value)+1,string_length(Value)); //skraca tekst o liczbę i znak "|"

o.y=real(string_copy(Value,0,string_pos("|",Value)-1)); //pobiera pozycje, funkcja real zmienia z tekstu na liczbę

break;

case 1:

with(OtherPlayer){

Value=mplay_message_value();

NNumber=real(string_copy(Value,0,string_pos("|",Value)-1)); //inicjuje numer gracza, funkcja real zmienia z tekstu na liczbę

Value=string_copy(Value,string_pos("|",Value)+1,string_length(Value)); //skraca tekst o liczbę i znak "|"

xx=real(string_copy(Value,0,string_pos("|",Value)-1)); //pobiera pozycje gracza, funkcja real zmienia z tekstu na liczbę

Value=string_copy(Value,string_pos("|",Value)+1,string_length(Value)); //skraca tekst o liczbę i znak "|"

yy=real(string_copy(Value,0,string_pos("|",Value)-1)); //pobiera pozycje, funkcja real zmienia z tekstu na liczbę

if (Number=NNumber){ //jeżeli numer gracza pasuje numerowi przysłanemu przez drugiego gracza

x=xx;//to zmień jego pozycje

y=yy;}}

break;

case 2:

with(OtherPlayer){

if (Number=real(mplay_message_value()))

instance_destroy(); /*gracz odłącza się*/}

break;}

Teraz obiekt "Controller" otrzymał ważne zadanie - obsługiwanie gry multiplayer. Lecz na razie będzie odczytywał tylko dołączanie gracza do gry. Dlaczego? Ponieważ nie daliśmy jeszcze ważnych funkcji do obiektu "Player". Dajmy więc tam event STEP, a w nim:

GML
mplay_message_send(0,1,string(global.player_number)+"|"+string(x)+"|"+string(y)); //zmienia pozycje gracza w innych klientach

Teraz będzie pokazywało pozycje gracza, lecz po wylogowaniu się nie będzie znikał. Dajmy więc event GAME END, a tam będzie:

GML
mplay_message_send(0,2,string(global.player_number)); //niszczy gracza

A więc mamy już wyświetlanie się gracza, oraz

 

4. Do gier MMO, często dodawany jest czat, lecz nie będę tego tłumaczył, ponieważ Mark Overmans stworzył już taki przykład (patrz tu). Dałem także do przykładu.

 

5. Kilka przydatnych skryptów :

1) Tworzenie konta :

Klient:

GML
mplay_message_send("Gracz",0,get_string("Nazwa twojego konta:","")+"|"+get_string(");

Serwer:

GML
if mplay_message_receive(0){

if mplay_message_id()=0{

Value=mplay_message_value();

Account=real(string_copy(Value,0,string_pos("|",Value)-1));

Value=string_copy(Value,string_pos("|",Value)+1,string_length(Value));

Name=real(string_copy(Value,0,string_pos("|",Value)-1));

file_open_write(Account+".txt");

file_write_string(Name);

file_close();}}

2) Wczytywanie gry

Klient:

GML
mplay_message_send("Gracz",1,get_string("Nazwa konta:",""));

if mplay_message_receive(0){

if mplay_message_id()=2{

Name=mplay_message_value();}}

Serwer:

GML
if mplay_message_receive(0){

if mplay_message_id()=1{

file_open_read(mplay_message_value()+".txt");

mplay_message_send(0,2,file_read_string);

file_close();}}

 

Gratulacje! Zrobiłeś własną grę multiplayer.

 

Jeżeli jednak nie do końca zrozumiałeś jak to działa, lub nie działa to u ciebie, to daję przykład : plik. Plik .exe znajduje się tu, a Game Maker w. 5.0 tu.

Uwaga! Przykład napisany jest pod darmową wersję Game Makera 5.0. Za wszystkie błędy w kodzie : Przepraszam. O błędach proszę mnie informować.

 

Jeśli będziecie mieli jakieś problemy to piszcie na forum, pomogę wam :) .

 

Za wszystkie błędy w kodzie, bądź błędy ortograficzne, a także za coś, czego mogłem zapomnieć.Przepraszam.

 

Nowe wersje, GM6 i GM7 :)

 

Poprawiono literówki i tagi.

Mimek

Odnośnik do komentarza
Udostępnij na innych stronach

Tytułem wyjaśnień: Kurs ten dostosowany jest pod wersję 5.0 Game Makera, dostępną w sieci. Na opublikowanie artykułu zdecydowaliśmy się jednak dlatego, że wersja 5.0 jest ostatnią wersją Game Makera, która do w miarę pełnego funkcjonowania nie wymaga płatnej rejestracji. Jeżeli więc zależy Wam na rozpoczęciu przygody z tym programem, radzimy zaopatrzyć się we wlaśnie tą starszą wersje, i powoli zbierać na GM 6.1. Ta wprawdzie jest dostepna również za darmo, ale niezarejestrowana ma mniejsze możliwości, niż wersja 5.0.

 

[Część artykułu z : http://stg.one.pl/index.php?page=3]

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...
  • 1 miesiąc temu...
  • 2 tygodnie później...
  • 2 miesiące temu...
  • 10 miesięcy temu...
Nie dziala wes daj dobry przyklad bo najpierw czcianka nie dziala pozniej string kucze pomocy!!!!!!!!!!!!!!!!!

A o takim słowie jak "Proszę" to Wać nie słyszał? Poza tym nie rozumiem co tu może nie działać?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

kurde mam gm6.1 pro i śćągnełem przykład .wszystko dzila na początku ale zrobiłem plik exe i wysłałem go koledze i nie widzę go ani on mnie. Lczymy sie na ip tym podstawowym pużniej byle jakim ale tym samym i nie dziala o co chodzi prosze was o odpowiedz .

z góry thx

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