Blind Hook v1.1 (15.04.19)

Управление ослеплением от световых гранат

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

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

        return 
    Plugin_Continue;
    }
    Примечание
    Будьте внимательны, индекс нападающего может быть равен -1, если тот покинул игру до взрыва. Лучше использовать энтити гранаты, для определения команды игрока, кинувшего гранату или положения гранаты в пространстве:
    PHP:
    GetEntProp(inflictorProp_Data"m_iTeamNum");
    GetEntPropVector(inflictorProp_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). Убедитесь, что используете последнюю версию.
    Если ошибка сохраняется, ожидайте обновления. Убедиться, что вы используете правильную версию и проследить за обновлением расширения, вы можете на этой странице:
    [email protected]/sm-blindhook * Wiki page
    Расширение в теории может перевести к падению сервера. Но такое должно происходить только в момент, когда взрывается световая граната. Если это происходит при других условиях, расширение тут не при чем. Исправляется это, обновлением до новой версии, как в предыдущей ошибке.
    Стабильность
    В теории, используемый метод является довольно не надежным, т.к. требует неизменности целого ряда функций игры. Но с момента выхода первой версии (11.02.19) прошло более двух месяцев, и ни одно из обновлений игры не сломало расширение. Проверка корректности работы, производится в кратчайшие сроки, после каждого обновления.
    Принцип работы
    [email protected]/SourceEngine2007 * flashbang_projectile.cpp#L116
    За ослепление игроков, при взрыве гранаты отвечает функция RadiusFlash. Она производит цикличную итерацию по всем игрокам определяя тех, кто находится в зоне поражения гранаты и применяет к ним несколько эффектов (эффект света, эффект ослепления, эффект оглушения звука и др.). Такая организация функций не позволяет воспользоваться стандартными методами перехвата исполнения функций.
    Для получения нужного эффекта, расширение устанавливает патч, встраивающий и перезаписывающий часть кода внутри цикла функции, который перенаправляет поток выполнения функции на функцию внутри расширения. После чего достает необходимые значения переменных из контекста среды и вызывает функцию CS_OnBlindPlayer в SM. Далее в зависимости от возврата функции, или возвращается к тому же месту, где было прерывание или перенаправляет поток в начало цикла для совершения новой итерации (аналог continue инструкции), принудительно пропуская указанного игрока при переборе.
    Установка:
    Переместите содержимое архива в папку 'csgo'.
    kilroy, Lebios321256, TiBarification и 4 другим нравится это.

Пoследние рецензии

  1. Просто Samura
    Просто Samura
    5/5,
    Версия: v1.1 (15.04.19)
    Как всегда отлично!