Roki Opublikowano 12 Maja 2009 Opublikowano 12 Maja 2009 Mam sobie constants: -up -left -down -right No i mam obj, kontrolujący, a on ma w stepie: switch(message_id) case up x=writeshort() itd. itd. A w serwerze mam: switch(message_id) case up x = readshort() itd. itd. I moje pytanie brzmi, czy wystarczy że dam sendmessage(tu nie wiem czy value, czy nazwa), a w serwie readmessage() i bedzie? Tylko jak to zrobić, żeby działało.
Pieter Opublikowano 12 Maja 2009 Opublikowano 12 Maja 2009 tak, powinno... ale lepszym sposobem jest robienie i sprawdzanie co nie działa mistrzu :] niż pytanie się na forum.
Roki Opublikowano 12 Maja 2009 Autor Opublikowano 12 Maja 2009 Hehe, właściwie racja, ale cóż, no pytam się bo po to forum :P
Crackkk-GM Opublikowano 12 Maja 2009 Opublikowano 12 Maja 2009 miszczu: x=writeshort() ? writeshort(x) A potem w servie msg_id = receivemessage( socket ); switch( msg_id ) { case up:{ x = readshort() }break; itd }
Administratorzy gnysek Opublikowano 12 Maja 2009 Administratorzy Opublikowano 12 Maja 2009 Miszczu powyżej: GML clearbuffer(); writebyte(up); writeshort(x); GML size = receivemessage( socket ); if size>0 { msgid = readbyte(); switch msgid { case up: x= readshort(); break; } } bo w Twoim przykładzie switch będzie zalezny od rozmiaru otrzymanej wiadomości.
Crackkk-GM Opublikowano 12 Maja 2009 Opublikowano 12 Maja 2009 Ja tylko poprawiłem... takie rzeczy jak clearbuffer sam se powinien dopisać, tak samo z msgid, tylko pokazałem mu że nie trzeba żadnego "readmessage" (nawet takiego czegoś niema o.)
Administratorzy gnysek Opublikowano 12 Maja 2009 Administratorzy Opublikowano 12 Maja 2009 msg_id = receivemessage( socket ); switch( msg_id ) jak byk wprowadzanie w błąd, nie wymigasz się, zostaniesz wysmagany przez Tymona rózgą po tyłku. uuuuuuuuuuaaaaaaa xD Borek
Roki Opublikowano 14 Maja 2009 Autor Opublikowano 14 Maja 2009 Nie chce zakładać nowego tematu, a mam wielki problem... Wszystko mam, w sensie chodzenie, chat, i takie podstawy, ale chce jeszcze zrobić coś jak własne domki... W sensie, że klikamy na przycisk i jesteśmy w domu, można się odwiedzać, a take kupować do niego rzeczy, nie potrzebuje na razie skryptów, ale chociaż mnie naprowadźcie...
Hunter Opublikowano 14 Maja 2009 Opublikowano 14 Maja 2009 Oczywiście grafiki domow na planszy dajesz w cliencie. Gdy gracz wklika na przycisk wysyła informacje do klienta aby ten np. w pliku ini przeszukał jego dane i czy posiada on tam zmienną odpowiedzialną za własnosc domu, jesli jest takowa wysylasz info do clineta zeby dajmy na to przeszedl do rooma z domkiem jesli nie nic sie nie dzieje. Co do skryptów moze wieczorkiem cos zapodam.
Roki Opublikowano 14 Maja 2009 Autor Opublikowano 14 Maja 2009 No ok, fajny pomysł, kupowanie to też tylko zapis by był do ini, ale co z odwiedzaniem?
Hunter Opublikowano 14 Maja 2009 Opublikowano 14 Maja 2009 a na czym te odwiedzanie mialo by polegac? Bo jesli tylko na tym ze wchodzisz rozgladasz sie i tylko tyle?
Roki Opublikowano 14 Maja 2009 Autor Opublikowano 14 Maja 2009 Tak, wchodzisz i już, można oglądać co kto ma :P
Hunter Opublikowano 14 Maja 2009 Opublikowano 14 Maja 2009 To jesli masz grafike domu w kliencie to nic wysyłac nie musisz no chyba ze w domu lezą jakies przedmioty wtedy nalezy wyslac ich pozycje.
pablo1517 Opublikowano 14 Maja 2009 Opublikowano 14 Maja 2009 Musi wysłać. Domek chyba będzie oddzielnym roomem nie?
Roki Opublikowano 14 Maja 2009 Autor Opublikowano 14 Maja 2009 Próbowałem, ale mi nie idzie, chodzenie było o tyle łatwe, że słało do serva, ale teraz musi wybierać z serva... Dopisałem do pliku ini: ini_write_string('House','Message',Welcome!) ini_write_real('House','Item1',0) ini_write_real('House','Item2',0) ini_write_real('House','Item3',0) ini_write_real('House','Item4',0) No i chce że jeśli ktoś ma kupione to ustawia, dany item na 1, a tworzy na wybranych(przez hosta(ja)) miejscach.
Administratorzy gnysek Opublikowano 14 Maja 2009 Administratorzy Opublikowano 14 Maja 2009 No to host wysyła GML clearbuffer(); writebyte(dom); writebyte(10); //ile bedzie teraz przedmiotow writebyte(1); //numer przedmiotu, potem jakis skrypt to odbierze writeshort(pozycjax); writeshort(pozycjay); writebyte(17); //numer przedmiotu, potem jakis skrypt to odbierze writeshort(pozycjax); writeshort(pozycjay); ... writebyte(4); //numer przedmiotu, potem jakis skrypt to odbierze writeshort(pozycjax); writeshort(pozycjay); sendmessage(); Jeżeli room jest mały, to można by nawet pomyśleć o przesunięciu bitowym o 8, żeby w jednego shorta upchać x i y. (ale wtedy na maxa jest tylko 255,255 bo to są dwa bajty). GML msg = readbyte(); switch msg { ... case dom: var i,j; j = readbyte(); //ile bedzie teraz przedmiotow for (i=0; i<j; i+=1) { var co,obj; co = readbyte(); switch co { case 0: obj = obj_lodowka; break; case 1: obj = obj_telewizor; break; default: obj = obj_dywan; break } instance_create( readshort(), readshort(), obj); } break; case ... }
PsichiX Opublikowano 14 Maja 2009 Opublikowano 14 Maja 2009 Jeżeli room jest mały, to można by nawet pomyśleć o przesunięciu bitowym o 8, żeby w jednego shorta upchać x i y tak gwoli ścisłości: wtedy dajesz dwie wartości byte, jedna po drugiej i nie trzeba się bawić w przesunięcia bitowe
Administratorzy gnysek Opublikowano 14 Maja 2009 Administratorzy Opublikowano 14 Maja 2009 Masz rację, głupio wymyśliłem, w tym przypadku akurat to jest to samo, ale na pewno czasem udało by się te kilka bitów uszczknąć i np. zamiast trzech shortów wysłać dwa inty :P
Roki Opublikowano 14 Maja 2009 Autor Opublikowano 14 Maja 2009 Gnysek, ale nie o to do końca chodzi... Coś jak w Nostale, albo ... No niech będzie, Tibia... Czyli gracz wchodzi kupuje item, jego tworzy i zapisuje mu na konto, a potem gdy wchodzi to mu odbiera...
Administratorzy gnysek Opublikowano 17 Maja 2009 Administratorzy Opublikowano 17 Maja 2009 No to podałem Ci jak odebrać listę przedmiotów z danego domu, zakupy sobie zaprogramuj już sam.
Roki Opublikowano 21 Maja 2009 Autor Opublikowano 21 Maja 2009 Popróbowałem, ale mi nie idzie :/ Zrobiłem constants MSG_HOUSE Value 9 W serwerze i kliencie. no i obiekt odpowiadający za dom: Information about object: objHouseController Sprite: Solid: false Visible: true Depth: 0 Persistent: false Parent: Mask: Create Event: execute code: global.house = get_string('What house you want visit?','Type Here') clearbuffer() writebyte(MSG_HOUSE) send_server() msg = readstring() item1 = readshort() item2 = readshort() item3 = readshort() item4 = readshort() show_message(string(msg)) if item1 = 1 { instance_create(0,0,obj_warp) } else { } Skrypt sendserver: GML bufferencrypt(global._buffpass) //Encrypt the buffer sendmessage(global.tcpsocket) A na serwie mam: User Definied 0 switch(message_id)... case MSG_HOUSE case_msg_house() - skrypt a w tym skrypcie: GML global.house = readstring() clearbuffer() if file_exists('[Player]'+string_lower(global.house)+'.ini') { ini_open('[Player]'+string_lower(global.house)+'.ini') msg=ini_read_string('House','message','Welcome!') item1=ini_read_real('House','item1','0') item2=ini_read_real('House','item2','0') item3=ini_read_real('House','item3','0') item4=ini_read_real('House','item4','0') writestring(msg) writeshort(item1) writeshort(item2) writeshort(item3) writeshort(item4) send_client(2) } SendClient: GML bufferencrypt(global._buffpass) /* 0 = send to all players, 1 = send to all in same room, 2 = just to own socket, 3 = to the player with the playerid that is defined with argument1 4 = to the players that are in the room with the number argument1 5 = to the player with the instance id defined in argument1 */ switch(argument0) { case 0: with(obj_player) if id != other.id { sent_size = sendmessage(socket) scr_count_send() } break; case 1: with(obj_player) if (cur_room = other.cur_room && id != other.id) { sent_size = sendmessage(socket) scr_count_send() } break; case 2: sent_size = sendmessage(socket) scr_count_send() break; case 3: with(obj_player) if (playerid = argument1) { sent_size = sendmessage(socket) scr_count_send() } break; case 4: with(obj_player) if (cur_room = other.argument1 && id != other.id) { sent_size = sendmessage(socket) scr_count_send() } break; case 5: with(argument1) { sent_size = sendmessage(socket) scr_count_send() } break; } I dlaczego po wejsciu nic nie pokazuje, tylko mi laguje?
PsichiX Opublikowano 21 Maja 2009 Opublikowano 21 Maja 2009 bo szyfrujesz dane, i na serwie, i w kliencie, ale nigdzie nie deszyfrujesz ich
Roki Opublikowano 21 Maja 2009 Autor Opublikowano 21 Maja 2009 Czyli co mam dodać do tego? Dodałem po każdym clearbuffer: bufferencrypt(haselko) I też nic :/
PsichiX Opublikowano 21 Maja 2009 Opublikowano 21 Maja 2009 powiedziałbym coś ale się opanuję. A wywal wszystkie bufferencrypt() z serwa i klienta i sprawdz czy zadziala. Jak zadziala to reszte sie domyslisz.
Roki Opublikowano 21 Maja 2009 Autor Opublikowano 21 Maja 2009 Wywaliłem bufferencrypt i bufferdecrypt, ale nic, to samo co zawsze, więc na razie dam sobie spokój z domkami :(
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ę