Skocz do zawartości

[39dll] Przedmiot wysyłany kilkakrotnie ;/


Hunter

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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 ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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;

}

}

Odnośnik do komentarza
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.

Odnośnik do komentarza
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.

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