Ogen Dogen 2 747 Właściciel Opublikowano 16 Czerwca 2013 Właściciel Udostępnij Opublikowano 16 Czerwca 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ogen Dogen 2 747 Właściciel Opublikowano 16 Czerwca 2013 Właściciel Udostępnij Opublikowano 16 Czerwca 2013 Jest to poradnik dla skrypterów AMXX , więc czytając ten poradnik powinieneś wiedzieć / znać : - Podstawy scriptingu AMXX - Podstawy PAWN'a - Wiedzieć do czego służy zerowy index - Wiedzieć co to są eventy. W niektórych eventach nie prawidłowo jest stosowany zerowy index , ponieważ wykonuje on również operacje na graczach , którzy jeszcze nie weszli do gry. Jego zastosowanie nie jest błędem formalny , jednak powoduje on zasypywanie nas error logami i oczywiście źle to oddziaływuje na serwer. Przykładowy error log : L 03/06/2013 - 17:02:38: [AMXX] Displaying debug trace (plugin "cskatowice.amxx") L 03/06/2013 - 17:02:38: [AMXX] Run time error 4: index out of bounds L 03/06/2013 - 17:02:38: [AMXX] [0] colorchat.inc::ColorChat (line 53) L 03/06/2013 - 17:02:38: [AMXX] [1] cskatowice.sma::client_disconnect (line 986) Z ostatniej linijki odczytujemy numer linijki w kodzie do którego się odnosi błąd i przechodzimy już do kodu. Załóżmy że chcemy zrobić powitanie na serwerze dla VIP'a jeszcze gdy się łączy. Do tego potrzebny nam jest event client_connect public client_connect(id) { if (access(id,ADMIN_LEVEL_A)) { new nick[32]; get_user_name(id,nick,31); ColorChat(0,GREEN,"VIP %s wbija na serwer !",nick); } return PLUGIN_HANDLED; } Taki zapis właśnie powoduje błąd. Dlatego najlepszym rozwiązaniem tutaj jest zapisanie sobie id gracza na którym wykonuje się event i przekazać go do drugiej zwykłej funkcji. new pid; public client_connect(id) { if (access(id,ADMIN_LEVEL_A)) { pid=id; new nick[32]; get_user_name(id,nick,31); cskatowice(id); } return PLUGIN_HANDLED; } public cskatowice(id) { newPlayers[32],Num; get_players(Players,Num); for(i=0; i<Num; i++) { new id=Players; if(pid!=id)ColorChat(id,GREEN,"VIP %s wbija na serwer",nick); } return PLUGIN_HANDLED; } Teraz opiszę zasadę działania tego cuda. Podczas eventu sprawdzamy czy gracz ma flagę VIP'a. Jeśli tak to pobieramy nick , zapisujemy id danego gracza do zmiennej i przekazujemy dalej (jako id) do drugiej funkcji. Przechodzimy dalej. Tutaj mamy pętle wykonującą operacje na wszystkich graczach. Więc czym różni się od zerowego indexu ? Zerowy index wykonuje dana natywe na wszystkich graczach bez wyjątku (również HLTV) bądź niektóre na serwerze , który również jest graczem (o tym kiedy indziej). A taka pętla pozwala nam na więcej instrukcji i natyw oraz wykluczenie niektórych graczy np. terrorystów i/lub HLTV. A kogo wykluczyliśmy w tej funkcji ? Właśnie tego gracza , który wchodzi na serwer. Pokaże to jeszcze na przykładzie : Załóżmy że gracz który się łączy ma id = 5 Zapisujemy je do zmiennej i w drugiej funkcji porównujemy ją z id które jest liczone od 1. if (pid!=id) Gdy zmienna jest różna od ID wyświetl informacje. Kroki pętli będą takie : id = 1 -> Czy różne od 5 ? -> Tak , wyświetl. id = 2 -> Czy różne od 5 ? -> Tak , wyświetl. id = 3 -> Czy różne od 5 ? -> Tak , wyświetl. id = 4 -> Czy różne od 5 ? -> Tak , wyświetl. id = 5 -> Czy różne od 5 ? -> Nie. Nic nie rób. Poradnik ma na celu pomóc w diagnostyce błędów. Mam nadzieję że dogłębnie napisałem jak pozbyć się tego typu error loga. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cajmert 3 197 Właściciel Opublikowano 17 Czerwca 2013 Właściciel Udostępnij Opublikowano 17 Czerwca 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cajmert 3 197 Właściciel Opublikowano 17 Czerwca 2013 Właściciel Udostępnij Opublikowano 17 Czerwca 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Brelok 305 Opublikowano 17 Czerwca 2013 Udostępnij Opublikowano 17 Czerwca 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Brelok 305 Opublikowano 17 Czerwca 2013 Udostępnij Opublikowano 17 Czerwca 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
FreeMan 0 Opublikowano 4 Sierpnia 2013 Udostępnij Opublikowano 4 Sierpnia 2013 Hej! Nie widzisz zawartości tego postu? Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi