Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Problem z przesyłaniem danych przez task


  • Zamknięty Temat jest zamknięty
22 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.03.2014 07:46

Witam.

Mam taki problem.

Po wpisaniu komendy nic się nie dzieje. Myślę, że to wina (moja) przesyłania danych przez task.

Czy to jest poprawne?

 register_clcmd("say /r", "r")
public r()
      restarty(4)
restarty(ile_razy)
{
      new params[1]
      params[0] = ile_razy
      set_task(2.0, "ustawienia", _, params, 1, "a", ile_razy)
}

public ustawienia(parametry[])
{
      new ilosc = parametry[0]
      if(ilosc == 4)
            ZAPISUJ = true
      client_print(0, print_chat, "START")
}


  • +
  • -
  • 0

#2 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 04.03.2014 11:43

Jak chcesz przekazac zmienna typu int to nie wysylaj jako string tego tylko uzyj taskid do przekazania parametru ;)



#3 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 04.03.2014 11:55

Generalnie do przesyłania jednej zmiennej można użyć taskid i tu się zgadzam, ale z tego co wiem, w tasku parametry nie są przekazywane jako string, tylko jako tablica intów, czyli nie jest to zrobione w ten sam sposób jak to mamy w menu w przekazywaniu jednego parametru, który jest tablicą znaków (char).
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#4 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 04.03.2014 12:17

Nie bardzo wiesz o czym mowiesz - parametr do przeslania przez task to zwykla tablica



#5 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 04.03.2014 13:47

parametr do przeslania przez task to zwykla tablica

jako string, tylko jako tablica intów

Czytanie ze zrozumieniem się kłania :) Wszak tablica intów to zwykła tablica, przynajmniej w PAWNie.

Ale niestety gdy przesyłamy taki string czy tablicę na zewnątrz to tu już jest różnica. O ile w tablicy możemy przesłać string to w drugą stronę niekoniecznie, bo mechanizm natywów i forwardów z AMXX utnie komórki tablicy do 1 bajta. Takie coś ma miejsce np w info w menu. No i 2 różnica, że string musi być zakończony zerem (nullem, a nie zerem jako znak ASCII).

A co do przesyłania pojedynczej wartości poprzez ID: jest problem, gdy chcielibyśmy restarty przerwać... jakie ID ma task? wszak ilość restartów się cały czas zmienia, a robić do tego globalną zmienną dodatkowo to kompletny bezsens. Wtedy jest łatwiej przekazać ID stałe, a zmienną w tablicy. Co innego, gdy mamy task per gracz, wtedy ID gracza może wędrować przez ID taska, o ile nie przekazujemy dodatkowo czegoś więcej. Tak samo możemy natrafiać na problem konfliktów ID taska wewnątrz pluginu, dochodzi nam wtedy niewygodne dodawanie i odejmowanie stałych. Lepiej jest przyzwyczaić się do przekazywania parametrów przez tablicę data i mieć spokój. Gdy rozbudowujemy plugin nie trzeba przerabiać tego, bo jeden parametr nam już nie wystarcza, wystarczy powiększyć tablicę.

Wracając do problemu - przecież wewnątrz taska ZAWSZE ile_razy będzie równe tyle samo, bez względu na to który raz się task wywołuje. Chyba nie taki miałeś cel ;)
  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#6 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 04.03.2014 14:48

Nie bardzo wiesz o czym mowiesz - parametr do przeslania przez task to zwykla tablica

No raczej chyba wiem co napisałem ;]
Napisałeś, żeby parametru nie wysyłać jako string, tylko dać go w taskid, no to sprostowałem, to co napisałeś, bo w tasku nie wysyłamy stringa (tablicy charów), tylko właśnie tablicę intów. Akurat to jest jakaś różnica, bo tak jak to wyżej zostało napisane, przy dodawaniu elementów do menu w jednym parametrze możemy przekazać właśnie string (tablicę charów), żeby potem go w handlerze odczytać, a w tasku możemy przekazać tablicę intów, a jak chyba wiesz, char ma dużo mniejszy zakres niż int.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.03.2014 15:28

dzięki za wypracowanie.

Zamierzenie jest takie:
Wywoluje kilka razy w kodzie restarty. Jako parametr podaje 2 potem 3 i potem 4 (w roznych miejscach w kodzie). I teraz chce do publica przeslac ta liczbe (ile razy), po to by ustawic bool:ZAPISUJ na true. Co do taskID to nie będę robil bo nie chce go zatrzymywac itp.

Jak to zrobic?
  • +
  • -
  • 0

#8 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 04.03.2014 16:18

Nie bardzo rozumiem do czego dążycie. W tasku jako parametr można wysłać co się tylko chce, więc w czym problem ?



#9 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.03.2014 16:56

chodzi o naprawienie tego kodu bo nie dziala
  • +
  • -
  • 0

#10 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 04.03.2014 17:11

Nie bardzo rozumiem do czego dążycie. W tasku jako parametr można wysłać co się tylko chce, więc w czym problem ?

to nie wysylaj jako string tego

W tym. Chodziło po prostu o to, że napisałeś "string", a string to tablica charów, a char ma zbyt mały zakres, żeby tak wszystko można było wysyłać, bo dużych wartości byś nie wysłał, jeśli rzeczywiście by tak było.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#11 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.03.2014 18:11

