Можно ли сделать так, что бы мой перехват срабатывал после всех остальных, а если их нет, то после самого колбека/функции?
Можно ли сделать так, что бы мой перехват срабатывал после всех остальных, а если их нет, то после самого колбека/функции?
Но и перехват должен быть самым последним среди всех.PHP код:
public Function(Args)
{
#if defined Prefix_Function
Prefix_Function(Args);
#endif
//Тут твой код
return 1;
}
#if defined _ALS_Function
#undef Function
#else
#define _ALS_Function
#endif
#define Function Prefix_Function
#if defined Prefix_Function
forward Prefix_Function(Args);
#endif
А вообще в таких ситуациях лучше создавать функцию и прописывать её вызов в коллбэке, который перехватываешь. Так ты точно можешь контролировать момент, когда твой код будет обработан
Если не секрет, для чего вообще может понадобиться делать перехват именно самым последним? Просто интересно, ибо ни разу не встречал таких ситуаций. Вполне возможно, что и в вашем случае можно сделать так, чтобы перехват не зависел от всей остальной цепочки вызовов.
я такой же код делал:
Но не был уверен, а если в самом колбеке или в других перехватах стоит завершение кода (return), мой код ниже сработает?
Мне нужно чтобы определенная функция вызывалась после OnPlayerConnect (точнее в конце). Доступ к самому колбеку не имею.
Понятно, а есть ещё другие варианты, быть может я не смогу поставить свой перехват последним? Или никаких выходов больше нет? (Кроме таймеров)
Элементарно. Чуть более года назад что-то подобное делал. Понадобилось лично мне для того, чтобы выводить сообщения при загрузке и выгрузке всех инклуд независимо от порядка подключения последним (варнинг о несовпадении версии при загрузке и статистика при выгрузке).
Будет. И вот почему:
У нас есть, к примеру, такой код
А теперь представим этот как некое количество спойлеров друг в друге:Код://=============[1]=============
#if defined _inc_y_hooks || defined _INC_y_hooks
hook OnGameModeInit()
#else
public OnGameModeInit()
#endif
{
new a = 1;
#if !defined _inc_y_hooks && !defined _INC_y_hooks\
&& defined h_OnGameModeInit
a = h_OnGameModeInit();
#endif
print("Include 1 loaded!");
return a;
}
#if !defined _inc_y_hooks && !defined _INC_y_hooks
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit h_OnGameModeInit
#if defined h_OnGameModeInit
forward h_OnGameModeInit();
#endif
#endif
//=============[2]=============
#if defined _inc_y_hooks || defined _INC_y_hooks
hook OnGameModeInit()
#else
public OnGameModeInit()
#endif
{
print("Include 2 loaded!");
#if !defined _inc_y_hooks && !defined _INC_y_hooks\
&& defined hh_OnGameModeInit
return hh_OnGameModeInit();
#else
return 1;
#endif
}
#if !defined _inc_y_hooks && !defined _INC_y_hooks
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit hh_OnGameModeInit
#if defined hh_OnGameModeInit
forward hh_OnGameModeInit();
#endif
#endif
//=============[3]=============
#if defined _inc_y_hooks || defined _INC_y_hooks
hook OnGameModeInit()
#else
public OnGameModeInit()
#endif
{
print("Include 3 loaded!");
#if !defined _inc_y_hooks && !defined _INC_y_hooks\
&& defined hhh_OnGameModeInit
return hhh_OnGameModeInit();
#else
return 1;
#endif
}
#if !defined _inc_y_hooks && !defined _INC_y_hooks
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit hhh_OnGameModeInit
#if defined hhh_OnGameModeInit
forward hhh_OnGameModeInit();
#endif
#endif
Результаты:
PHP код:
Include 2 loaded!
Include 3 loaded!
Include 1 loaded!
Спасибо, я это и хотел узнать) Тему можно закрывать