Просмотр полной версии : [Вопрос] Перехват
Desulaid
02.07.2015, 02:52
Я вот тут не могу придумать как было бы правильно перехватить функцию GetPlayerMoney. Она работает вот так
переменная = GetPlayerMoney(playerid);
Мне показалось, что псевдоперехватываемая функция должна совпадать аргументами и такой вариант врят ли будет правильным, но других у меня нету.
stock ac_GetPlayerMoney(playerid, money)
{
money = ac_money[playerid];
return GetPlayerMoney(playerid);
}
#if defined _ALS_GetPlayerMoney
#undef GetPlayerMoney
#else
#define _ALS_GetPlayerMoney
#undif
#define GetPlayerMoney _ALS_GetPlayerMoney
Вопрос: как реализовать такой перехват?
Desulaid
02.07.2015, 10:21
Вот еще один вариант. Может он приближен к истине: :D ?
stock ac_GetPlayerMoney(playerid, money)
{
ac_money[playerid] = GetPlayerMoney(playerid);
return ac_money[playerid] ;
}
#if defined _ALS_GetPlayerMoney
#undef GetPlayerMoney
#else
#define _ALS_GetPlayerMoney
#endif
Daniel_Cortez
02.07.2015, 11:56
Вы уж определитесь, что собираетесь делать. Если ваша функция возвращает 2 значения, а не 1, то зачем пытаться выдать её за оригинал?
Только введёте в заблуждение других, кто будет работать с вашим кодом, да и сами будете путаться, если забудете о своей багофиче.
P.S.: По поводу передачи параметров по ссылке - посмотрите, например, на заголовок функции GetPlayerPos в a_samp.inc
Desulaid
02.07.2015, 12:30
Вы уж определитесь, что собираетесь делать. Если ваша функция возвращает 2 значения, а не 1, то зачем пытаться выдать её за оригинал?
Только введёте в заблуждение других, кто будет работать с вашим кодом, да и сами будете путаться, если забудете о своей багофиче.
P.S.: По поводу передачи параметров по ссылке - посмотрите, например, на заголовок функции GetPlayerPos в a_samp.inc
Может a_players.inc?
Пельмень
02.07.2015, 12:30
return ac_money[playerid]?
Desulaid
02.07.2015, 12:34
И я думал, что функция GetPlayerMoney возвращает одно значение - сумму денег.
- - - Добавлено - - -
return ac_money[playerid]?
Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney. :sorry:
Пельмень
02.07.2015, 12:39
И я думал, что функция GetPlayerMoney возвращает одно значение - сумму денег.
- - - Добавлено - - -
Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney. :sorry:
return ac_money[playerid] = GetPlayerMoney(playerid);
Daniel_Cortez
02.07.2015, 13:16
return ac_money[playerid] = GetPlayerMoney(playerid);
В чём смысл античита, который будет не отбирать читерские деньги, а наоборот записывать их у себя?
Ну я типа "сделал" возвращение полученых денег, которые получил GetPlayerMoney. :sorry:
Не пойму, так вы собираетесь возвращать одно значение или два (деньги игрока и кол-во денег, записанное античитом)?
Если два, то лучше оставьте идею с перехватами.
Как я уже и говорил раньше, нет никакого смысла заменять функцию, если она принимает другие аргументы или возвращает другое кол-во значений.
Перехваты сделаны для незаметной подмены функций - перехватил и забыл. С вашим же подходом придётся всё время держать в голове, что GetPlayerMoney - это не функция из SA:MP, а костыль, требующий больше аргументов и возвращающий сразу несколько значений.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot