Roki Opublikowano 3 Grudnia 2011 Udostępnij Opublikowano 3 Grudnia 2011 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 Więcej opcji udostępniania...
ediepl Opublikowano 3 Grudnia 2011 Udostępnij Opublikowano 3 Grudnia 2011 Podaj skrypt SendClient. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 4 Grudnia 2011 Autor Udostępnij Opublikowano 4 Grudnia 2011 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Grudnia 2011 Administratorzy Udostępnij Opublikowano 4 Grudnia 2011 czemu po "komendach" jest spacja ? i dla czego nie możesz napisać: GML if (msg == "/say") Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 4 Grudnia 2011 Autor Udostępnij Opublikowano 4 Grudnia 2011 "msg" to wiadomość od każdego gracza. Czyli np. "/say omgwtf lol". Spacja jest po to zeby wiedzieć czy na 100% ktoś wpisał komende + argument, czy tylko samo "/say". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Grudnia 2011 Administratorzy Udostępnij Opublikowano 4 Grudnia 2011 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 Więcej opcji udostępniania...
Roki Opublikowano 4 Grudnia 2011 Autor Udostępnij Opublikowano 4 Grudnia 2011 Posprawdzam potem z show_message();, dzięks :D A co do optymalizacji, co można poprawić? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 4 Grudnia 2011 Udostępnij Opublikowano 4 Grudnia 2011 Proponuję zapoznać się z funkcją string_pos. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Grudnia 2011 Administratorzy Udostępnij Opublikowano 4 Grudnia 2011 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 Więcej opcji udostępniania...
Roki Opublikowano 4 Grudnia 2011 Autor Udostępnij Opublikowano 4 Grudnia 2011 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 Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 4 Grudnia 2011 Udostępnij Opublikowano 4 Grudnia 2011 if(string_pos("/say",msg) = 1) {akcja dla komendy say} if(string_pos("/players",msg) = 1) {akcja dla komendy players} itd.... 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ę