Вход

Просмотр полной версии : [Вопрос] Перехват пабликов



Guldan
21.02.2017, 01:40
Сильно ли повлияет на оптимизацию если перехватить паблик к примеру OnPlayerConnect перехватить 100 и более раз (не только этот понадобится перехватывать)

методом Daniel_Cortez

VVWVV
21.02.2017, 02:01
На оптимизацию влияет и код в этих пабликах.

Если у вас свой проект, то ИМХО, лучше вызывать функции из паблика, чем использовать перехваты (пример, Open-GTO).

Guldan
21.02.2017, 02:05
Есть ли идеи по написанию мода на модулях

ziggi
21.02.2017, 08:55
Влияет, но не сильно. Далеко не так, чтобы это нужно было оптимизировать. Займитесь лучше оптимизацией своих алгоритмов, вот они почти у всех реально тормознутые.


Если у вас свой проект, то ИМХО, лучше вызывать функции из паблика, чем использовать перехваты (пример, Open-GTO).

Open-GTO потихоньку тоже переходит на перехваты.

Daniel_Cortez
21.02.2017, 08:57
Это не мой метод -_-
В моей статье просто приведён пересказ статьи Y_Less'а (Hook Method 7) и добавлено несколько рекомендаций, которых не было в оригинале.

Касаемо самого вопроса, 100+ перехватов - не многовато ли? Зачем вам столько?

vovandolg
21.02.2017, 12:55
какая разница сколько перехватов,
они все если и будут влиять то только на скорость компиляции
(будет компилятор тужится слегка читать дерективы че по чем куда по сколько):dirol:

DeimoS
21.02.2017, 13:35
какая разница сколько перехватов,
они все если и будут влиять то только на скорость компиляции
(будет компилятор тужится слегка читать дерективы че по чем куда по сколько):dirol:

Не только. Каждый перехват - отдельная функция, которая возвращает оригинал или следующий перехват. Следовательно, уже, как минимум, два дополнительных действия (возврат + вызов другой функции).

Но это всё не существенно в сравнении с теми удобствами, что дают перехваты. Хотя строить модульный мод на перехватах - такая себе идея. В случае с перехватами довольно тяжело контролировать порядок вызова функций в ситуациях, когда это действительно важно. Особенно если код впоследствии будет разбирать кто-то другой. Лучше уж для каждого коллбэка в модуле создавать свою функцию и вызывать её в нативном моде, как это в Open-GTO сделано.
А если нужно убрать зависимость от подключаемых инклудов, то тут на помощь придут директивы препроцессора, а-ля:

public OnGameModeInIt()
{
#if defined TestFunc
TestFunc();
#endif
return 1;
}
И никаких проблем с компиляцией при отключении модуля, в котором находится "TestFunc", не будет