Schokk, voed, BlackSignature, Анатолий (goldsrc), w0w, F@ntom, fl0wer, Denzer, wopox1337
Плагин для HNS (и подобных) серверов, показывает в HUD чате преследующих игроков (списком в столбик). Список игроков формируется исходя из того, смотря на какую дистанцию (настройка в .sma) вышли преследующие игроки. Если игрок отошел от нужной дистанции, то из списка он пропадет, иначе, если опять появится в нужной зоне дистанции, то попадет вновь в список.
- Изменен client_PreThink на глобальный set_task (чекер)
- Добавлена новая настройка (g_TimeTask - время промежутка между запуском set_task до конца карты)
- Изменена функция func_persecution, убран аргумент id, так как глобальный сет таск не передает его.
- Переработана функция func_persecution с учетом изменений, разделена на две функции.
- Для каждого террориста будет показываться кто его преследует.
- Основные функции будут работать только тогда, когда будет больше 1 игрока на сервере.
- Добавлена поддержка разных языков. (LANG файл)
- Добавлена функция очищающая HUD канал перед новым показом. (от накладывания сообщений друг на друга)
- define ACCOUNTING_BOTS изменен на квар.
- Настройки в виде констант изменены на enum, далее фигурирует в кварах.
- Добавлена поддержка автосоздания CFG
- Убрана поддержка 1.8.3 amxx
- set_task заменен на set_task_ex
- Убран include cstrike, теперь команда игрока узнается с помощью get_user_team, include amxmisc.
- Добавлен enum для индексов команд (избавляемся от магических чисел по коду)
- get_players заменено на get_players_ex
- Добавлены новые переводы в LANG файл: ua, ms
- Изменен порядок отображения в LANG файле языков (расставлено по алфавиту, спасибо: w0w)
- Убрана венгерская нотация по коду. (автор решил пока что ее убрать, так как, еще учит ее, есть недопонимание)
- Изменены названия функций на нормальные.
- Изменены некоторые переменные
- Изменена функция ActionPursuitOne, вычисление координат игрока перенесено во вторую функцию. (спасибо: F@ntom)
- Добавлен глобальный счетчик для проверки когда очищается канал сообщений. (что-бы не очищался когда не нужно)
- Добавлена функция выхода игрока с сервера client_disconnected, для сброса счетчика учета.
- Функция ActionPursuitTwo сделана не public.
- Изменено название элемента enum: c AccountingBots на UseBots (использование ботов, спасибо: fl0wer)
- Добавлена проверка для CheckMsg[TerroristID] = true; в функции ActionPursuitTwo (что бы не устанавливолось если и так true)
- Поправлены некоторые названия кваров.
- Добавлен дефайн РЕЖИМ ХУДА, использовать hud или dhud
- Добавлен квар, отвечающий за то, активировать ли показ инфы при входе на сервер.
- Добавлена возможность использовать команды игроками на вкл/выкл показ инфы. (можно менять(добавлять свои) в конст)
- Добавлена мультиязычность описаний кваров.
- Оставлена только поддержка языков: ru, en.
- Добавлено отображение информации в чат, о вкл/выкл показа преследующих игроков.
- Исправлен хардкод выставления флагов в функции get_players_ex, аттач флагов вынесен в отдельную функцию (thx: Denzer, wopox1337)
- Изменен код, с учетом нового обновления.
new const PLUGIN[] = "HNS-Distance";
new const VERSION[] = "1.1.2";
new const AUTHOR[] = "wellasgood";
new eCvarData[CvarData], bool:CheckMsg[MAX_PLAYERS+1], bool:CheckShow[MAX_PLAYERS+1], GetPlayersFlags:Flags;
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("hns-distance.txt");
//Команды на вкл/выкл показа преследующих игроков. (можно менять/добавлять соблюдая структуру)
new const CMD_OFFON[][] =
for(new i; i < sizeof(CMD_OFFON); i++)
register_clcmd(CMD_OFFON[i], "@CommandHandler");
AutoExecConfig(true, "hns-distance");
set_task_ex(eCvarData[TimeTask], "@ActionPursuitOne", .flags = SetTask_Repeat);
public client_connect(id)
CheckShow[id] = !eCvarData[ShowMode] ? false : true;
public client_disconnected(id)
new PlayersID[MAX_PLAYERS], PlayersCount, TerroristID, CheckTeam;
get_players_ex(PlayersID, PlayersCount, Flags);
for(new i; i < PlayersCount; i++)
CheckTeam = get_user_team(PlayersID[i]);
if(CheckTeam != Team_tt || !CheckShow[PlayersID[i]])
TerroristID = PlayersID[i];
ActionPursuitTwo(TerroristID);
ActionPursuitTwo(TerroristID)
new PlayersID[MAX_PLAYERS], PlayersCount, Origin_tt[3], Origin_ct[3];
new CheckTeam, Float:DisplayingMsg = eCvarData[PlayersHud];
if(CheckMsg[TerroristID])
for(new i; i < ClearNum; i++)
show_dhudmessage(TerroristID, "");
CheckMsg[TerroristID] = false;
get_players_ex(PlayersID, PlayersCount, Flags);
for(new i; i < PlayersCount; i++)
CheckTeam = get_user_team(PlayersID[i]);
if(PlayersID[i] != TerroristID && CheckTeam == Team_ct)
get_user_origin(TerroristID, Origin_tt);
get_user_origin(PlayersID[i], Origin_ct);
if(eCvarData[MinDistance] <= get_distance(Origin_tt, Origin_ct) <= eCvarData[MaxDistance])
set_hudmessage(255, 255, 255, eCvarData[InfoHudTwo], eCvarData[InfoHudOne], 1, 2.6, 2.6, 0.1, eCvarData[TimeHud], -1);
show_hudmessage(TerroristID, "%L", TerroristID, "HNS_LANGUAGE_SUPPORT");
set_hudmessage(0, 128, 0, eCvarData[InfoHudTwo], DisplayingMsg, 1, 2.6, 2.6, 0.1, eCvarData[TimeHud], -1);
show_hudmessage(TerroristID, "%n", PlayersID[i]);
set_dhudmessage(255, 255, 255, eCvarData[InfoHudTwo], eCvarData[InfoHudOne], 1, 2.6, 2.6, 0.1, eCvarData[TimeHud]);
show_dhudmessage(TerroristID, "%L", TerroristID, "HNS_LANGUAGE_SUPPORT");
set_dhudmessage(0, 128, 0, eCvarData[InfoHudTwo], DisplayingMsg, 1, 2.6, 2.6, 0.1, eCvarData[TimeHud]);
show_dhudmessage(TerroristID, "%n", PlayersID[i]);
DisplayingMsg = DisplayingMsg + 0.03;
if(!CheckMsg[TerroristID])
CheckMsg[TerroristID] = true;
Flags = (GetPlayers_ExcludeDead|GetPlayers_ExcludeHLTV);
Flags += GetPlayers_ExcludeBots;
CheckShow[id] = !CheckShow[id];
client_print_color(id, print_team_default, "%l", !CheckShow[id] ? "HNS_SHOW_OFF" : "HNS_SHOW_ON");
bind_pcvar_num(create_cvar(
.description = MULTI_DESC("HNS_DESC_USE_BOTS")),
bind_pcvar_num(create_cvar(
.name = "hns_min_distance",
.description = MULTI_DESC("HNS_DESC_MIN_DIST")),
bind_pcvar_num(create_cvar(
.name = "hns_max_distance",
.description = MULTI_DESC("HNS_DESC_MAX_DIST")),
bind_pcvar_float(create_cvar(
.description = MULTI_DESC("HNS_DESC_TIME_HUD")),
bind_pcvar_float(create_cvar(
.name = "hns_info_hud_one",
.description = MULTI_DESC("HNS_DESC_HUD_ONE")),
bind_pcvar_float(create_cvar(
.name = "hns_info_hud_two",
.description = MULTI_DESC("HNS_DESC_HUD_TWO")),
bind_pcvar_float(create_cvar(
.name = "hns_players_hud",
.description = MULTI_DESC("HNS_DESC_PLAYERS_HUD")),
bind_pcvar_float(create_cvar(
.description = MULTI_DESC("HNS_DESC_TIME_TASK")),
bind_pcvar_num(create_cvar(
.description = MULTI_DESC("HNS_DESC_SHOW_MODE"),