No dobra nie kłóćcie się. Wiem że dążycie do rozwiązania sporu, ale ja mam problem z tym taskiem. Jak to przeslac poprawnie? Bo po wpisaniu komendy nic sie nie dzieje.
sebul (04.03.2014 19:25):
Nikt się tutaj nie kłóci, tylko prowadzimy "dyskusję akademicką" ;]

  • +
  • -
  • 0

#12 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 216
Profesjonalista

  • Postów:467
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 04.03.2014 18:22

 register_clcmd("say /r", "r")

public r()
      restarty(4)

restarty(ile_razy)
{
new data[1]; 
data[0]=ile_razy ;
set_task(2.0,  "ustawienia", .parameter=data, .len=1);
}

public ustawienia(parametry[])
{
      new ilosc = parametry[0]
      if(ilosc == 4)
            ZAPISUJ = true
      client_print(0, print_chat, "START")
}


  • +
  • -
  • 0
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#13 Niide

    *** it I'm done

  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 04.03.2014 18:22

Nie wiem czy dobrze zrozumiałem, ale czy nie lepiej zdefiniować na początku pluginu nowej zmiennej np. "parametr" i potem użyć tego w ten sposób?

new parametr[5];
restarty(ile_razy)
{
      parametr = ile_razy;
      set_task(2.0, "ustawienia", _, _, _, "a", ile_razy)
}

public ustawienia()
{
      if(parametr == 4)
            ZAPISUJ = true
      client_print(0, print_chat, "START")
}

Jeżeli nie (źle zrozumiałem) to minusujcie ile wlezie :D

 

BTW. W Twoim kodzie jest tak, że task uruchomi się ile_razy(=4) z rzędu, nie wiem czy takie było zamierzenie więc nic z tym nie robiłem...


Użytkownik Niidek edytował ten post 04.03.2014 18:31

  • +
  • -
  • -3

kP8HWV.png


#14 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.03.2014 19:46

zamierzenie jest zeby odpalil sie 4 razy pod rzad (zeby byly 4 wiadomosci start).
Nie chce globalnych. Po cos ktos zrobil przesylanie parametrow przez task.

@Xenos
twoj kod wykona sie tylko raz. A ja chce zeby wykonal sie 4 (tyle ile podasz w parametrze funkcji restarty)
  • +
  • -
  • 0

#15 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 216
Profesjonalista

  • Postów:467
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 04.03.2014 21:59

To polecam rekurencje  - użucie funkcji w funkcji z mniejsząjąca się iloscią obrotów
przykład

if(parametr >1)
restarty(parametr-1)

Użytkownik xenos edytował ten post 04.03.2014 22:01

  • +
  • -
  • 0
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#16 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 04.03.2014 22:12

1. Gdy podajemy tablicę z danymi do set task, to nasz task otrzymuje 2 parametry, tą tablicę i jej wielkość (długość). Ty pobierasz tylko jeden z nich i to może być problemem.

 

2. Czy chcesz, żeby przy 4krotnym wywołaniu tasku (ile_razy = 4) do każdego została przekazana liczba 4 czy do 1 wywołania 1, do 2 wywołania 2 itp?

 

3. Jaki cel ma zmienna zapisuj?


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#17 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.03.2014 07:55

ad 1. Czyli co umiescic w naglowku funkcji.
ad 2. Chce zeby task sie wykonal 4 razy (4 razy napis start), ale musze przeslac ile_razy bo chce ustawic zmienna a true.
ad 3. Odpowiada za zapis nvault if(zapisuj) to zacznij zapisywac. (ogolnie to malo istotne w tym momencie)
  • +
  • -
  • 0

#18 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 05.03.2014 11:14

 

Nie bardzo rozumiem do czego dążycie. W tasku jako parametr można wysłać co się tylko chce, więc w czym problem ?

to nie wysylaj jako string tego

W tym. Chodziło po prostu o to, że napisałeś "string", a string to tablica charów, a char ma zbyt mały zakres, żeby tak wszystko można było wysyłać, bo dużych wartości byś nie wysłał, jeśli rzeczywiście by tak było.

 

 

Wciąż nie rozumiem o czym piszesz. Jako parametr w set_task mogę przekazać każdy rodzaj zmiennej dostępnej w PAWNie i nie wiem o jakich zakresach mówisz.

 

Przykład: https://forums.allie...600&postcount=5


Użytkownik Seba edytował ten post 05.03.2014 11:16


#19 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.03.2014 11:52

Ale czy ja napisałem, że nie można? Tak jak już wspomniałem, chodziło tylko o to, że napisałeś "string", czyli tak jakby ograniczyłeś możliwości przekazywania parametru w set_task, a jak wiesz (bo to właśnie napisałeś), parametr ten może przyjmować dużo więcej niż tylko string i o to cały ten "spór". Teraz rozumiesz?


  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#20 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.03.2014 15:34

ad 1.
public ustawienia(data[], len)
ofc nazwy dowolne.

ad 2. Dalej mi nie odpowiedziałeś na pytanie... wywołujesz funkcję restarty z parametrem = 4, ta funkcja odpali 4x task. Do każdego odpalenia tasku zostanie przekazany parametr. Czy chcesz, żeby był to ten sam parametr, czyli do każdego taska pójdzie 4 (co spowoduje 4x zapisanie się danych do nvault) czy chcesz przekazać do każdego taska inny parametr, zwiększany co task, czyli pójdzie po kolei 1 do pierwszego taska, 2 do drugiego itp? Bo to, co Ty zrobiłeś jest równe pierwszemu. Jeśli chcesz 2 musisz zmienić podejście, wywołując set_task kilka razy, np w pętli albo wewnątrz wykonywanego taska.
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych