Task przysyłający dodatkowy index
sebul
24.01.2011
Witam. Pytanie raczej w dobrym miejscu, ale tak ogólnie to trochę chodzi o diablo. W diablo jest task, który wykonuje się, jeśli dana klasa strzeli do wroga z pistoletu
no i funkcja do, której odnosi się ten task wygląda tak
Skąd ten "attacker"? I do tego w DoDamage jest "attacker1", chyba w ogóle jakaś pomyłka w kodzie... Nie widzę, żeby tamten task przeniósł ze sobą informacje na temat atakującego (bo nawet nie wiem czy się da to zrobić), więc ten "attacker" tutaj jest raczej nie potrzebny, no i chyba "DoDamage" nie będzie działać tak jak trzeba, bo tam dalej w kodzie jest warunek, jeśli atakujący jest połączony.
No to może teraz przejdźmy do rzeczy... jak przenieść w danym tasku jakiś dodatkowy index?
W dokumentacji jest
no ale tak skromnie są opisane dane parametry, że nie wiem do czego służy "parameter[]=""" i "len = 0". Czy to właśnie w któryś z nich da się przenieść te dodatkowe informacje? Przeczytałem też set_task - funkcje czasowe - Nieoficjalny polski support AMX Mod X ale jakoś nie bardzo rozumiem na jakiej zasadzie to działa... Trzeba zrobić nową tablicę
potem pod nią
a task dać taki
i potem id pobrać z id+GLUTON, następnie atakującego z "data"? Czy jednak to wszystko wrzucić do "data"?
set_task(2.0, "funcDemageVic", id+GLUTON)
no i funkcja do, której odnosi się ten task wygląda tak
public funcDemageVic(id, attacker)
{
id-=GLUTON
if(get_user_health(id) > 10)
set_task(2.0, "funcDemageVic", id+GLUTON)
DoDamage(id, attacker1, 5);
}
Skąd ten "attacker"? I do tego w DoDamage jest "attacker1", chyba w ogóle jakaś pomyłka w kodzie... Nie widzę, żeby tamten task przeniósł ze sobą informacje na temat atakującego (bo nawet nie wiem czy się da to zrobić), więc ten "attacker" tutaj jest raczej nie potrzebny, no i chyba "DoDamage" nie będzie działać tak jak trzeba, bo tam dalej w kodzie jest warunek, jeśli atakujący jest połączony.
No to może teraz przejdźmy do rzeczy... jak przenieść w danym tasku jakiś dodatkowy index?
W dokumentacji jest
set_task ( Float:time, const function[], id = 0, parameter[]="", len = 0, flags[]="", repeat = 0 )
no ale tak skromnie są opisane dane parametry, że nie wiem do czego służy "parameter[]=""" i "len = 0". Czy to właśnie w któryś z nich da się przenieść te dodatkowe informacje? Przeczytałem też set_task - funkcje czasowe - Nieoficjalny polski support AMX Mod X ale jakoś nie bardzo rozumiem na jakiej zasadzie to działa... Trzeba zrobić nową tablicę
new data
potem pod nią
data = attacker
a task dać taki
set_task(2.0, "funcDemageVic", id+GLUTON, data, 1)
i potem id pobrać z id+GLUTON, następnie atakującego z "data"? Czy jednak to wszystko wrzucić do "data"?
Owner123
24.01.2011
new data[1]; data[0] = attacker
Jak sam napisales to musi byc tablica a nie zwykla zmienna.
Edited by Owner123, 24.01.2011 02:05.
mgr inż. Pavulon
24.01.2011
R3X
24.01.2011
jeśli piąty parametr set_task > 0 to funkcja realizująca task dostaje 2 argumenty: kopie tablicy podanej jako czwarty parametr i taskid
public taskZrobCos(data[], taskid){ }
sebul
24.01.2011
No właśnie to czytałem... Może napiszę jakiś przykład i ktoś by napisał, czy będzie dobrzeset_task - funkcje czasowe - Nieoficjalny polski support AMX Mod X
public Damage(id) { // oczywiście wcześniej w public init zdarzenie jest zarejestrowane
if(is_user_connected(id)) {
new weapon, body;
new attacker = get_user_attacker(id, weapon, body);
new data[1];
data[0] = attacker;
set_task(4.0, "funkcja", id, data, 1);
}
}
public funkcja(data[], id) {
data[0] = pid;
client_print(id, print_chat, "Jestes kozak");
client_print(pid, print_chat, "Jestes koks");
}
no powiedzmy, że takie coś... i to będzie działać?
mgr inż. Pavulon
24.01.2011
Pomieszałeś.
public Damage(id) { // oczywiście wcześniej w public init zdarzenie jest zarejestrowane
if(is_user_connected(id)) {
new weapon, body;
new attacker = get_user_attacker(id, weapon, body);
new data[2];
data[0] = attacker;
data[1] = id;
set_task(4.0, "funkcja", id, data, 2);
}
}
public funkcja(data[]) {
new id = data[1];
new pid = data[0];
client_print(id, print_chat, "Jestes kozak");
client_print(pid, print_chat, "Jestes koks");
}
sebul
24.01.2011
A no rzeczywiście Ale takie coś jak R3X nie może być? Czyli id (tego co właśnie dotyczy funkcja 1) bierze z taskid, a "attacker" z tego "data"?
mgr inż. Pavulon
24.01.2011
Może, R3X przecież by nie kłamałAle takie coś jak R3X nie może być?
Po prostu jak używam już tablicy do przekazania parametrów to już z przyzwyczajenie daje w niej wszystko a nie osobno z id task'a.