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

Въведение в PAWN скриптинга и поддръжка за същия.
Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

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

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

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

Код за потвърждение: Избери целия код

public client_putinserver(id)
	set_task(1.25, "regenerate", id, .flags = "b")
	
public client_disconnect(id)
	remove_task(id)
Присъедини се към най-доброто място за игра!
https://emoto2.com/

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

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

Мнение от mi0 » 09 Фев 2020, 15:13

Моля, обясни, какво точно искаш, какво да изчаква?
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

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

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

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

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

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

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

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

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

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

Мнение от mi0 » 09 Фев 2020, 15:57

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

Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

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

Мнение от EMOTO2.COM » 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))
}
Присъедини се към най-доброто място за игра!
https://emoto2.com/

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Добавяне на изчакване на 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)
}
Отностно предишното ми мнение - няма смисъл да обеснявам, ако не си ме разбрал и да ти обесня, няма да го направиш.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

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

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

Благодаря и на двамата!
Иначе повече знания никога не са излишни.
Присъедини се към най-доброто място за игра!
https://emoto2.com/

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Добавяне на изчакване на 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
}
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Скриптиране”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта