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

    Статус
    Оффлайн
    Регистрация
    18.08.2016
    Сообщений
    52
    Репутация:
    2 ±

    Для чего нужно перехватывать функцию и что такое "&" перед параметром функции?

    Доброе время суток, учу перехват, в общем не могу понять.
    Перехват нужен для того что бы изменить изменить поведение функции, почему нельзя сделать допустим так?


    PHP код:
    new Health[MAX_PLAYERS];

    stock SetPlayerHealthEx(playeridFloat:Health)
    {
         
    PHealth[playerid] = Health;
         return 
    SetPlayerHealth(playeridHealth);

    И еще вопрос зачем ставят знак & перед Float, пример: SetPlayerHealthEx(playerid, &Float:Health)

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

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    193
    Репутация:
    26 ±
    Цитата Сообщение от Son of the Moon Посмотреть сообщение
    Доброе время суток, учу перехват, в общем не могу понять.
    Перехват нужен для того что бы изменить изменить поведение функции, почему нельзя сделать допустим так?


    PHP код:
    new Health[MAX_PLAYERS];

    stock SetPlayerHealthEx(playeridFloat:Health)
    {
         
    PHealth[playerid] = Health;
         return 
    SetPlayerHealth(playeridHealth);

    И еще вопрос зачем ставят знак & перед Float, пример: SetPlayerHealthEx(playerid, &Float:Health)
    &float - ссылка. Это значит, что вместо &float нужно указать переменную, в которую будет записано значение.
    PHP код:
    new Float:PlayerHealth[MAX_PLAYERS];

    stock SetPlayerHealthEx(playerid, &Float:Health)
    {
         
    PlayerHealth[playerid] = Health;
         return 
    SetPlayerHealth(playeridHealth);


  3. #3
    Аватар для Витёк
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.09.2015
    Сообщений
    215
    Репутация:
    1 ±
    Код:
    //допустим мы перехватываем функцию SetPlayerPos
    stock SetPlayerPosEx(playerid, Float:X,Float:Y,Float:Z) //SetPlayerPosEx - название перехватчика
    {
            //Функции,которые вам необходимо вызывать вместе с SetPlayerPos
            //Допустим записать координаты, для анти-чита на телепорт
            return SetPlayerPos(playerid, X,Y,Z); //Вызываем перехватываемую функцию
            
    }
    #if defined _ALS_SetPlayerPos // Проверяем, если функция уже перехвачена, то...
            #undef SetPlayerPos // Раздефайневаем/удаляем функцию. Также, если вы уже использовали перехват с префиксом _ALS_,то старый перехват тоже удалится
    #else // Если функция с префиксом _ALS_ еще не перехвачена...
            #define _ALS_SetPlayerPos // Перехватываем функцию
    #endif //Заканчиваем перехват
    #define SetPlayerPos SetPlayerPosEx // Даем знать, что теперь функция SetPlayerPos будет использоваться, как SetPlayerPosEx
    Таким образом мы перехватили функцию SetPlayerPos и теперь при использовании ее - она будет заменяться на SetPlayerPosEx, в исключении тела перехватчика.
    Разработка •  • Ч Е Р Н О Б Ы Л Ь •  • Выживание в припяти •

  4. #4
    Аватар для Son of the Moon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.08.2016
    Сообщений
    52
    Репутация:
    2 ±
    Цитата Сообщение от Витёк Посмотреть сообщение
    Код:
    //допустим мы перехватываем функцию SetPlayerPos
    stock SetPlayerPosEx(playerid, Float:X,Float:Y,Float:Z) //SetPlayerPosEx - название перехватчика
    {
            //Функции,которые вам необходимо вызывать вместе с SetPlayerPos
            //Допустим записать координаты, для анти-чита на телепорт
            return SetPlayerPos(playerid, X,Y,Z); //Вызываем перехватываемую функцию
            
    }
    #if defined _ALS_SetPlayerPos // Проверяем, если функция уже перехвачена, то...
            #undef SetPlayerPos // Раздефайневаем/удаляем функцию. Также, если вы уже использовали перехват с префиксом _ALS_,то старый перехват тоже удалится
    #else // Если функция с префиксом _ALS_ еще не перехвачена...
            #define _ALS_SetPlayerPos // Перехватываем функцию
    #endif //Заканчиваем перехват
    #define SetPlayerPos SetPlayerPosEx // Даем знать, что теперь функция SetPlayerPos будет использоваться, как SetPlayerPosEx
    Таким образом мы перехватили функцию SetPlayerPos и теперь при использовании ее - она будет заменяться на SetPlayerPosEx, в исключении тела перехватчика.
    я имел ввиду чем отличается твой код и тот который я дал, ведь по сути что один что второй изменить поведение функции.

  5. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Son of the Moon Посмотреть сообщение
    я имел ввиду чем отличается твой код и тот который я дал, ведь по сути что один что второй изменить поведение функции.
    Твой код не изменяет поведение функции, а создаёт новую функцию SetPlayerHealthEx.

  6. Пользователь сказал cпасибо:
    Daniel_Cortez (23.08.2016)
  7. #6
    Аватар для Son of the Moon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.08.2016
    Сообщений
    52
    Репутация:
    2 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Твой код не изменяет поведение функции, а создаёт новую функцию SetPlayerHealthEx.
    допустим, но ведь так тоже можно мод писать, или я ошибаюсь? нечего же не изменится?
    Последний раз редактировалось Son of the Moon; 23.08.2016 в 17:58.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от Son of the Moon Посмотреть сообщение
    допустим, но ведь так тоже можно мод писать, или я ошибаюсь? нечего же не изменится?
    Ничего не изменится, но с перехватами ты получишь независимый античит, который сможешь подключить в любой мод

  9. #8
    Аватар для Son of the Moon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.08.2016
    Сообщений
    52
    Репутация:
    2 ±
    все понял, всем большое спасибо, тему можно закрыть.

 

 

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

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

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

Ваши права

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