PHP код:
#include <a_samp>
enum _emi
{
e_Timer, totalSec, Float:_ex, Float:_ey, Float:_ez
}
new emi[MAX_PLAYERS][_emi];
#define E<%0:%1> emi[%0][%1]
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_HANDBRAKE)
{
if(E<playerid:totalSec> || GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return true;
new Float:x, Float:y, Float:z;
GetPlayerCameraFrontVector(playerid, x, y, z);
for(new targetid = GetPlayerPoolSize()+1; --targetid != -2; )
{
if(targetid == -1) return SendClientMessage(playerid, -1, "Вам необходимо навестись на автомобиль!");
if(!IsPlayerInRangeOfPoint(targetid, 3.0, x, y, z) || GetPlayerState(targetid) != PLAYER_STATE_DRIVER) continue;
GetPlayerPos(targetid, E<targetid:_ex>, E<targetid:_ex>, E<targetid:_ex>);
new Float:dist_ = GetPlayerDistanceFromPoint(playerid, E<targetid:_ex>, E<targetid:_ex>, E<targetid:_ex>),
str_[144];
if(dist_ > 30.0) continue;
format(str_, sizeof str_, "Между вами %0.2f метров. Преследуйте игрока 20 секунд, чтобы воспользоваться действием ЭМИ.", dist_),
SendClientMessage(playerid, -1, str_), E<playerid:totalSec> = 1;
E<playerid:e_Timer> = SetTimerEx("emiTimerPlayer", 1000, true, "ii", playerid, targetid);
break;
}
}
return true;
}
forward emiTimerPlayer(playerid, target_ID);
public emiTimerPlayer(playerid, target_ID)
{
GetPlayerPos(target_ID, E<target_ID:_ex>, E<target_ID:_ey>, E<target_ID:_ez>);
if(GetPlayerDistanceFromPoint(playerid, E<target_ID:_ex>, E<target_ID:_ey>, E<target_ID:_ez>) > 30.0)
{
E<playerid:_ex> = E<playerid:_ey> = E<playerid:_ez> = E<target_ID:_ex> = E<target_ID:_ey> = E<target_ID:_ez> = E<playerid:totalSec> = 0;
KillTimer(E<playerid:e_Timer>);
return SendClientMessage(playerid, -1, "Игрок далеко от вас. Зарядка ЭМИ остановлена. Необходимо начать заново.");
}
if(E<playerid:totalSec>++ == 22) // 22, именно так
{
// Тут действие над целью
KillTimer(E<playerid:e_Timer>);
E<playerid:_ex> = E<playerid:_ey> = E<playerid:_ez> = E<target_ID:_ex> = E<target_ID:_ey> = E<target_ID:_ez> = E<playerid:totalSec> = 0;
}
return true;
}