Skocz do zawartości

39DLL, znowu, constants


Roki

Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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

}

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

bo szyfrujesz dane, i na serwie, i w kliencie, ale nigdzie nie deszyfrujesz ich

Odnośnik do komentarza
Udostępnij na innych stronach

powiedziałbym coś ale się opanuję. A wywal wszystkie bufferencrypt() z serwa i klienta i sprawdz czy zadziala. Jak zadziala to reszte sie domyslisz.

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