Cykliczne wykonywanie
KillerBee 11.11.2013
Witam
jak zrobić wykonanie funkcji X 2 razy tzn. chce aby dla 10 graczy wykonala sie ona od razu a dla pozostalych graczy za 2-3 sekundy.
Jest taka mozliwosc?
pozdrawiam
Wielkie Jol
11.11.2013
Dodajesz warunki, używasz funkcji set_task, ot to cała filozofia.
Nie zdefiniowałeś pojęcia "graczy" więc nie wiem o jakich "graczy" Ci chodzi, czy o żywych, martwych, obserwujących, terrorystów czy co
Aemiksowy 11.11.2013
Oczywiście że jest taka możliwość. Proponuję utworzenie stocka:
stock add_delay(index, const task[]) { switch(index) { case 1..9: set_task(2.5, task, index, _, _, "a", 2) case 10..32: set_task(0.3, task, index, _, _, "a", 2) } }
Wtedy już nie używasz set_taska, a add_delay, podajesz 2 parametry z tasku, mianowicie 2 i 3, czyli ID oraz nazwa funkcji, np. add_delay(index, "funkcja").
KillerBee 11.11.2013
czy cos takiego bedzie dzialac?:
new num; for(new i = 1; i <= get_maxplayers(); i++) { if(!is_user_alive(i) || get_user_team(i) != 1) { continue; } num++; add_delay(num, "cos_tam"); } public cos_tam(id) { //wykonaj cos }
Użytkownik KillerBee edytował ten post 11.11.2013 15:38
Leihto
11.11.2013
@up.
Uwagi co do kodu: Niepotrzebna zmienna num, bo num przyjmuje wartość taką samą jak i.
I takie coś zadziała. Z resztą najlepszą metodą sprawdzenia jest kompilacja i odpalenie pluginu, czyż nie?
Aemiksowy 11.11.2013
Zamiast add_delay(num, "cos_tam"); daj add_delay(i, "cos_tam"); i wywal zmienną lokalną "num" ;-)
sebul
11.11.2013
Zmienna num nie przyjmuje wartości takiej samej jak i, przed zwiększaniem num masz warunek.Uwagi co do kodu: Niepotrzebna zmienna num, bo num przyjmuje wartość taką samą jak i.
speedkill
11.11.2013
Tak, a także nie pobieraj za każdym razem maksymalnej ilości graczy. Pobierz tę ilość raz, a następnie używaj ją w pętli.
Aemiksowy 11.11.2013
Najlepiej w plugin_cfg przypisać zmienną globalną, która będzie pobierała maksymalną ilość graczy. Dlaczego w plugin_cfg? Bo to jest wczytywane raz na mapę, zaraz po plugin_init.
Przykład:
new zmienna; public plugin_init(){ .... } public plugin_cfg(){ zmienna = get_maxplayers(); }
KillerBee 12.11.2013
Tak, a także nie pobieraj za każdym razem maksymalnej ilości graczy. Pobierz tę ilość raz, a następnie używaj ją w pętli.
Tak wiem nie chcialo mi sie pisac juz calego kodu wraz z plugin_init
Najlepiej w plugin_cfg przypisać zmienną globalną, która będzie pobierała maksymalną ilość graczy. Dlaczego w plugin_cfg? Bo to jest wczytywane raz na mapę, zaraz po plugin_init.
Przykład:
new zmienna; public plugin_init(){ .... } public plugin_cfg(){ zmienna = get_maxplayers(); }
to co wyzej
Gość_21977_* 24.11.2013
Jinchūriki Gyūkiego ma rację, zmienna num jest potrzebna.
Bez niej, kod nie będzie działał prawidłowo, jeśli będzie istniał gracz o id > 10, a nie każde id ∈ [1 ; 10] będzie odpowiadało graczowi, który jest aktualnie na serwerze i do tego jest żywy.
Wtedy bowiem dla gracza, de facto z pierwszej dziesiątki, funkcja zostanie opóźniona, bowiem jego id > 10.
Kontrprzykład:
id i num opóźnienie dla i poprawne opóźnienie 1 1 1 false false 11 11 2 true false
KillerBee 26.11.2013
Oczywiście że jest taka możliwość. Proponuję utworzenie stocka:
stock add_delay(index, const task[]) { switch(index) { case 1..9: set_task(2.5, task, index, _, _, "a", 2) case 10..32: set_task(0.3, task, index, _, _, "a", 2) } }Wtedy już nie używasz set_taska, a add_delay, podajesz 2 parametry z tasku, mianowicie 2 i 3, czyli ID oraz nazwa funkcji, np. add_delay(index, "funkcja").
Czyli jak moge uzyc tego stocka aby wykonal sie po 2.5 sekundach dla 1-9 graczy (jak w tym stocku) a dla pozostalych (nie stala ilosc, bo przeciez graczy nie ma zawsze co ilosc slotow serwera) pozniej ?
Użytkownik KillerBee edytował ten post 26.11.2013 16:58
Aemiksowy 27.11.2013
Ten stock pobiera, ile znajduje się graczy "indeksów" czyli ID na serwerze. Jeśli będzie w przedziale 1-9, set_task będzie wykonywał się co 2.5s, jeśli więcej czyli 10-32, co 0.3s. Sam indywidualnie to ustaw.
Użytkownik Aemiksowy edytował ten post 27.11.2013 14:38