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
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Napisano 11.11.2013 05:13
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
Napisano 11.11.2013 09:04
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
"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.
Napisano 11.11.2013 12:07
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").
Napisano 11.11.2013 15:37
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
Napisano 11.11.2013 18:12
@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?
Napisano 11.11.2013 18:19
Zamiast add_delay(num, "cos_tam"); daj add_delay(i, "cos_tam"); i wywal zmienną lokalną "num" ;-)
Napisano 11.11.2013 19:14
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.
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Napisano 11.11.2013 20:09
z tego co mi sie wydaje zmienna i jest wieksza od num o 1
Napisano 11.11.2013 20:16
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.
If you can dream it, you can do it.
Napisano 11.11.2013 20:56
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(); }
Napisano 12.11.2013 00:57
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
Napisano 24.11.2013 10:24
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
Napisano 26.11.2013 16:57
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
Napisano 27.11.2013 14:25
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
Napisano 27.11.2013 15:27
a moge zamiast case: 10..32 dac default?
0 użytkowników, 0 gości, 0 anonimowych