Skocz do zawartości

Przesyłanie ID itemów nie działa (?)


Hunter

Rekomendowane odpowiedzi

Witam, mam dziwny(no moze dla niektorych nie) problem z przesyłaniem danych itemów od Klienta do serwera. Dokładnie chodzi o to że nie przypisuje użytkownikowi ID założonego itemu przez co gracz ubiera go tylko u siebie a na serwie pozostaje ze tak powiem widoczny dla wszystkich mimo ze powinien być w czyimś plecaku.

 

SERWER

[OBJ_ITEM]

 

[CREATE]

GML
_id = -1;

rodzaj = -1;

w_eq = 0;

w_inv = 0;

 

Przyjmowanie danych(podejzewam iż tu jest błąd ale nie jestem pewny)

 

GML
case 7:

var _itemId,__playerID;

_itemId = readshort();

__playerID = readshort();

 

 

with (oItem)

{

if (_id == _itemID)

{

w_eq = true;

w_inv = false;

show_message('przyjelem');

with (obj_client)

{

for (i=0;i<20;i+=1)

{

if (global.players == __playerID )

{

for (j=0;j<90;j+=1)

{

if ( ItemSlotOnBp == -1)

{

ItemSlotOnBp[j]=1;

}

}

}

}

}

 

break;

 

Tworzenie itemów przez serwer i nadawanie mu ID:

 

GML
var _x,_y,_rodz,item;

_x = argument[0];

_y = argument[1];

_rodz = argument[2];

 

items = instance_create(mouse_x,mouse_y,oItem);

items._id = SetItemID();

items._rodzaj = _rodz;

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

 

 

with ( items )

{

clearbuffer();

writebyte(13);

writeshort(_x);

writeshort(_y);

writeshort(_id);

writeshort(_rodz);

 

with(obj_client)

{

sendmessage(tcp);

}

 

}

 

 

plus skrypt SetItemID():

 

 

GML
for (i=0;i<400;i+=1)

{

if (global.itemID == -1)

{

return i;

 

}

}

 

 

 

CLIENT:

Podnoszenie itemów i wysyłanie ich:

 

GML
var ID;

ID = argument[0];

for (j=0;j<global.ilosc_y;j+=1)

{

for (i=0;i<global.ilosc_x;i+=1)

{

if ( global.BpSlot[i,j] == -1 )

{

self.x = view_xview[0]+422+32*i;

self.y = view_yview[0]+240+32*j;

self.w_eq = true

self.position_x = 422+32*i;

self.position_y = 240+32*j;

self.depth = -10001;

self._draw = false;

//show_message('I: '+string(i));

//show_message('J:'+string(j));

global.BpSlot[i,j] = ID;

//show_message(string(ID));

clearbuffer();

writebyte(7);

writeshort(ID);

writeshort(global.myid);

sendmessage(global.clienttcp);

break;

}

 

}

if !(i==global.ilosc_x)

{

break;

}

else

{

continue;

}

}

 

Odbieranie stworzonego itema :

 

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;

 

 

 

 

To chyba wszystko, puki co nie wiem o co kaman, bo noc ciemna i brak wiedzy ;] Licze na waszą szybką pomoc gdyż z projektem stać w miejscu mi szkoda.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie za bardzo rozumiem problem, oraz co to jest to "przyjmowanie danych" skoro na samym dole posta masz "odbieranie i tworzenie itemu" ?

 

Ogólnie tak troche niejasno mi ten kod wygląda ;/.

 

EDIT:

A może to tutaj?

case 7:

var _itemId,__playerID;

_itemId = readshort(); // itemId - literka d z małej

__playerID = readshort();

 

 

with (oItem)

{

if (_id == _itemID) // itemID - literka D z dużej ?

{

w_eq = true;

w_inv = false;

 

PS. Jak można robić EQ na obiektach, aj... xD

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nie mówi, że masz zaznaczone ustawianie nieznanych zmiennych na 0... to najgorsze co można zrobić, przez to znalezienie błędy w programie nieraz graniczy z cudem.

Odnośnik do komentarza
Udostępnij na innych stronach

PS. Jak można robić EQ na obiektach, aj... xD

 

Mam 3 obiekty: 1 od inventory, 1 od plecaka i 1 od itemów wiec nie wiem czy to sie ma do robienia kupy obiektów ktorzy niektorzy robia na ten system.

 

Hm zmieniłem nazwe zmiennej, mimo to niedziała, chyba cos zwaliłem z tym systemem przsyłu ID przedmiotów.

No więc opisze dokładnie problem:

 

Serwer tworzy Item przypisując mu unikalny ID i wysyła go do pozostałych graczy gdzie obiekt zostaje tworzony i dostaje ID przedmiotu z serwera. Nastepnie probojąc go założyć przesyłany zostaje ID zakładanego przedmiotu do serwera a ten sprawdza go z kazdym obiektem Item czy mają to samo ID. Tyle że najwyraźniej nie mają bo nie wyświetla wiadomości.

(sprawdziłem, dane przy wysyle ID z serwa i dane wysyłanego od clienta są TAKIE SAME)

 

 

Nie mówi, że masz zaznaczone ustawianie nieznanych zmiennych na 0... to najgorsze co można zrobić, przez to znalezienie błędy w programie nieraz graniczy z cudem.

 

Tzn.?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

GML
case 7:

var _itemId,__playerID;

_itemId = readshort(); // zmienna serwera (serwer._itemId)

__playerID = readshort();

 

 

with (oItem)

{

if (_id == _itemId) // zmienna oItem a nie serwera (oItem._itemId != serwer._itemId);

{

 

a nie czasem other._itemID ?? W końcu korzystając z WITH widzisz zmienne oItem, a nie obiektu z którego kod wywołujesz :)

Odnośnik do komentarza
Udostępnij na innych stronach

Gnysiu, jeśli zmienna jest zadeklarowana w var to jest globalna, widać ją wtedy z każdego obiektu :(

 

GML
var cos;

cos=24;

 

with(obiekt1)

{

zmienna=cos;

}

To jest poprawne, zmiennej "zmienna" zostanie przypisana wartość 24 :<

 

PS. Może sprawdź też dane odbierane na serwie/kliencie. Showmessage z ItemId ;>?

Rozumiem, że "show_message('przyjelem');" ci się nie pokazuje?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Gnysiu, jeśli zmienna jest zadeklarowana w var to jest globalna, widać ją wtedy z każdego obiektu :(

 

GML
var cos;

cos=24;

 

with(obiekt1)

{

zmienna=cos;

}

To jest poprawne, zmiennej "zmienna" zostanie przypisana wartość 24 :<

 

PS. Może sprawdź też dane odbierane na serwie/kliencie. Showmessage z ItemId ;>?

Rozumiem, że "show_message('przyjelem');" ci się nie pokazuje?

 

Ooooo tego nie wiedziałem, myślałem, że var jest widoczna tylko w danym bloku kodu, oraz tylko w danym obiekcie, a nie globalnie do czasu zakończenia bloku. Ciekawe...

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