PDA

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



$continue$
11.06.2015, 01:32
Приветствую уважаемые посетители Pro - Pawn!
У меня назрел вопрос, пытаюсь перехватить mysql_connect в моде, что бы подключалось в фильтскриптсе (именно надо что бы из мода, прописывать в фильтскриптсе не вариант)


stock interceptor_mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2)
{
print("interceptor | Вызван");
format(string_text, sizeof(string_text), "хост: %s | юзер: %s | база: %s | пароль: %s", host, user, database, password);
return mysql_connect(host, user, database, password, port, autoreconnect, pool_size);
}
#if defined _ALS_mysql_connect
#undef mysql_connect
#else
#define _ALS_mysql_connect
#endif
#define mysql_connect breaking_mysql_connect
public OnGameModeInit()
{
print("OnGameModeInit | Вызван");
//mysql_connect(SQL_CONNECT_INFO);
#if defined spd__OnGameModeInit
return interceptor__OnGameModeInit();
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit spd__OnGameModeInit
#if defined interceptor__OnGameModeInit
forward interceptor__OnGameModeInit();
#endif

Вот так вот не перехватывает, как такое реализовать?

Пельмень
11.06.2015, 11:58
#if defined _ALS_mysql_connect
Нет тут _ALS_
Это простая функция..


stock my_mysql_connect(...) {}
#define mysql_connect my_mysql_connect

Daniel_Cortez
11.06.2015, 12:49
stock interceptor_mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2)






#define mysql_connect breaking_mysql_connect







return interceptor__OnGameModeInit();






#define OnGameModeInit spd__OnGameModeInit




Вот так вот не перехватывает
А оно и не должно. С префиксами перехватчиков определитесь.
И желательно, чтобы этим префиксом было не просто слово "перехватчик", прогнанное через машинный перевод, а что-то связанное с выполняемой им работой (см. урок по перехватам).




#if defined _ALS_mysql_connect
Нет тут _ALS_
Это простая функция..


stock my_mysql_connect(...) {}
#define mysql_connect my_mysql_connect
Твоим способом можно перехватить функцию только один раз.
Если перехватишь OnGameModeInit, то после тебя больше ни один инклуд не сможет её перехватить.
К прочтению:

http://pro-pawn.ru/showthread.php?10447
http://pro-pawn.ru/showthread.php?10611