←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Task - wysłanie do funkcji id...

Zablokowany

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 15.06.2012

Witam. Odpalam taska przy uderzeniu gracza, który odpala funkcję zadającą obrażenia.
Jak wysłać taskiem do funkcji id osoby która tego taska nałożyła (zaatakowała gracza)?

Dzięki za pomoc.
Odpowiedz

  • +
  • -
Fryteczq - zdjęcie Fryteczq 15.06.2012

Nie wiem czy zrozumiesz ale ja bym to tak zrobił :)

public funkcja(id,ofiara)
{
nalozyltask[ofiara]=id
set_task(0.5, "funkcja2", ofiara);
}
public funkcja2(id)
{
gracz_atakowany=id
gracz_atakujacy=nalozyltask[id]
}

Użytkownik Fryteczq edytował ten post 15.06.2012 21:47
Odpowiedz

Gość_21977_* 15.06.2012

Automatyczna wiadomość


Ten temat został przeniesiony z forum

AMX Mod X > Pytania

do

Scripting AMXX > Pytania
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 16.06.2012

Fryteczq, nic z Twojego kodu nie da się zrozumieć ;)

Co do tematu. set_task umożliwia zdefiniowanie tablicy o nazwie "data". Jest to tablica, która zostanie przekazana bezpośrednio do funkcji wywołującej task, jednak funkcja musi być następującej konstrukcji:

public funkcja(data[], len) {
ofiara = data[0];
atakujacy = data[1];
}


To jest przykładowa zawartość, dla

new data[2]
data[0] = ofiara
data[1] = atakujacy
set_task(10.0, "funkcja", atakujacy, data, 2);


Jest to jak widać bardzo dobra metoda do podania dowolnych danych do taska, bez używania zmiennych globalnych (które niepotrzebnie zajmują pamięć i mogą być "nadpisane" gdy wywoła się kila tasków dla jednego gracza, zanim pierwszy z nich się wykona). Jest proste, wygodne i zawsze działa ;) Nie otrzymujesz jednak wtedy w tasku zmiennej id, czyli id taska, ale możesz dopisać tą zmienną do tablicy data, jeśli jest Ci potrzebna.
Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 16.06.2012

Dzięki.
A jak dopisać ten unikalny id taska?
Odpowiedz

  • +
  • -
dasiek - zdjęcie dasiek 16.06.2012

dodajesz jakąś tam liczbe do ID wysyłąnego gracza.
np
set_task(10.0, "funkcja", atakujacy+8123, data, 2);

a w funkcji na początku odejmujesz od wsyłanego ID dodaną wartość

public funkcja(id)
{
    id-=8123;
    //cos tam dalej robi
}
Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 16.06.2012

if(player_b_bio[attacker_id]){
if(task_exists(id+TASK_POCISKI_BIO))
remove_task(id+TASK_POCISKI_BIO)
new data[2]
data[0] = id
data[1] = attacker_id
set_task(1.0, "Pociski_bio", attacker_id+TASK_POCISKI_BIO, data, 2, "a", 5);
}

public Pociski_bio(data[], len){
new attacker_id, id
id = data[0];
    attacker_id = data[1];
if(is_user_alive(id)){
ExecuteHam(Ham_TakeDamage, id, 0, attacker_id, 10.0 , 1);
}
}

I jak tu teraz zrobić te unikalne id taska bo ja nie kumam tego.
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 16.06.2012

@Sniper Elite, właśnie to w kodzie masz zrobione, ściślej attacker_id+TASK_POCISKI_BIO daje Ci unikalność taska. Problemy tylko jeden widzę, w if task_exists podajesz attacker_id zamiast id. Tak samo w remove_task.

@CheQ, w ten sposób nie da się pobrać wartości z tablicy data. Albo pobierasz id taska, albo data, innej opcji nie ma.
Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 16.06.2012

Dzięki, już mi wszystko działa.
Odpowiedz

Gość_21977_* 16.06.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany