Hide and Seek: Developer Engine Module
Описание: Модуль включает в себя все необходимое для создания своего мода Hide and Seek. По сути, тот же Hide and Seek: Developer Mode, но в наиболее доработанном виде, ну и, конечно же, реализованный как AMXX Модуль, что несомненно делает его оптимальней, чем версия, реализованная на павне.
Поддерживаемые версии HLDS: 5787,6027,6153 (Windows/Linux).
На остальных билдах работа не гарантирована, т.к. тесты проводились именно на перечисленных.
Установка: Закинуть hnsmod_amxx.dll или hnsmod_amxx_i386.so (в зависимости от ОС) в директорию /cstrike/addons/amxmodx/modules/, и в modules.ini добавить строку hnsmod .
[pawn][MAIN]
{
# HNS_FRAG_DURATION - время в секундах, через которое потенциальная жертва фрагера будет лишена защиты.
HNS_FRAG_DURATION = 3
# HNS_TIMER_SECONDS - время таймера, в секундах.
HNS_TIMER_SECONDS = 10
# HNS_SERVER_AA - акселерация на сервере (sv_airaccelerate).
HNS_SERVER_AA = 100
# HNS_BLOCK_MONEY - блокировка изменения HUDа денег.
HNS_BLOCK_MONEY = 1
}
[AUTO JOIN TEAM]
{
# HNS_JOIN_TEAM - принудительный выбор команда. 5 - автовыбор.
HNS_JOIN_TEAM = 5
# HNS_JOIN_CLASS - принудительный выбор класса. 5 - автовыбор.
HNS_JOIN_CLASS = 5
# HNS_CHANGE_BLOCK - запрет смены команды во время игры (1/0).
HNS_CHANGE_BLOCK = 1
}
[ENTITY REMOVED LIST]
{
#СПИСОК ОБЪЕКТОВ, КОТОРЫЕ БУДУТ УДАЛЕНЫ
func_buyzone
info_bomb_target
func_hostage_rescue
monster_scientist
hostage_entity
info_hostage_rescue
func_bomb_target
func_escapezone
info_vip_start
func_vip_safetyzone
armoury_entity
func_breakable
}[/pawn]
{
# HNS_FRAG_DURATION - время в секундах, через которое потенциальная жертва фрагера будет лишена защиты.
HNS_FRAG_DURATION = 3
# HNS_TIMER_SECONDS - время таймера, в секундах.
HNS_TIMER_SECONDS = 10
# HNS_SERVER_AA - акселерация на сервере (sv_airaccelerate).
HNS_SERVER_AA = 100
# HNS_BLOCK_MONEY - блокировка изменения HUDа денег.
HNS_BLOCK_MONEY = 1
}
[AUTO JOIN TEAM]
{
# HNS_JOIN_TEAM - принудительный выбор команда. 5 - автовыбор.
HNS_JOIN_TEAM = 5
# HNS_JOIN_CLASS - принудительный выбор класса. 5 - автовыбор.
HNS_JOIN_CLASS = 5
# HNS_CHANGE_BLOCK - запрет смены команды во время игры (1/0).
HNS_CHANGE_BLOCK = 1
}
[ENTITY REMOVED LIST]
{
#СПИСОК ОБЪЕКТОВ, КОТОРЫЕ БУДУТ УДАЛЕНЫ
func_buyzone
info_bomb_target
func_hostage_rescue
monster_scientist
hostage_entity
info_hostage_rescue
func_bomb_target
func_escapezone
info_vip_start
func_vip_safetyzone
armoury_entity
func_breakable
}[/pawn]
API
INCLUDE ( hns_engine.inc ):
Описание функций найдете в нем.[pawn] #if defined _HNSENGINE_
#endinput
#endif
#define _HNSENGINE_
#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 Нанесенный урон.
*/
forward hns_frag_pre(victim, attacker, Float: damage);
/**
* Вызывается после фактического совершения фрага.
*
* @param victim Индекс жертвы.
* @param attacker Индекс фрагера (убийцы).
* @param damage Нанесенный урон.
*/
forward hns_frag_post(victim, attacker, Float: damage);
/**
* Вызывается до фактического присоединения к команде.
*
* @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);[/pawn]
#endinput
#endif
#define _HNSENGINE_
#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 Нанесенный урон.
*/
forward hns_frag_pre(victim, attacker, Float: damage);
/**
* Вызывается после фактического совершения фрага.
*
* @param victim Индекс жертвы.
* @param attacker Индекс фрагера (убийцы).
* @param damage Нанесенный урон.
*/
forward hns_frag_post(victim, attacker, Float: damage);
/**
* Вызывается до фактического присоединения к команде.
*
* @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);[/pawn]
Отдельное внимание хотелось бы уделить двум нововведениям: два форварда, которые дают возможность контролировать одно неприятное нарушение многих игроков Hide and Seek - фрагерство. Для тех, кто не знает - это когда контр-террорист догнав террориста не отпускает его после первого удара, а добивает и не дает террористу шанс на то, чтобы тот унес свою тушу.
Информация из заголовочного файла:
[pawn]/**
* Вызывается до фактического совершения фрага.
*
* @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);[/pawn]
Покажу вам пример использования данных форвард-функций. Давайте поставим для себя такую задачу - нам нужно защищать админа от фрагерства. В этом случае нам необходимо использовать pre событие, т.к. мы будем блокировать урон:
[pawn]public hns_frag_pre(victim, attacker, Float: damage)
{
if (get_user_flags(victim) & ADMIN_BAN)//если жертва - админ с флагом ADMIN_BAN
{
client_print(attacker, print_chat, "You can not frag an admin.");//выводим нарушителю сообщение, что нельзя фрагерить админа
client_print(victim, print_chat, "Hurry flee!");//выводим жертве сообщение с советом скорее бежать
return HNS_SUPERCEDE;//блокируем урон по жертве
}
return HNS_NORMAL;
}[/pawn]
Поставленная задача решена. : )
Теперь поставим перед собой такую задачу: нам нужно написать вспомогательный плагин, который будет просто уведомлять, что фрагерство на сервере запрещено. В этом случае нам подойдет post событие, ведь блокировать мы ничего не будем:
[pawn]public hns_frag_post(victim, attacker, Float: damage)
{
new szName[32]; get_user_name(attacker, szName, charsmax(szName));//получаем имя нарушителя
client_print(attacker, print_chat, "%s, on this server forbidden frag!", szName);//выводим нарушителю сообщение о том, что фрагерить на сервере запрещено и он получит по попке
}[/pawn]
Собственно, все. Это лишь примеры, все остальное остается на вашей фантазии. : )
Пример реализации эмуляции фризтайма для CT, показ дхуд сообщения с выигравшей командой, а также переформирование команд в случае победы CT уже в архиве.
P.S.: В конфигурационном файле вы можете настроить продолжительность анти-фрага.
Авторы: Eriurias & s1lent
Версия: 2.0.5