Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3

Тема: Перехваты

  1. #1
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±

    Перехваты

    Приветствую уважаемые посетители Pro - Pawn!
    У меня назрел вопрос, пытаюсь перехватить mysql_connect в моде, что бы подключалось в фильтскриптсе (именно надо что бы из мода, прописывать в фильтскриптсе не вариант)
    PHP код:
    stock interceptor_mysql_connect(const host[], const user[], const database[], const password[], port 3306bool:autoreconnect truepool_size 2)
    {
        print(
    "interceptor | Вызван");
        
    format(string_textsizeof(string_text), "хост: %s | юзер: %s | база: %s | пароль: %s"hostuserdatabasepassword);
        return 
    mysql_connect(hostuserdatabasepasswordportautoreconnectpool_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 
    Вот так вот не перехватывает, как такое реализовать?

  2. #2
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    PHP код:
    #if defined _ALS_mysql_connect 
    Нет тут _ALS_
    Это простая функция..

    PHP код:
    stock my_mysql_connect(...) {}
    #define mysql_connect my_mysql_connect 

  3. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Код:
    stock interceptor_mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2)
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Код:
    #define mysql_connect breaking_mysql_connect
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Код:
        return interceptor__OnGameModeInit();
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Код:
    #define    OnGameModeInit    spd__OnGameModeInit
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Вот так вот не перехватывает
    А оно и не должно. С префиксами перехватчиков определитесь.
    И желательно, чтобы этим префиксом было не просто слово "перехватчик", прогнанное через машинный перевод, а что-то связанное с выполняемой им работой (см. урок по перехватам).


    Цитата Сообщение от Пельмень Посмотреть сообщение
    PHP код:
    #if defined _ALS_mysql_connect 
    Нет тут _ALS_
    Это простая функция..

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

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •