Prolific
Специалист
Всем привет, давно использую у себя в модах свою функцию IsPlayerInVehicle_Ex
Её плюсы:
Параметры: ИД игрока.
Возвращает: ИД т/с, в противном случае 0 (иды машин стартуют с 1, так что все очень удобно).
Кстати, надеюсь я не изобрел велосипед, ибо на форумах такого не видел.
Суть:
В начало мода кидаем массивчик (обнуляйте его при выходе игрока).
В OnPlayerStateChange
Макрос для удобства:
Её плюсы:
- Работает быстрее нежели стандартный IsPlayerInVehicle
- Заменяет native GetPlayerVehicleID
- Заменяет native IsPlayerInAnyVehicle
Параметры: ИД игрока.
Возвращает: ИД т/с, в противном случае 0 (иды машин стартуют с 1, так что все очень удобно).
Кстати, надеюсь я не изобрел велосипед, ибо на форумах такого не видел.
Суть:
В начало мода кидаем массивчик (обнуляйте его при выходе игрока).
PHP:
new Player_Veh_ID[MAX_PLAYERS];
PHP:
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) Player_Veh_ID[playerid] = GetPlayerVehicleID(playerid);
else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER) Player_Veh_ID[playerid] = 0;
PHP:
#define IsPlayerInVehicle_Ex(%0) Player_Veh_ID[%0]
Тесты скорости:
PHP:
CMD:test(playerid)
{
new tick = GetTickCount();
for(new i; i < 1000000; i++)
{
IsPlayerInVehicle(playerid, i);
}
printf("IsPlayerInVehicle = %i", GetTickCount() - tick);
tick = GetTickCount();
for(new i; i < 1000000; i++)
{
IsPlayerInVehicle_Ex(playerid);
}
printf("IsPlayerInVehicle_Ex = %i", GetTickCount() - tick);
tick = GetTickCount();
for(new i; i < 1000000; i++)
{
GetPlayerVehicleID(playerid);
}
printf("GetPlayerVehicleID = %i", GetTickCount() - tick);
SCMTA(-1, "ALL");
}
Код:
[09:00:30] IsPlayerInVehicle = 919
[09:00:30] IsPlayerInVehicle_Ex = 252
[09:00:31] GetPlayerVehicleID = 880
Последнее редактирование:
