Blind Hook

Blind Hook v1.3

Нет прав для скачивания
Поддерживаемые игры
  1. CS: GO
API:
PHP:
/**
 * Вызывается, когда световая граната ослепляет игрока.
 * Верните Plugin_Continue, чтобы оставить как есть, или же,
 * верните большое значение (Plugin_Changed, или Plugin_Handled,
 * или Plugin_Stop), чтобы защитить игрока от ослепления.
 *
 * @param client          Индекс игрока, который будет ослеплен.
 * @param attacker        Индекс игрока, который бросил гранату или -1,
 *                          если игрок более не доступен (к примеру вышел
 *                          из игры, пока граната летела).
 * @param inflictor       Индекс энтити, объект гранаты.
 */
forward Action CS_OnBlindPlayer(int client, int attacker, int inflictor);
Пример плагина использующего хук:
PHP:
#include <blindhook>

public Action CS_OnBlindPlayer(int client, int attacker, int inflictor)
{
    // Отключить ослепление самого себя
    if (attacker == client)
        return Plugin_Stop;

    return Plugin_Continue;
}
Примечание
Будьте внимательны, индекс нападающего может быть равен -1, если тот покинул игру до взрыва. Лучше использовать энтити гранаты, для определения команды игрока, кинувшего гранату или положения гранаты в пространстве:
PHP:
GetEntProp(inflictor, Prop_Data, "m_iTeamNum");
GetEntPropVector(inflictor, Prop_Data, "m_vecAbsOrigin", origin);
В случае блокирования ослепления игрока, событие 'player_blind' НЕ БУДЕТ вызвано.
Отладка ошибок
"Unable to read blindhook.games.txt" - вероятно файл "addons/sourcemod/gamedata/blindhook.games.txt" отсутствует.
"Failed to lookup RadiusFlash signature." - вероятно расширение устарело и требует обновления (по причине обновления и изменения самой CS:GO). Убедитесь, что используете последнюю версию.
Если ошибка сохраняется, ожидайте обновления. Убедиться, что вы используете правильную версию и проследить за обновлением расширения, вы можете на этой странице:
GitHub@Kailo97/sm-blindhook * Wiki page
Расширение в теории может перевести к падению сервера. Но такое должно происходить только в момент, когда взрывается световая граната. Если это происходит при других условиях, расширение тут не при чем. Исправляется это, обновлением до новой версии, как в предыдущей ошибке.
Стабильность
В теории, используемый метод является довольно не надежным, т.к. требует неизменности целого ряда функций игры. Но с момента выхода первой версии (11.02.19) прошло более двух месяцев, и ни одно из обновлений игры не сломало расширение. Проверка корректности работы, производится в кратчайшие сроки, после каждого обновления.
Принцип работы
GitHub@VSES/SourceEngine2007 * flashbang_projectile.cpp#L116
За ослепление игроков, при взрыве гранаты отвечает функция RadiusFlash. Она производит цикличную итерацию по всем игрокам определяя тех, кто находится в зоне поражения гранаты и применяет к ним несколько эффектов (эффект света, эффект ослепления, эффект оглушения звука и др.). Такая организация функций не позволяет воспользоваться стандартными методами перехвата исполнения функций.
Для получения нужного эффекта, расширение устанавливает патч, встраивающий и перезаписывающий часть кода внутри цикла функции, который перенаправляет поток выполнения функции на функцию внутри расширения. После чего достает необходимые значения переменных из контекста среды и вызывает функцию CS_OnBlindPlayer в SM. Далее в зависимости от возврата функции, или возвращается к тому же месту, где было прерывание или перенаправляет поток в начало цикла для совершения новой итерации (аналог continue инструкции), принудительно пропуская указанного игрока при переборе.
Установка
Переместите содержимое архива в папку 'csgo'.
Автор
Kailo
Скачивания
546
Просмотры
3,945
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Другие ресурсы пользователя Kailo

Последние обновления

  1. v1.3

    Исправления после обновления CS:GO 1.37.6.9.
  2. v1.2

    Исправления после обновления CS:GO 1.37.6.8.

Последние отзывы

Как всегда отлично!
Сверху