Skocz do zawartości
Hunter

[39dll] Przedmiot wysyłany kilkakrotnie ;/

Rekomendowane odpowiedzi

Witam, mam mały problemik, zapewne banalny, ale że nie działa to dowodzi tylko o mojej prostocie.

No więc do rzeczy, mam problem z robieniem Sklepu.

Gdy player kupi jakiś przedmiot tworze go na serwie, a następnie wysyłam:

 

GML
self._id = SetItemID();

self._rodzaj = 1;

global.itemID[self._id] = self._id;

var _x,_y,_rodz;

_x = mouse_x;

_y = mouse_y;

_rodz = 1;

 

 

 

clearbuffer();

writebyte(13);

writeshort(_x);

writeshort(_y);

writeshort(_id);

writeshort(_rodz);

 

with(obj_client)

{

sendmessage(tcp);

}

 

 

w_eq = 0;

w_inv = 0;

 

I odbieram :

 

GML
case 13:

var _x,_y,_rodz,_id;

_x = readshort();

_y = readshort();

_id = readshort();

_rodz = readshort();

___i = instance_create(_x,_y,Item);

___i.rodzaj = _rodz;

___i.ID = _id;

break;

 

Problem w tym że u playera tworzą sie 2 i więcej przedmioty. Oczywiscie instancje na serwie tworze w evencie ktory wykonuje się raz.

Myśle że winą jest tu

 

GML
with(obj_client)

{

sendmessage(tcp);

}

I wysyła dane po kilka razy do klienta, ale nie wiem jak sobie z tym poradzic. Prosze o pomoc.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

nie musi. W ten sposób może wysłać po sockecie danego klienta dane z domyślnego bufora, bo sendmessage nie czyści go, dopiero clearbuffer to robi :)

 

Edit: ten pierwszy kod w jakim jest evencie ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Pierwszy w Create, drugi to step. Chodz nie wiem czy Nie powinienem z create przenieść do jakiegos buttona.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

rozumiem, że step wygląda tak:

 

GML
while(true)

{

size = receivemessage(global.socket);

if ( size <= 0 ) break;

packet = readbyte();

 

switch(packet)

{

case 13: ... break;

default: break;

}

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A w obiekcie obj_player nie ma sendmessage(); w stepie, który mógłby raz jeszcze wysyłać te dane bez clearbuffer ?? bo jakimś cudem one są wysyłane kilka razy :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ni ma analizowałem zanim napisałem, ale właśnie zauważyłem pewną zbierzność. Gdy mam np. 3 userów w grze tworzy sie juz nie 2 ale 3 lub 6 przedmiotów.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

czyli leci po tym samym sockecie :) zatem coś nie tak jest z połączeniem :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Raczej nie, bo ja takowych problemów nie zauważyłem u siebie. Gdzieś musisz mieć błędy w kodzie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

tylko ze wszystko inne chodzi bez problemu, wiadomosci, pokazywanie graczy, potworów i innych pierdułek. ;/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie znam twojego kodu, nie wiem gdzie masz błąd, ale on może być wszędzie przy bardziej rozbudowanej grze.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No dobra, myślę dalej, mozliwosci wykluczone wiec błąd musi być głębiej.

 

A jeszcze takie pytanko jest mozliwe określenie jakie pakiety (a w nich jakie zmienne, tablice) idą do jakiego gracza. Nie chodzi tu o wielkość wiadomosci tylko o konkretne wartosci i nazwy zmiennych.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

u każdego, wydaje mi się ze ten mój kod rozsyła pakiet do klientow tyle razy ile graczy w grze ;/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

sprawdź jakimś programem ile, kiedy i jakie porty są podłączone do twojej aplikacji być może któryś nie zamykasz albo same się zamykają do tego przyd ci się Netpeeker

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

chodzi ci o ten kod :

 

GML
self._id = SetItemID();

self._rodzaj = 1;

global.itemID[self._id] = self._id;

var _x,_y,_rodz;

_x = mouse_x;

_y = mouse_y;

_rodz = 1;

 

 

 

clearbuffer();

writebyte(13);

writeshort(_x);

writeshort(_y);

writeshort(_id);

writeshort(_rodz);

 

with(obj_client)

{

sendmessage(tcp);

}

 

 

w_eq = 0;

w_inv = 0;

 

To jest całe Create Itemu na kliencie. Nic tam wiecej nie ma.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

więc całe zamieszanie powoduje jakiś inny fragment kodu, ale do tego trzeba by mieć po pierwsze caluśki projekt, po drugie czas i chęci.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Bardzo to dziwne. A na serwie widzisz ile obiektów się tworzy? Może tworzony obiekt ma jakiegoś parenta i jakoś to zapętla?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×