 #if defined _HNSENGINE_
    #endinput
 #endif

 #define _HNSENGINE_
 
 #if AMXX_VERSION_NUM >= 175
    #pragma reqlib hnsmod
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib hnsmod
    #endif
 #else
    #pragma library hnsmod
 #endif

 #define HNS_NORMAL 1
 #define HNS_SUPERCEDE 2

 enum HnsTeams
 {
	HNS_DRAW_OR_UNASSIGNED,
	HNS_TEAM_T,
	HNS_TEAM_CT,
	HNS_TEAM_SPECTATOR
 };

/**
 * Вызывается, когда раунд заканчивается в пользу той или иной команды или вничью.
 *
 * @param team			Победившая команда.
 */
 forward hns_round_end(HnsTeams:team);

/**
 * Вызывается, когда таймер закончен и CT начинают действовать.
 *
 * @param index         Индекс игрока.
 */
 forward hns_round_start(index);
 
/**
 * Вызывается в процессе таймера.
 *
 * @param index         Индекс игрока.
 * @param time          Секунды таймера.
 */
 forward hns_timer_process(index, time);
 
/**
 * Вызывается после смены команды игрока, произведенной нативой hns_switch_teams().
 *
 * @param index         Индекс игрока.
 * @param team			Новая команда игрока.
 */
 forward hns_became_team(index, HnsTeams:team);
 
/**
 * Вызывается когда в опр. команде остается один игрок.
 *
 * @param index         Индекс игрока.
 * @param team          Команда игрока.
 */
 forward hns_player_loner(index, HnsTeams:team);

 /**
 * Вызывается до фактического совершения фрага.
 *
 * @param victim		Индекс жертвы.
 * @param attacker		Индекс фрагера (убийцы).
 * @param damage		Нанесенный урон.
 * @param time          Оставшееся время действия анти-фрага.
 */
 forward hns_frag_pre(victim, attacker, Float: damage, time);

 /**
 * Вызывается после фактического совершения фрага.
 *
 * @param victim		Индекс жертвы.
 * @param attacker		Индекс фрагера (убийцы).
 * @param damage		Нанесенный урон.
 * @param time          Оставшееся время действия анти-фрага.
 */
 forward hns_frag_post(victim, attacker, Float: damage, time);
 
 /**
 * Вызывается до фактического присоединения к команде.
 *
 * @param index		Индекс игрока.
 */
 forward hns_jointeam_pre(index);

 /**
 * Вызывается после фактического присоединения к команде.
 *
 * @param index		Индекс игрока.
 */
 forward hns_jointeam_post(index);
    


/**
 * Функция предназначена для переформирования команд, а именно изменения их местами.
 */
 native hns_switch_teams();
 
 /**
 * Функция возвращает истину, если имеется состав обеих команд.
 */
 native bool:hns_get_gamestarted();
 
 /**
 * Функция возвращает кол-во  игроков в опр. команде.
 *
 * @param team			Необходимая команда.
 * @param alive			Брать в рассчет только живых игроков (по умолчанию: false).
 */
 native hns_get_playersnum(HnsTeams:team, bool: alive = false);

 /**
 * Функция позволяет изменять команду игрокам.
 *
 * @param index			Индекс игрока.
 * @param team			Новая команда игрока.
 */
 native hns_set_user_team(index, HnsTeams:team);

 /**
 * Функция возвращает команду игрока.
 *
 * @param index			Индекс игрока.
 */
 native HnsTeams: hns_get_user_team(index);
 
 /**
 * Функция позволяет ослеплять игрока или наоборот, убирать ослепление.
 *
 * @param index			Индекс игрока.
 * @param status	    Состояние (true/false).
 */
 native hns_set_screenfade(index, bool: status);
 
 /**
 * Функция позволяет изменять время защиты анти-фрага для опр. игрока.
 *
 * @param index			Индекс игрока.
 * @param second	    Время в секундах.
 */
 native hns_set_frag_protect(index, second);