Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Help с античитом (ФС) || Перехват

    Всем привет. Пытаюсь написать античит на FS, но вот проблемка.
    Например в ФС мне нужен паблик OnPlayerConnect ИЗ САМОГО мода (но не ФС), как так сделать?
    Читал что можно как то с помощью перехватов, но так и не получилось.

    UPD: ещё как то с помощью инклудов делают.. там что ли эти "перехваты"
    Последний раз редактировалось StevenH; 31.12.2015 в 04:05.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±

  3. Пользователь сказал cпасибо:
    StevenH (31.12.2015)
  4. #3
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    За ссылки спасибо, но запутался чуть чуть.
    В моде и ФС подключил #include <anticheat>
    В инклуде сделал:
    PHP код:
    stock ac_OnPlayerEnterVehicle(playeridvehicleidispassenger) return CallRemoteFunction("ac_OnPlayerEnterVehicle""ddd"playeridvehicleidispassenger);

    #if defined _ALS_OnPlayerEnterVehicle
        #undef    OnPlayerEnterVehicle
    #else
        #define    _ALS_OnPlayerEnterVehicle
    #endif
    #define    OnPlayerEnterVehicle    ac_OnPlayerEnterVehicle 
    В ФС:
    PHP код:
    #include <a_samp>
    #include <anticheat>

    forward ac_OnPlayerEnterVehicle(playeridvehicleidispassenger);
    public 
    ac_OnPlayerEnterVehicle(playeridvehicleidispassenger)
    {
        
    SetPVarInt(playerid"AC_AirBreak"65);
        print(
    "Hamilton_AC: OnPlayerConnect загружен!");
        return 
    true;

    Ошибка:
    PHP код:
    error 021symbol already defined"ac_OnPlayerEnterVehicle" 
    Что я не так делаю?
    Последний раз редактировалось StevenH; 31.12.2015 в 02:14.

  5. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Вы смотрели перехват функций, а вам нужен перехват коллбеков.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Перехват коллбэков реализуется следующим образом:
      Открыть/закрыть
    PHP код:
    // CallbackFunc - название перехватываемой функции
    // param1, param2 - параметры перехватываемой функции
    public CallbackFunc(param1param2)
    {
    // здесь место для Вашего кода, ради которого и осуществляется перехват
    // ...

    // если перехватываемая функция существует - нужно вызвать и её,
    // после чего вернуть значение, которая вернёт перехватываемая функция
    // (LibName - название Вашей библиотеки (в случае с Pawn - инклуда),
    // в котором перехватывается функция CallbackFunc)
    #if defined LibName__CallbackFunc
    return Libname__CallbackFunc(param1param2);
    #endif
    }

    // если объявлен макрос с префиксом "_ALS_" и именем функции после него -
    // это значит, что такая функция уже была где-то перехвачена

    // если функция CallbackFunc уже была перехвачена - уберём макрос, сделанный
    // в предыдущем перехвате (назначение этого макроса будет объяснено далее)
    #if defined _ALS_CallbackFunc
    #undef CallbackFunc

    // если же функция ещё не была перехвачена,
    // дадим знать о её перехвате, объявив макрос "_ALS_CallbackFunc"
    #else
    #define _ALS_CallbackFunc
    #endif 

  6. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Нельзя задавать двум функциям одно и то же название. Кроме того, вы не правильно используете технику перехватов. У вас же не нативная функция, а каллбэк.

    PHP код:
    public OnPlayerEnterVehicle(playeridvehicleidispassenger
    {
        
    /*
        никогда не работал с фс, да и с этой функцией,
        но нельзя вызвать ее напрямую?
        
        ac_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
        */
        
        
    CallRemoteFunction("ac_OnPlayerEnterVehicle""ddd"playeridvehicleidispassenger);
    #if defined hook__OnPlayerEnterVehicle
        
    hook__OnPlayerEnterVehicle(playeridvehicleidispassenger);
    #endif
        
    return 1;
    }
    #if defined _ALS_OnPlayerEnterVehicle
        #undef OnPlayerEnterVehicle
    #else
        #define _ALS_OnPlayerEnterVehicle
    #endif
    #define OnPlayerEnterVehicle hook__OnPlayerEnterVehicle
    #if defined hook__OnPlayerEnterVehicle
    forward hook__OnPlayerEnterVehicle(playeridvehicleidispassenger);
    #endif

    forward ac_OnPlayerEnterVehicle(playeridvehicleidispassenger);
    public 
    ac_OnPlayerEnterVehicle(playeridvehicleidispassenger)
    {
        
    SetPVarInt(playerid"AC_AirBreak"65);
        print(
    "Hamilton_AC: OnPlayerConnect загружен!");
        return 
    true;


  7. #6
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Нельзя задавать двум функциям одно и то же название. Кроме того, вы не правильно используете технику перехватов. У вас же не нативная функция, а каллбэк.

    PHP код:
    public OnPlayerEnterVehicle(playeridvehicleidispassenger
    {
        
    /*
        никогда не работал с фс, да и с этой функцией,
        но нельзя вызвать ее напрямую?
        
        ac_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
        */
        
        
    CallRemoteFunction("ac_OnPlayerEnterVehicle""ddd"playeridvehicleidispassenger);
    #if defined hook__OnPlayerEnterVehicle
        
    hook__OnPlayerEnterVehicle(playeridvehicleidispassenger);
    #endif
        
    return 1;
    }
    #if defined _ALS_OnPlayerEnterVehicle
        #undef OnPlayerEnterVehicle
    #else
        #define _ALS_OnPlayerEnterVehicle
    #endif
    #define OnPlayerEnterVehicle hook__OnPlayerEnterVehicle
    #if defined hook__OnPlayerEnterVehicle
    forward hook__OnPlayerEnterVehicle(playeridvehicleidispassenger);
    #endif

    forward ac_OnPlayerEnterVehicle(playeridvehicleidispassenger);
    public 
    ac_OnPlayerEnterVehicle(playeridvehicleidispassenger)
    {
        
    SetPVarInt(playerid"AC_AirBreak"65);
        print(
    "Hamilton_AC: OnPlayerConnect загружен!");
        return 
    true;

    Оу, работает! Спасибо. Но теперь проблемка в другом.
    В ФС этот паблик вызывается 2 раза!

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, так зачем что-то перехватывать? Просто прописывайте нужный колбэк, ибо стандартные колбэки идентичны как для мода, так и для скриптов. Всё различие в том, что колбэки скриптов выполняются первыми + в зависимости от того, какое значение в колбэке возвращать в скрипте, будет зависеть то, обработает ли сервер колбэк мода или же оборвёт обработку на колбэке того скрипта, где было возвращено значение. Ну и скрипты обрабатываются по порядку подключения... В общем, ничего не надо перехватывать.
    P.S. А если всё же Вам кажется, что перехват нужен, опишите суть проблемы. Может Вы костыль изобретаете сейчас
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. 3 пользователя(ей) сказали cпасибо:
    $continue$ (01.01.2016) Desulaid (01.01.2016) Nexius_Tailer (04.01.2016)
 

 

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

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

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

Ваши права

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