PDA

Просмотр полной версии : [Вопрос] Проверка на место парковки автомобиля.



Jackal
13.01.2016, 20:26
Здравствуйте. Я сделал команду на проверку места парковки автомобиля.

Нужно, чтобы игрок мог проверить - совпадает ли текущее местоположение автомобиля с местом его парковки или нет.

Эта команда, например, может помочь полиции определять неправильно припаркованный автомобиль и принимать соответствующие меры к гражданину.

Проблема в том, что малейшее несовпадение координат уже означает, что автомобиль не припаркован (не находится на месте парковки).

Как сделать, чтобы совпадение имело некую регулируемую неточность, чтобы незначительные отклонения не учитывались?



CMD:vp(playerid, params[])
{
if(sscanf(params,"i", params[0])) return SCM(playerid, COLOR_WHITE, "Введите: /vp [id]");
if(PlayerInfo[params[0]][pCar] == 0) return SCM(playerid, COLOR_GREY, "У этого гражданина нет транспотрного средства!");
new string[128];
new Float:vpX,Float:vpY,Float:vpZ;
GetVehiclePos(car[params[0]],Float:vpX,Float:vpY,Float:vpZ);
if(vpX == PlayerInfo[params[0]][pCarparkX] && vpY == PlayerInfo[params[0]][pCarparkY])
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_GREEN, string);
}
else
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован не на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_RED, string);
}
return 1;
}

$continue$
13.01.2016, 20:30
Кря (http://pro-pawn.ru/showthread.php?8253-%D0%A0%D0%B0%D0%B4%D0%B8%D1%83%D1%81-%D0%B2-SA-MP)

ziggi
13.01.2016, 20:31
stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
return VectorSize(x1-x2, y1-y2, z1-z2);
}

Jackal
13.01.2016, 20:43
stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
return VectorSize(x1-x2, y1-y2, z1-z2);
}




CMD:vp(playerid, params[])
{
if(sscanf(params,"i", params[0])) return SCM(playerid, COLOR_WHITE, "Введите: /vp [id]");
if(PlayerInfo[params[0]][pCar] == 0) return SCM(playerid, COLOR_GREY, "У этого гражданина нет транспотрного средства!");
new string[128];
new Float:vpX,Float:vpY,Float:vpZ;
GetVehiclePos(car[params[0]],Float:vpX,Float:vpY,Float:vpZ);
if(GetDistanceBetweenPoints(vpX, vpY, vpZ, PlayerInfo[params[0]][pCarparkX], PlayerInfo[params[0]][pCarparkY], PlayerInfo[params[0]][pCarparkZ]) > 5.0)
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_GREEN, string);
}
else
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован не на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_RED, string);
}
return 1;
}


Странно, но после добавления этой функции - Run time error 19 file or function is not found.

VVWVV
13.01.2016, 20:47
CMD:vp(playerid, params[])
{
if(sscanf(params,"i", params[0])) return SCM(playerid, COLOR_WHITE, "Введите: /vp [id]");
if(PlayerInfo[params[0]][pCar] == 0) return SCM(playerid, COLOR_GREY, "У этого гражданина нет транспотрного средства!");
new string[128];
new Float:vpX,Float:vpY,Float:vpZ;
GetVehiclePos(car[params[0]],Float:vpX,Float:vpY,Float:vpZ);
if(GetDistanceBetweenPoints(vpX, vpY, vpZ, PlayerInfo[params[0]][pCarparkX], PlayerInfo[params[0]][pCarparkY], PlayerInfo[params[0]][pCarparkZ]) > 5.0)
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_GREEN, string);
}
else
{
SetPlayerCheckpoint(params[0], Float:vpX,Float:vpY,Float:vpZ, 5);
f("Транспорт гражданина %s [%d] припаркован не на своём месте.", GN(params[0]), params[0]);
SCM(playerid, COLOR_RED, string);
}
return 1;
}


Странно, но после добавления этой функции - Run time error 19 file or function is not found.

This function was added in SA-MP 0.3z and will not work in earlier versions!

Jackal
13.01.2016, 20:53
This function was added in SA-MP 0.3z and will not work in earlier versions!

А, вот нашел аналогичную функцию, всё работает.



stock Float:GetDistanceBetweenPoints(Float:X, Float:Y, Float:Z, Float:PointX, Float:PointY, Float:PointZ) return floatsqroot(floatadd(floatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0)), floatpower(floatsub(Z, PointZ), 2.0)));


Всем спасибо за помощь.

ziggi
13.01.2016, 21:00
А, вот нашел аналогичную функцию, всё работает.



stock Float:GetDistanceBetweenPoints(Float:X, Float:Y, Float:Z, Float:PointX, Float:PointY, Float:PointZ) return floatsqroot(floatadd(floatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0)), floatpower(floatsub(Z, PointZ), 2.0)));


Всем спасибо за помощь.

Сразу указывай версию SA-MP, если пользуешься не последней.