Hunter Opublikowano 28 Października 2009 Udostępnij Opublikowano 28 Października 2009 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 Więcej opcji udostępniania...
Maxpayn Opublikowano 29 Października 2009 Udostępnij Opublikowano 29 Października 2009 GML if ( ItemSlotOnBp == -1) { ItemSlotOnBp[j]=1; } wpisałeś i zamiast j Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 29 Października 2009 Autor Udostępnij Opublikowano 29 Października 2009 tak to jest błąd ale nie dotyczy mojego problemu ;/ Sprawdziłem wysyłanie zmiennej ID odpowiedzialnej za id itema, i serwer i client wysyła to samo ID wiec jest dobrze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 30 Października 2009 Udostępnij Opublikowano 30 Października 2009 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Października 2009 Administratorzy Udostępnij Opublikowano 30 Października 2009 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 Więcej opcji udostępniania...
Hunter Opublikowano 30 Października 2009 Autor Udostępnij Opublikowano 30 Października 2009 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Października 2009 Administratorzy Udostępnij Opublikowano 30 Października 2009 Treat unitialized variables as 0? Czy jakoś tak? W opcjach gry się to zaznacza. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 30 Października 2009 Autor Udostępnij Opublikowano 30 Października 2009 i włączona i wyłączona ta opcja nic nie dała ;/, pomysły mi się kończą ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Października 2009 Administratorzy Udostępnij Opublikowano 30 Października 2009 Napisz od nowa :) Bardzo nieczytelny ten skrypt, więc ciężko znaleźć powód. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 30 Października 2009 Autor Udostępnij Opublikowano 30 Października 2009 Napisz od nowa :) Bardzo nieczytelny ten skrypt, więc ciężko znaleźć powód. No jeśli do jutra nie dowiem się co jest nie tak, bede musiał, ale nie sadze zebym miałto jakoś znacznie inaczej napisać niż tak jak jest w obecnej formie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Października 2009 Administratorzy Udostępnij Opublikowano 30 Października 2009 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 Więcej opcji udostępniania...
pablo1517 Opublikowano 31 Października 2009 Udostępnij Opublikowano 31 Października 2009 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 Więcej opcji udostępniania...
Hunter Opublikowano 31 Października 2009 Autor Udostępnij Opublikowano 31 Października 2009 Nie pokazuje mi sie show_message('przyjelem'); ale dane ItemID są takie same przy przesłaniu i odbieraniu danych. Sprawdziłem show_message. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 31 Października 2009 Administratorzy Udostępnij Opublikowano 31 Października 2009 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 Więcej opcji udostępniania...
pablo1517 Opublikowano 31 Października 2009 Udostępnij Opublikowano 31 Października 2009 Hunter, podeślij plik projektu to zajrzę i sprawdzę jak coś ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę