Добавяне на изчакване на set_task

Въведение в PAWN скриптинга и поддръжка за същия.
Заключена
Потребителски аватар

Автор на темата
EMOTO2.COM emoto2
Потребител
Потребител
Мнения: 93
Регистриран: 11 яну 2018, 17:02
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Контакти:

Добавяне на изчакване на set_task

Мнение от EMOTO2.COM emoto2 » 09 фев 2020, 14:41

Здравейте, какъв ще е най-добрия вариянт да се направи за изчакване преди да се активира вече съществуващ таск?

Код: Избери всички

public client_putinserver(id)
	set_task(1.25, "regenerate", id, .flags = "b")
	
public client_disconnect(id)
	remove_task(id)

Потребителски аватар

mi0 еГъ
AMXX Скриптър
AMXX Скриптър
Мнения: 439
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 91 пъти
Получена благодарност: 98 пъти
Години: 26
Контакти:

Добавяне на изчакване на set_task

Мнение от mi0 еГъ » 09 фев 2020, 15:13

Моля, обясни, какво точно искаш, какво да изчаква?
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Автор на темата
EMOTO2.COM emoto2
Потребител
Потребител
Мнения: 93
Регистриран: 11 яну 2018, 17:02
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Контакти:

Добавяне на изчакване на set_task

Мнение от EMOTO2.COM emoto2 » 09 фев 2020, 15:26

Конкретно става въпрос за регенериране на кръв за зомби. В момента започва да си регенерирва на всеки 1.25 секунди Х количество но на мен ми трябва да се изчака допълнително време до първоначалното регенериране.
Пример в момента: 1.25 --> 1.25 --> 1.25
Пример който желая: 3.25 --> 1.25 --> 1.25

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5846
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 107 пъти
Получена благодарност: 714 пъти
Години: 22
Контакти:

Добавяне на изчакване на set_task

Мнение от OciXCrom TM » 09 фев 2020, 15:35

Задай го първо на 3.25. След това ползвай change_task за да го промениш на 1.25.

Потребителски аватар

mi0 еГъ
AMXX Скриптър
AMXX Скриптър
Мнения: 439
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 91 пъти
Получена благодарност: 98 пъти
Години: 26
Контакти:

Добавяне на изчакване на set_task

Мнение от mi0 еГъ » 09 фев 2020, 15:57

Бих ползвал m_idrowndmg, като при набит DMG, ще го увеличавам, за да се регенерира до първоначалната стойност.
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Автор на темата
EMOTO2.COM emoto2
Потребител
Потребител
Мнения: 93
Регистриран: 11 яну 2018, 17:02
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Контакти:

Добавяне на изчакване на set_task

Мнение от EMOTO2.COM emoto2 » 09 фев 2020, 17:50

mi0 написа:
09 фев 2020, 15:57
Бих ползвал m_idrowndmg, като при набит DMG, ще го увеличавам, за да се регенерира до първоначалната стойност.
Малко ме обърка, до колкото разбирам няма да има нужда от таск-а при този метод. Но как би се получило в целия код?

Код: Избери всички

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <zombie_plague_reload>

new const zclass3_name[] = { "Enemy zombie" }
new const zclass3_info[] = { "Human skin" }
new const zclass3_model[] = { "gign" }
new const zclass3_clawmodel[] = { "knife_enemy.mdl" }
const zclass3_health = 2000
const zclass3_speed = 280
const Float:zclass3_gravity = 1.0
const Float:zclass3_knockback = 1.0
new g_izclass3

public plugin_init()
{
	register_plugin("Enemy zombie", "1.2", "MeRcyLeZZ")
}

public plugin_precache()
{
	g_izclass3 = zp_register_zombie_class(zclass3_name, zclass3_info, zclass3_model, zclass3_clawmodel, zclass3_health, zclass3_speed, zclass3_gravity, zclass3_knockback)
}

public client_putinserver(id)
{
	set_task(1.25, "regenerate", id, .flags = "b")
}
	
public client_disconnect(id)
{
	remove_task(id)
}
	
public regenerate(id)
{
	if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_izclass3)
		return
		
	new iHealth = get_user_health(id)
	
	if(iHealth >= zclass3_health)
		return
		
	set_user_health(id, clamp(iHealth + 1, .max = zclass3_health))
}

Потребителски аватар

mi0 еГъ
AMXX Скриптър
AMXX Скриптър
Мнения: 439
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 91 пъти
Получена благодарност: 98 пъти
Години: 26
Контакти:

Добавяне на изчакване на set_task

Мнение от mi0 еГъ » 09 фев 2020, 20:15

Предполагам това е, каквото търсиш

