Co do pętli
Tworzona jest zmienna "i", która przyjmuje wartość 1 (jest to indeks pierwszego gracza, możliwe indeksy graczy to 1-32), następnie podany jest warunek, który musi zostać spełniony aby pętla mogła wykonać dany kod (mogła wykonać iterację), na końcu podane masz, że po wykonaniu się kodu pętli zmienna "i" zostanie zwiększona o 1, jest to postinkrementacja (
http://amxx.pl/topic/2790-a-czy-a/ ).
Dany kod pętli przebiega po wszystkich indeksach graczy (jak już wspomniałem od 1-32, można byłoby to zrobić optymalniej to maksymalnej ilości slotów, gdyż nie ma sensu sprawdzać indeksów powyżej np. 20 na 20 slotowym serwerze), najpierw sprawdzany jest warunek czy gracz o danym indeksie nie żyje lub nie ma klasy (o czym informuje nas znak wykrzyknika (!), który oznacze negację. Warunek is_user_alive() - gracz jest żywy, warunek !is_user_alive() - gracz jest nieżywy), jeżeli warunek jest spełniony to dalszy kod funkcji jest pomijany, zmienna zwiększana o 1 i kod wykonuje się znowu dla zwiększonej zmiennej "i" (najpierw przechodzi przez główny warunek pętli i<33, jeżeli jeszcze spełnia to wykonuje się znowu kod pętli, jeżeli nie to pętla kończy swe działanie, zmienna "i" zostaje już usunięta ze stosu i na tym kończy swe działanie ta wywołana funkcja). Teraz tylko krótkie dokończenie opisu, ponieważ wcześniej stanęliśmy na warunku
if( !is_user_alive( i ) || !bKlasa[ i ] )
i rozpatrujemy go, że warunek nie został spełniony (czyli gracz żyje lub ma daną klasę), po czymwykonuje się funkcja diablo_add_hp(), która zapewne dodaje hp o daną ilość danemu graczowi o indeksie "i".
Co to tasku, task po jego wywołaniu, wywołuje funkcję hpBack() nieskończoną ilość razy (flaga "b" - wykonuje się nieskończoną ilość razy
http://amxx.pl/dokum...szukaj/set_task ) co 10 sekund, aż do momentu usunięcia tasku funkcją remove_task()
ten task równie można zapisać tak:
set_task( 10.0 , "hpBack" , _, _, _, "b" );
W takim duecie, dodawanie hp odbywa się u wszystkich co 10 sekund (warunkiem jest fakt, że gracz musi być żywy lub mieć daną klasę)
Nie wiem jakie jest założenie tego kodu, ale ja bym zmienił na
if( !bKlasa[ i ] && !is_user_alive( i ) )
Bo przy warunku jakim posiadasz, gdy gracz nie będzie żywy, a będzie miał daną klasę, będzie spróbowane dodanie mu hp (martwemu nie można dać hp
, no chyba, że w danej funkcji natywnej przed dodaniem hp sprawdzane jest czy gracz jest żywy).
W moim warunku, aby gracz dostał hp gracz musi żyć i mieć daną klasę (do tego przestawienie elementów warunku, spowodowane tym że warunki czytane są od lewej, czyli u mnie pierwszy warunek składa się ze zmiennej w pluginie, a drugi jest funkcją natywną, gdzie musi być ona wywołana, pobrana i przyrównana (operacji jest trochę więcej i wykonuje się to ciu dłużej), lecz przestawienie elementów warunku jest czystą optymlizacją).