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 wywolywaniem funkcji


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

#1 NEQU#

    Wszechpomocny

  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 05.09.2016 17:27

Witam, potrzebuję sposobu aby po użyciu komendy przez public nr.1 co 5 sekund wywoływało public nr.2 aż do użycia komendy z funkcji nr. 2
 
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <zp50_gamemodes>

public plugin_init() 
{
	register_plugin( "Survivor dla ostatniego", "1.0", "Kappa")
}

public zp_user_last_human(id)
{
check_player(id)
}

public check_player(id)
{
	if(zp_get_user_last_human(id) && !zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() == 1 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
{
	zp_make_user_survivor(id)
	//Start wywolywania funkcji co 5 sekund.
	}
}


public disinfect_player(id)
{
	if(!zp_get_user_last_human(id) && zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() >= 2 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
	{
	zp_infect_user(id, 0, 0, 0)
	zp_disinfect_user(id, 0)
	//koniec wywolywania funkcji, aż do ponownego użycia zp_make_user_survivor(id) w publicu nr. 1
	}
}

 


  • +
  • -
  • 0

#2 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 05.09.2016 17:30

set_task()


  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#3 NEQU#

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 05.09.2016 17:44

Dzięki za pomoc, dokumentacja się przydała, czy w ten sposób dobrze zatrzyma taska? oraz czy będzie go wykonywało na graczu na którym została użyta komenda zp_make_user_survivor(id)?

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <zp50_gamemodes>

public plugin_init() 
{
	register_plugin( "Survivor dla ostatniego", "1.0", "Kappa")
}

public zp_user_last_human(id)
{
check_player(id)
}

public check_player(id)
{
	if(zp_get_user_last_human(id) && !zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() == 1 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
{
	zp_make_user_survivor(id)
	set_task(5.0, "disinfect_player(id)", .flags="b")
	}
}


public disinfect_player(id)
{
	if(!zp_get_user_last_human(id) && zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() >= 2 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
	{
	zp_infect_user(id, 0, 0, 0)
	zp_disinfect_user(id, 0)
	remove_task(disinfect_player(id))
	}
}


Użytkownik NEQU# edytował ten post 05.09.2016 17:51

  • +
  • -
  • 0

#4 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 05.09.2016 17:56

Spoiler

Nie.

W dodatku flaga "b" nie jest tu do niczego Ci potrzebna, ponieważ task ( zadanie ) wykona się zaledwie raz, bo z tego co widzę zamierzasz usunąć task.

set_task(Float:time, const function[], id=0, parameter[]="", len=0, flags[]="", repeat=0)

3 parametr funkcji to unikalne id zadania.

Zdefiniuj sobie własne id:

#define task_surv 967

Przyda ci się ono ponieważ, funkcja remove_task wymaga id zadania.

 

Co za tym idzie:

remove_task(task_surv);

Równie dobrze możesz wywołać task tylko raz, wtedy unikniesz dodatkowych operacji ( np. remove ) :)


  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#5 NEQU#

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 05.09.2016 18:04

Spoiler

Nie.

W dodatku flaga "b" nie jest tu do niczego Ci potrzebna, ponieważ task ( zadanie ) wykona się zaledwie raz, bo z tego co widzę zamierzasz usunąć task.

set_task(Float:time, const function[], id=0, parameter[]="", len=0, flags[]="", repeat=0)

3 parametr funkcji to unikalne id zadania.

Zdefiniuj sobie własne id:

#define task_surv 967

Przyda ci się ono ponieważ, funkcja remove_task wymaga id zadania.

 

Co za tym idzie:

remove_task(task_surv);

Równie dobrze możesz wywołać task tylko raz, wtedy unikniesz dodatkowych operacji ( np. remove ) :)

Właśnie nie do końca, zamierzam powtarzać wywoływanie funkcji tak długo aż zostaną spełnione warunki do zamiany człowieka w zombie, następnie w humana.

 

  if(!zp_get_user_last_human(id) && zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() >= 2 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))

 

Czy w ten sposób osiągnę zamierzony efekt?

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <zp50_gamemodes>

#define task_surv 967

public plugin_init() 
{
	register_plugin( "Survivor dla ostatniego", "1.0", "Kappa")
}

public zp_user_last_human(id)
{
check_player(id)
}

public check_player(id)
{
	if(zp_get_user_last_human(id) && !zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() == 1 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
{
	zp_make_user_survivor(id)
	set_task(5.0, "task_surv", .flags="b")
	}
}


public disinfect_player(id)
{
	if(!zp_get_user_last_human(id) && zp_get_user_survivor(id) && (is_user_alive(id)) && zp_core_get_human_count() >= 2 && zp_gamemodes_get_current() == zp_gamemodes_get_id("Infection Mode"))
	{
	zp_infect_user(id, 0, 0, 0)
	zp_disinfect_user(id, 0)
	remove_task(task_surv);
	}
}


Użytkownik NEQU# edytował ten post 05.09.2016 18:11

  • +
  • -
  • 0

#6 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 05.09.2016 18:14

Spoiler

 

Nie bardzo rozumiem co chcesz osiągnąć. W każdym razie oto rozwiązanie twojego problemu:

[...]
#define task_surv 967

[...]

new index = id;
set_task(5.0, "disinfect_player",task_surv,index,sizeof(index),"b")

[...]

remove_task(task_surv);

  • +
  • -
  • 2

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#7 NEQU#

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 05.09.2016 18:35

ostatnisurv_zps9jd3p0re.png

 

W skrócie wyjaśnię co chcę osiągnąć. Załóżmy, że na serwerze jest 5 ludzi, oraz 25 zombie, kiedy 4 zostanie zarażonych ostatni żywy ma zamieniać się w survivora(to już działa), jednak gdy ktoś użyje antidotum(mamy już 2 żyjących) survivor ma zamienić się w zombie, a następnie w zwykłego humana.


  • +
  • -
  • 0

#8 rzeznik9871

    Wszechwidzący

  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:260
Offline

Napisano 05.09.2016 18:50

nie znam sie na ZP, biohazard to moj konik ale zakladam ze jest jakis forward ktory uruchamia sie podczas uzycia antidotum wiec mozesz to tutaj wykonac


  • +
  • -
  • 1

Cześć


#9 NEQU#

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 05.09.2016 18:59

nie znam sie na ZP, biohazard to moj konik ale zakladam ze jest jakis forward ktory uruchamia sie podczas uzycia antidotum wiec mozesz to tutaj wykonac

Item używa natywu

 

/**
 * Turns a player into a human.
 *
 * @param id Player index to be cured.
 * @param attacker Player who triggered the cure. (optional)
 * @return True on success, false otherwise.
 */
native zp_core_cure(id, attacker = 0)
 
Więc to raczej odpada.
 
edit. jednak miałeś rację, jest jeszcze forward wykonywany przy użyciu tego natywu, dziękuję za pomoc.
 
Temat do zamknięcia.

Użytkownik NEQU# edytował ten post 05.09.2016 19:01

  • +
  • -
  • 0




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

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