- Поддерживаемые игры
-
- CS:GO
- CS:Source
API:
Пример плагина использующего хук:
Примечание
Будьте внимательны, индекс нападающего может быть равен -1, если тот покинул игру до взрыва. Лучше использовать энтити гранаты, для определения команды игрока, кинувшего гранату или положения гранаты в пространстве:
В случае блокирования ослепления игрока, событие '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 инструкции), принудительно пропуская указанного игрока при переборе.
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 инструкции), принудительно пропуская указанного игрока при переборе.
- Требования
-
Sourcemod
- Установка
-
-Выбрать нужную версию для скачивания (Windows или Linux)
-Переместить содержимое архива в папку 'csgo'.