Skocz do zawartości

Multiplayer -> Gracze nie widzą się nawzajem.


Opisek

Rekomendowane odpowiedzi

Witam, tworzę grę multiplayer na podstawie tego poradnika: (klik).

Wszystko idzie dobrze lecz gracze nie widzą się nawzajem oraz id każdego gracze zawsze wynosi 0.

Przed tym problemem miałem jeszcze błąd "unknown variable clients or array index out of bounds" lecz po zaznaczeniu opcji przypisania nieznanym zmiennym wartości 0 (w Global Game Settings), ten błąd zniknął. Czy to może być wina tego, a jeżeli tak to w jaki sposób wyeliminować błąd z nieznaną zmienną clients?

 

Kody:

 

Information about object: obj_Menu

 

Sprite: <no sprite>

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

global.gracze = 0

global.maxGracze = 0

 

 

Key Press Event for H-key Key:

execute code:

 

instance_create(0,0,obj_Server)

 

 

Key Press Event for J-key Key:

execute code:

 

instance_create(0,0,obj_Client)

 

 

 

Information about object: obj_Server

 

Sprite: <no sprite>

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

global.maxGraczy = get_integer("Podaj maksymalną ilość graczy:","2")

 

 

net_init("dll_39dll.dll",false)

net_server_start(0001,global.maxGraczy)

net_client_connect("",0001)

 

net_client_send(CONNECT,1,NET_INT,0)

net_client_send(DISCONNECT,2,NET_INT,0,0)

last_con = 0

last_dis = 0

found_id = 0

global.gracze = 1

 

for(i = 0; i>= global.maxGraczy; i += 1)

{

clients = 0

}

 

 

 

Step Event:

execute code:

 

net_server_update()

net_client_update()

 

net_client_send(global.maxGraczy,1,NET_INT,global.maxGraczy)

 

pack_con = net_client_get(CONNECT,1)

if pack_con != last_con then

{

global.gracze+=1

last_con = pack_con

found = false

for(i = 1; i <=global.gracze; i += 1)

{

if found = false then

{

if clients = 0 then

{

clients = i

found_id = i

found = true

net_client_send(RESPONSE,2,NET_INT,pack_con,found_id)

}

}

}

}

 

pack_dis = net_client_get(DISCONNECT,1)

if pack_dis != last_dis then

{

pack_client = net_client_get(DISCONNECT,2)

global.gracze -=1

last_dis = pack_dis

players[pack_client] = 0

}

 

net_client_send(PLAYERS,1,NET_INT,global.gracze)

 

 

 

Draw Event:

execute code:

 

draw_text(100 + view_xview, 20 + view_yview , "Gracze:" + string(global.gracze-1) + "/" + string(global.maxGraczy))

 

 

 

Information about object: obj_Client

 

Sprite: <no sprite>

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

net_init("dll_39dll.dll",false)

net_client_connect("",0001)

 

xy_id = round(random(600))

net_client_send(CONNECT,1,NET_INT,xy_id)

player_id = 0

got_id = false

name = ""

 

 

Step Event:

execute code:

 

net_client_update()

return_id = net_client_get(RESPONSE,2)

if got_id = false && return_id = xy_id

{

found_id = net_client_get(RESPONSE,2)

player_id = found_id

got_id = true

name="Player" + string(player_id)

}

else

{

net_client_send(player_id,2,NET_INT,x,y)

}

if keyboard_check(ord("W")) then y -=5

if keyboard_check(ord("S")) then y +=5

if keyboard_check(ord("A")) then x -=5

if keyboard_check(ord("D")) then x +=5

 

 

Other Event: Game End:

execute code:

 

net_client_send(DISCONNECT,2,NET_INT,round(random(600)),player_id)

 

 

 

Draw Event:

execute code:

 

//draw_text(100 + view_xview, 20 + view_yview , "Gracze:" + string(global.gracze))

draw_text(10 + view_xview, 10 + view_yview, "Twoje id:" + string(player_id))

 

for (count = 1; count<= global.gracze-1; count+=1)

{

if count != player_id

{

xx = net_client_get(count,1)

yy = net_client_get(count,2)

draw_circle(xx,yy,5,false)

draw_text(xx,yy-16,"Player"+ string(count))

}

}

 

draw_circle(x,y,5,false)

Odnośnik do komentarza
Udostępnij na innych stronach

Na podstawie poradnika na youtube? To tak się da robić gry? :o

Nie pamiętam już prawie nic z GMa, a gier Multiplayer tym bardziej nie.

Nie wiem co ty robisz, ale id 0 to nie jest przypadkiem identyfikator serwera, a reszta to klienci, tj np w grze co-op, 0 to ty, a 1 to twój kolega, a u niego na odwrót? ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Odwołujesz się gdzieś do elementu tablicy który nie istnieje. Skoro robisz to na podstawie jakiegoś tutka to przerób go najlepiej jeszcze raz gdzieś musiałeś popełnić błąd, zobacz jeszcze czy na pewno umieściłeś wszystkie obiekty w roomie i czy przypadkiem nie doublują się nazwy zasobów. Ale takie to teraz moje wróżenie z fusów, bo nie dałeś żadnego kodu. Zresztą teraz nawet nie miałbym go jak sprawdzić, chyba że dałbyś kod w poście, a na prawdę ukrywanie kodu, który nie działa, bo pojawia się obawa że ktoś może go skopiować do swojej gry mnie rozbawiło. W necie znajduje się masa przykładów gier mmo które dodatkowo działają, więc nie wiem czego się boisz. :P

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