←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Task przysyłający dodatkowy index

Locked

  • +
  • -
sebul's Photo 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
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"?
Quote

  • +
  • -
Owner123's Photo 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.
Quote

  • +
  • -
R3X's Photo 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){

}
Quote

  • +
  • -
sebul's Photo sebul 24.01.2011

set_task - funkcje czasowe - Nieoficjalny polski support AMX Mod X

No właśnie to czytałem... Może napiszę jakiś przykład i ktoś by napisał, czy będzie dobrze
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ć?
Quote

  • +
  • -
mgr inż. Pavulon's Photo 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");
}
Quote

  • +
  • -
sebul's Photo sebul 24.01.2011

A no rzeczywiście :D 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"?
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 24.01.2011

Ale takie coś jak R3X nie może być?

Może, R3X przecież by nie kłamał :D
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.
Quote

  • +
  • -
sebul's Photo sebul 24.01.2011

No to temat już chyba wyczerpany (czyli można zamknąć). Dzięki za pomoc.
Quote

  • +
  • -
R3X's Photo R3X 24.01.2011

oczywiście, że może być
Quote
Locked