Skocz do zawartości

Komendy


Roki

Rekomendowane odpowiedzi

Tworze sobie gierke online, tylko nie wiem dlaczego nie działają mi komendy :/ Kod:

GML
if ( rank == 1 ) {

if ( string_copy(msg,1,1) == "/" ) {

if ( string_copy(msg,1,string_length("/say ")) == "/say " ) {

arg = string_copy(msg,string_length("/say "),string_length(msg)-string_length("/say ")+1)

clearbuffer();

writebyte(MSG_CHAT);

writestring("[SERVER]: " + arg);

writeshort(c_red);

SendClient(-1);

exit;

}

if ( string_copy(msg,1,string_length("/players ")) == "/players " ) {

arg = instance_number(objPlayer);

clearbuffer();

writebyte(MSG_CHAT);

writestring("[PLAYERS]: "+arg);

writeshort(c_red);

SendClient(1);

exit;

}

} else {

clearbuffer();

writebyte(MSG_CHAT);

writestring("[A]" + name + ": " + msg);

writeshort(c_blue);

SendClient(0);

}

} else {

Najpierw sprawdzam czy gracz ma range 1, jeżeli tak to sprawdzam czy pierwszy znak w odebranej wiadomości to "/", jeżeli tak sprawdzam komendy i w zależności od komendy robie odpowiednią akcje. Jeżeli wiadomość nie zaczyna się od "/" to wysyłam zwykłą wiadomość. Jeżeli gracz nie ma rangi 1, to wtedy jest normalne wysłanie wiadomości ( uciąłem bo sie nie przyda ).

Problem jest w tym, że działa tylko komenda "/say". Nie działa nawet zwykła wiadomość :/

 

Daje w początkujących bo imo powinno działać i do tego wydaje się proste :/

Odnośnik do komentarza
Udostępnij na innych stronach

A tak, zapomniałem :P

GML
/*

-1= Wszyscy gracze

0=Wszyscy gracze bez danego

1=Dany gracz

2=Gracz z id zdefiniowanym w arg 2

*/

global.upsize+=buffsize()/1024

switch(argument0)

{

case -1:

bufferencrypt(global.password)

with(objPlayer)

sendmessage(socket)

break;

case 0:

bufferencrypt(global.password)

with(objPlayer)

{

if id!=other.id

{

sendmessage(socket)

}

}

break;

 

case 1:

bufferencrypt(global.password)

sendmessage(socket)

break;

 

case 2:

with(objPlayer)

{

if playerid=other.argument1

{

bufferencrypt(global.password)

sendmessage(socket)

}

}

break;

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nie widze tam w sumie jakichś specjalnych błędów (można by lekko zoptymalizować, ale to są pierdoły nie mające znaczenia). Pamiętaj jednak, że jak jest na początku znak "/", to tylko dwa warunki są sprawdzane. Może to kwestia argumentów w sendClient() ? Daj przed nimi np. show_message('xxx'); i bedziesz wiedział, czy w te warunki kod wchodzi czy nie :) Wtedy już wiesz, że to problem z wysłaniem / odebraniem danych.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Np. zamiast 3 razy sprawdzać string_length dla tego samego łańcucha, można by przypisać tę liczbę do jakiejś zmiennej tymczasowej - potem jak będziesz chciał /say zmienić na /send to nie będziesz musiał tylu miejsc aż zmieniać w kodzie, a i obliczeń jest nieco mniej (wiem, to niezauważalne, ale już 1000 takich niezauważalnych obliczęń może zacząć być zauważalne...)

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem co tam było źle. Teoretycznie wszystko działało, sprawdziłem z show_message() :/

Zrobiłem teraz innaczej, sprawdzam czy na 1 pozycji jest "/", jesli tak to zrobiłem switch który sprawdza co jest na drugiej pozycji :D I działa :D

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