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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 7 из 7
  1. #1
    Аватар для StevenH
    Пользователь

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

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

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

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

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

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

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    467
    Репутация:
    13 ±
    За ссылки спасибо, но запутался чуть чуть.
    В моде и ФС подключил #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
    Сообщений
    607
    Репутация:
    289 ±
    Вы смотрели перехват функций, а вам нужен перехват коллбеков.

    Цитата Сообщение от 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
    Аватар для untonyst
    Младший сержант

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

    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;

    Младший сержант Стяжкин | ЧСВ группа в ВКонтакте NEW

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    467
    Репутация:
    13 ±
    Цитата Сообщение от 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Эмм, так зачем что-то перехватывать? Просто прописывайте нужный колбэк, ибо стандартные колбэки идентичны как для мода, так и для скриптов. Всё различие в том, что колбэки скриптов выполняются первыми + в зависимости от того, какое значение в колбэке возвращать в скрипте, будет зависеть то, обработает ли сервер колбэк мода или же оборвёт обработку на колбэке того скрипта, где было возвращено значение. Ну и скрипты обрабатываются по порядку подключения... В общем, ничего не надо перехватывать.
    P.S. А если всё же Вам кажется, что перехват нужен, опишите суть проблемы. Может Вы костыль изобретаете сейчас
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

 

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

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

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

Ваши права

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