Код: Избери всички

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <zombie_plague_reload>

new const zclass3_name[] = { "Enemy zombie" }
new const zclass3_info[] = { "Human skin" }
new const zclass3_model[] = { "gign" }
new const zclass3_clawmodel[] = { "knife_enemy.mdl" }
const zclass3_health = 2000
const zclass3_speed = 280
const Float:zclass3_gravity = 1.0
const Float:zclass3_knockback = 1.0
new g_izclass3

public plugin_init()
{
	register_plugin("Enemy zombie", "1.2", "MeRcyLeZZ")
	RegisterHam(Ham_TakeDamage, "player", "OnTakeDamage")
}

public plugin_precache()
{
	g_izclass3 = zp_register_zombie_class(zclass3_name, zclass3_info, zclass3_model, zclass3_clawmodel, zclass3_health, zclass3_speed, zclass3_gravity, zclass3_knockback)
}

public client_putinserver(id)
{
	set_task(1.25, "regenerate", id, .flags = "b")
}
	
public client_disconnect(id)
{
	remove_task(id)
}

public OnTakeDamage(id)
{
	if (task_exists(id))
	{
		change_task(id, 3.25)
	}
}
	
public regenerate(id)
{
	if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_izclass3)
		return
		
	new iHealth = get_user_health(id)
	
	if(iHealth >= zclass3_health)
		return
		
	set_user_health(id, clamp(iHealth + 1, .max = zclass3_health))

	change_task(id, 1.25)
}
Отностно предишното ми мнение - няма смисъл да обеснявам, ако не си ме разбрал и да ти обесня, няма да го направиш.
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Автор на темата
EMOTO2.COM emoto2
Потребител
Потребител
Мнения: 93
Регистриран: 11 яну 2018, 17:02
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Контакти:

Добавяне на изчакване на set_task

Мнение от EMOTO2.COM emoto2 » 10 фев 2020, 06:32

Благодаря и на двамата!
Иначе повече знания никога не са излишни.

Потребителски аватар

mi0 еГъ
AMXX Скриптър
AMXX Скриптър
Мнения: 439
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 91 пъти
Получена благодарност: 98 пъти
Години: 26
Контакти:

Добавяне на изчакване на set_task

Мнение от mi0 еГъ » 10 фев 2020, 09:38

EMOTO2.COM написа:
10 фев 2020, 06:32
Иначе повече знания никога не са излишни.
Щом си мераклия да учиш, ще обеснявам :clap:
m_idrowndmg - е променлива, която се използва, за да се възвърне кръвта на играч, който се дави, след излизането му от водата.
Ето тук го има това, за което говоря, надявам се да работи. Въпреки това, идеята е да видиш, какво трябва да се случи, а не да работи. :д

Код: Избери всички

#include <amxmodx>
#include <reapi>
#include <zombieplague>

new const zclass3_name[] = { "Enemy zombie" }
new const zclass3_info[] = { "Human skin" }
new const zclass3_model[] = { "gign" }
new const zclass3_clawmodel[] = { "knife_enemy.mdl" }
const zclass3_health = 2000
const zclass3_speed = 280
const Float:zclass3_gravity = 1.0
const Float:zclass3_knockback = 1.0

new g_iZombieID // Declare variable to store the zombie ID

public plugin_init()
{
	register_plugin("Enemy zombie", "1.2", "MeRcyLeZZ Edit mi0")
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "OnTakeDamage", 1) // Register TakeDamage Event
}

public plugin_precache()
{
	g_iZombieID = zp_register_zombie_class(zclass3_name, zclass3_info, zclass3_model, zclass3_clawmodel, 
		zclass3_health, zclass3_speed, zclass3_gravity, zclass3_knockback) // Registering the zombie
}

// Check whether the player has drowndmg and if so removeing it so it doesnt heal him while he is human
public zp_user_humanized_post(id)
{
	if (zp_get_user_zombie(id)) // If the player is zombie we dont need to remove it
	{
		return
	}

	new iDrownDMG = get_member(id, m_idrowndmg) 
	if (iDrownDMG > 0) // If the drowndmg is bigger than 0
	{
		set_member(id, m_idrowndmg, 0) // Set the drowndmg to 0
	}
}

public OnTakeDamage(id, iInf, iAttacker, Float:fDmg)
{
	if (zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_iZombieID) // Check if the player is zombie and if he is check whether that zombie is the regen one or not
	{
		return
	}

	set_member(id, m_idrowndmg, get_member(id, m_idrowndmg) + floatround(fDmg)) // Set the drowndmg to the previous + the dmg
}
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Заключена

Върни се в “Скриптиране”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост