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

Cykliczne wykonywanie


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
14 odpowiedzi w tym temacie

#1 KillerBee

    Banned

  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

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



#2 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

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


  • +
  • -
  • 0

"Ż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.


#3 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

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").

 



#4 KillerBee

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

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


#5 Leihto

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:452
  • Lokalizacja:Rabka
Offline

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?


  • +
  • -
  • 0
Portek: Za 20zł, to ja nawet notatnika nie otworze..

Nowe portfolio. Ciekawe artykuły, ciekawe przykłady: WojtusDEV.pl

#6 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

Napisano 11.11.2013 18:19

Zamiast add_delay(num, "cos_tam"); daj add_delay(i, "cos_tam"); i wywal zmienną lokalną "num" ;-)



#7 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 11.11.2013 19:14

Uwagi co do kodu: Niepotrzebna zmienna num, bo num przyjmuje wartość taką samą jak i.

Zmienna num nie przyjmuje wartości takiej samej jak i, przed zwiększaniem num masz warunek.
  • +
  • -
  • 0

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


#8 KillerBee

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

Napisano 11.11.2013 20:09

z tego co mi sie wydaje zmienna i jest wieksza od num o 1

 

 



#9 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

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.


  • +
  • -
  • 0

If you can dream it, you can do it.


#10 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

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();
}


#11 KillerBee

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

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



#12 Gość_21977_*

  • Gość

Reputacja: 0

Offline

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


#13 KillerBee

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

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


#14 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

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


#15 KillerBee

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 6
Nowy

  • Postów:36
  • Lokalizacja:Rzeszów
Offline

Napisano 27.11.2013 15:27

a moge zamiast case: 10..32 dac default?






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

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