Сделал примерное обмен данными между OnPlayerTakeDamage и секундным пабликом:
PHP код:
//Уникальные параметры, что бы понимать, что public был вызван секундным таймером:
#define WEAPON_SYNC 99
#define BODY_PART_SYNC 99
//Использовал бит, что бы добавить синхронизацию и для других public'ов, если все выйдет успешным
enum(<<= 1)
{
OPTD_sync = 1,
OPGD_sync
};
new player_sync[playerid];
//Секундный таймер
public OnPlayerUpdateStatus(playerid)
{
if((player_sync[playerid] & OPTD_sync) != 0)
Kick(playerid);
player_sync[playerid] ^= OPTD_sync;
CallLocalFunction("OnPlayerTakeDamage", "iifii",
playerid, INVALID_PLAYER_ID, 0.0, WEAPON_SYNC, BODY_PART_SYNC); //вызов OPTD с уникальными параметрами
//Повторная настройка таймера, не добавил сюда
return 1;
}
//OPTD
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(issuerid == INVALID_PLAYER_ID && amount == 0.0
&& weaponid == WEAPON_SYNC && bodypart == BODY_PART_SYNC) //Если все параметры совпадают с уникальными для синхронизации
{
if((player_sync[playerid] & OPTD_sync) == 0)
Kick(playerid);
player_sync[playerid] ^= OPTD_sync;
return 0;
}
return 1;
}
Вроде все без ошибки реализовал, но не ловит NOP. Помогите пожалуйста
P.S. weapon_config.inc не буду использовать, я почти все реализовал и не хочу менять