Skocz do zawartości

Zablokowane Dziwny bug?


Rekomendowane odpowiedzi

Opublikowano

Mam w drav obiektu gracza coś takiego:

GML
//Draw the player...

draw_sprite_ext(sprite_index,-1,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);

 

Jest to gra MMORPG. Jak gracz się pojawia na serwerze wyskakuje mi error:

error.gif

 

 

O co chodzi? Co mam robić? Wcześniej wszystko działało.. Co namieszałem?

Opublikowano

Jak uruchomię serwer i zaloguję się do niego na kliencie.

 

Może to coś związane z tym, że nie mogę się połączyć, bo NO-IP coś mi odwala. Nie do końca działa.. ??

Opublikowano

Ogólnie to powinno być:

GML
if( sprite_exists( sprite_index ) ) {

draw_sprite_ext(sprite_index, image_index,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend, image_alpha);

}

No i pamiętaj, że indeksy spritów muszą być takie same na kliencie i serwerze jeśli używasz ich przy przekazywaniu danych.
Opublikowano

O rany to na serwerze też ma być ten sprite?

To BOMBA! To dlaczego wcześniej mi działało bez niego?

Hahahah!?

 

Czyli można robić ciekawe rzeczy..

 

A co będzie jak nie użyję?:

GML
if( sprite_exists( sprite_index ) ) {

}

Opublikowano

Tak, ma być. I to dokładnie z tym samym indeksem co na kliencie.

 

Sprawdzi czy sprite w ogóle istnieje przed narysowaniem. Czytaj dokumentację.

Opublikowano

Nie nie mają takiej samej nazwy, ale dzięki że myślisz nad wszystkim Tymon :) Zaraz odpalę i chyba powinno już go rysować..

Opublikowano

No, ale taka sama nazwa to dalej mało. Pod nazwami kryją się indeksy spritów, tak więc trzeba to trochę inaczej załatwić. Robisz takie dwie tablice:

GML
sprites_in[0] = sprite1;

sprites_in[1] = sprite2;

sprites_in[2] = sprite3;

sprites_in[3] = sprite4;

sprites_count = 4;

 

for( i = 0; i < sprites_count; i += 1 ) {

sprites_out[sprites_in] = i;

}

Powinno być coś takiego na serwerze i na kliencie. Teraz tak, przy wysyłaniu:
GML
writereal( sprite_out[sprite_index] );
i przy odbieraniu:
GML
sprite_index = sprite_in[readreal()];
Czy coś takiego. ;P
Opublikowano

Ale po co tak to komplikować? Moje pytanie: CZEMU TO SŁUŻY? Dlaczego muszę pisać to w jakichś tablicach?

 

I czegoś nie rozumiem-dlaczego ten bug zaczął się od niedawna pojawiać? Wcześniej wszystko działało jak trzeba.

Opublikowano

Przypisuje spritom uniwersalne indeksy które są zrozumiałe dla serwera jak i klienta.

Bo tablice są wygodne.

Opublikowano
I czegoś nie rozumiem-dlaczego ten bug zaczął się od niedawna pojawiać? Wcześniej wszystko działało jak trzeba.

Na pewno samo się nie zepsuło. :jezor:

Opublikowano

Chyba jest źle z tym:

GML
player.sprite_index = sprite_in[readreal()];

 

Wydaje mi się, że trzeba z tej tablicy czytać po prostu tak jak inne dane, czyli mamy cyfry to czytamy z readbyte()?

Opublikowano

Jak zapisujesz writereal to odczytujesz readreal. Po za tym, mógłbyś zmienić tablicę na globalną, wtedy nie będziesz musiał wszystkiego deklarować 10 razy w każdym obiekcie.

No i jeszcze jedno, klient i serwer to oddzielnie pisane aplikacje czy jako jedna?

Opublikowano

Są pisane oddzielnie. O rany ile to będzie roboty.. Pomóżcie mi z tym, bo ludzie na mnie liczą..

 

A jak napiszę tak:

 

wysyłanie:

writeshort(player.sprite_out[sprite_index]);

odbieranie:

player.sprite_index = sprite_in[readbyte()];

 

To będzie źle?

 

Jak piszę z tym writereal/readreal to wogóle nie działa, jakieś syntax errory są.

Opublikowano

Źle, tak:

writeshort(player.sprite_out[sprite_index]);

i

player.sprite_index = sprite_in[readshort()];

 

A readreal i writereal to tak mi się jakoś ubzdurało, oczywiście miałeś to zamienić na własne odpowiedniki, ja nie pamiętam funkcji 39dll. :P

Opublikowano

Indeks może zawierać tylko liczby od 0 do 31999. Czyli może zawierać sprite'a (tzn. jego index). Aha, jeśli obiekt nie ma sprite'a to sprite_index zwraca -1.

Opublikowano

Ja miałem taki problem jak dobrze pamiętam, że wysyłałem sprite_index i odbierałem w serwerze i przesyłałem dalej do wszystkich... wkońcu to nie mogło się udać bo w obu klientach wywalało że nie ma takiego sprita. Taki sam problem może być u ciebie.

 

Cu.

Opublikowano

Usuń na serwerze rysowanie postaci, lub ustaw jakiegoś innego sprite'a. Prawdopodobnie klient wysyła sprite'a, który jest w nim, ale nie ma go na serwerze.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...