Не знаю, лично я этим не пользуюсь и никому не советую. Повторюсь: выигрыш будет минимальным, по сравнению с грамотной оптимизацией алгоритмов.
Как минимум, все вызовы GetPlayerVehicleID, GetPlayerState, IsPlayerInAnyVehicle можно заменить одним GetPlayerVehicleID. Также вызов PVar::GetInt можно сделать единожды.
Код не оформлял (только лапшу убрал), ибо лень:
PHP код:
CMD:engine(playerid,params[])
{
if(!IsPlayerLogged{playerid}) return SendMe(playerid,COLOR_GREY,!" * [A] - Сначала нужно авторизоваться!");
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == 0) {
return 1;
}
if(IsVehicleBike(vehicleid)) return false;
if(Engine[vehicleid]) {
printf("незаводим");
static const frm_engine[]=" * %s заглушил двигатель.";
new string[sizeof(frm_engine)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_engine,PlayerName(playerid));
ProxDetector(playerid,5,string,COLOR_PURPLE);
SetEngineOnOff(vehicleid,false);
EngineTime[playerid] = 0;
return 1;
}
if(Fuel[vehicleid] <= 0.0) {
return SendMe(playerid,COLOR_GREY,!" * Бензобак пуст. Вызовите механиков!");
}
if(EngineTime[playerid]) {
return SendMe(playerid,COLOR_GREY,!" * Нельзя так часто заводить двигатель!");
}
new Float:vHealth;
GetVehicleHealth(vehicleid,vHealth);
new driving = PVar::GetInt(playerid,"Driving");
if(OrgCarInfo[vehicleid][orgcFrac] == 15 && (driving == 4 || driving == 6))
{
if(!SeatBelt{playerid} && !IsVehicleA(vehicleid))
{
SendMe(playerid,COLOR_GREY,!" * Перед началом движения вы обязаны пристегнуть ремень безопасности. Вы провалили экзамен!");
PVar::SetInt(playerid,"Driving",0);
acc_RemovePlayerFromVehicle(playerid);
DisablePlayerRaceCheckpoint(playerid);
SetEngineOnOff(vehicleid,false);
AccountInfo[playerid][LoadCharacters{playerid}][acTestAS] = 0;
licCP{playerid} = 0;
licerror{playerid} = 0;
lictesttime{playerid} = 0;
return false;
}
}
printf("заводим");
EngineTime[playerid] = 6;
FreezePlayer(playerid);
GameTextForPlayer(playerid, "~w~€AЊYCKAEM ѓ‹…‚A¦E‡’...", 5000, 4);
static const frm_str[]=" * %s пытается запустить двигатель.";
new string[sizeof(frm_str)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_str,PlayerName(playerid));
return ProxDetector(playerid,5,string,COLOR_PURPLE);
}
И такой ужас лишь в одной команде, страшно представить что во всём остальном скрипте творится. Уверен, что IsVehicleBike, IsVehicleA реализованы массой проверок, в ProxDetector вычисляется расстояние для всех игроков.
P.S. Уродствами, вида SendMe и PVar::SetInt ты только путаешь людей, которые будут разбираться в твоём коде.