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

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

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    Перехват

    Я вот тут не могу придумать как было бы правильно перехватить функцию GetPlayerMoney. Она работает вот так

    PHP код:
    переменная GetPlayerMoney(playerid); 
    Мне показалось, что псевдоперехватываемая функция должна совпадать аргументами и такой вариант врят ли будет правильным, но других у меня нету.

    PHP код:
    stock ac_GetPlayerMoney(playeridmoney)
    {
        
    money ac_money[playerid];
        return 
    GetPlayerMoney(playerid);
    }
    #if defined _ALS_GetPlayerMoney
        #undef GetPlayerMoney
    #else
        #define _ALS_GetPlayerMoney
    #undif
    #define GetPlayerMoney _ALS_GetPlayerMoney 
    Вопрос: как реализовать такой перехват?

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Вот еще один вариант. Может он приближен к истине: :D ?

    PHP код:
    stock ac_GetPlayerMoney(playeridmoney)
    {
        
    ac_money[playerid] = GetPlayerMoney(playerid);
        return 
    ac_money[playerid] ;
    }
    #if defined _ALS_GetPlayerMoney
        #undef GetPlayerMoney
    #else
        #define _ALS_GetPlayerMoney
    #endif 

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Вы уж определитесь, что собираетесь делать. Если ваша функция возвращает 2 значения, а не 1, то зачем пытаться выдать её за оригинал?
    Только введёте в заблуждение других, кто будет работать с вашим кодом, да и сами будете путаться, если забудете о своей багофиче.

    P.S.: По поводу передачи параметров по ссылке - посмотрите, например, на заголовок функции GetPlayerPos в a_samp.inc
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    $continue$ (02.07.2015)
  5. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Вы уж определитесь, что собираетесь делать. Если ваша функция возвращает 2 значения, а не 1, то зачем пытаться выдать её за оригинал?
    Только введёте в заблуждение других, кто будет работать с вашим кодом, да и сами будете путаться, если забудете о своей багофиче.

    P.S.: По поводу передачи параметров по ссылке - посмотрите, например, на заголовок функции GetPlayerPos в a_samp.inc
    Может a_players.inc?

  6. Пользователь сказал cпасибо:
    $continue$ (02.07.2015)
  7. #5
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    return ac_money[playerid]?

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    И я думал, что функция GetPlayerMoney возвращает одно значение - сумму денег.

    - - - Добавлено - - -

    Цитата Сообщение от Пельмень Посмотреть сообщение
    return ac_money[playerid]?
    Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney.

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

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от Darge Посмотреть сообщение
    И я думал, что функция GetPlayerMoney возвращает одно значение - сумму денег.

    - - - Добавлено - - -



    Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney.
    PHP код:
    return ac_money[playerid] = GetPlayerMoney(playerid); 

  10. 2 пользователя(ей) сказали cпасибо:
    $continue$ (02.07.2015) Desulaid (02.07.2015)
  11. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    PHP код:
    return ac_money[playerid] = GetPlayerMoney(playerid); 
    В чём смысл античита, который будет не отбирать читерские деньги, а наоборот записывать их у себя?

    Цитата Сообщение от Darge Посмотреть сообщение
    Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney.
    Не пойму, так вы собираетесь возвращать одно значение или два (деньги игрока и кол-во денег, записанное античитом)?
    Если два, то лучше оставьте идею с перехватами.
    Как я уже и говорил раньше, нет никакого смысла заменять функцию, если она принимает другие аргументы или возвращает другое кол-во значений.

    Перехваты сделаны для незаметной подмены функций - перехватил и забыл. С вашим же подходом придётся всё время держать в голове, что GetPlayerMoney - это не функция из SA:MP, а костыль, требующий больше аргументов и возвращающий сразу несколько значений.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. Пользователь сказал cпасибо:
    Desulaid (02.07.2015)
 

 

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

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

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

Ваши права

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