/*================================================================================

	-----------------------------------
	-*- [ZP] Extra Item: Tryder -*-
	-----------------------------------

	Allows humans to buy temporary invincibility.

================================================================================*/

#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <zombie_plague_special>

#define PLUGIN_NAME		"[ZP] Extra Item: Tryder"
#define PLUGIN_VERSION	"1.0"
#define PLUGIN_AUTHOR	"Kimi Code"

#define ITEM_NAME		"Tryder"
#define ITEM_COST		15
#define ITEM_TEAM		ZP_TEAM_HUMAN
#define TRYDER_TIME		10.0	// seconds of invincibility

new g_iItemID
new bool:g_bTryder[MAX_PLAYERS + 1]
new g_iTaskOffset

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	g_iItemID = zp_register_extra_item(ITEM_NAME, ITEM_COST, ITEM_TEAM)
	g_iTaskOffset = get_maxplayers() + 1
	
	register_event("Damage", "event_damage", "be", "2!0", "3=0", "4!0")
}

public client_disconnected(id)
	g_bTryder[id] = false

public zp_extra_item_selected(id, itemid)
{
	if(itemid != g_iItemID)
		return PLUGIN_CONTINUE
	
	if(zp_get_user_zombie(id))
	{
		client_print(id, print_chat, "[ZP] Zombies can't buy this item.")
		return PLUGIN_HANDLED
	}
	
	if(g_bTryder[id])
	{
		client_print(id, print_chat, "[ZP] You already have Tryder active.")
		return PLUGIN_HANDLED
	}
	
	g_bTryder[id] = true
	set_task(TRYDER_TIME, "disable_tryder", id + g_iTaskOffset)
	client_print(id, print_chat, "[ZP] Tryder activated for %.0f seconds!", TRYDER_TIME)
	return PLUGIN_CONTINUE
}

public zp_user_infected_post(id, infector)
{
	g_bTryder[id] = false
	remove_task(id + g_iTaskOffset)
}

public event_damage(id)
{
	if(!g_bTryder[id] || !is_user_alive(id))
		return PLUGIN_CONTINUE
	
	new iAttacker = get_user_attacker(id)
	if(is_user_connected(iAttacker) && iAttacker != id)
	{
		// Block the damage by restoring health
		new iHealth = get_user_health(id)
		new iDamage = read_data(2)
		set_user_health(id, iHealth + iDamage)
	}
	return PLUGIN_CONTINUE
}

public disable_tryder(taskid)
{
	new id = taskid - g_iTaskOffset
	g_bTryder[id] = false
	
	if(is_user_connected(id))
		client_print(id, print_chat, "[ZP] Tryder expired.")
}
