Проверка(транспорт) -
Maikkk - 11.10.2011
Здравствуйте, я пробую сделать проверку, в команде, чтобы проверял, есть ли рядом с игроком транспорт или нет, если нет то "действие".
Вот так я делал:
PHP Code:
new Float:x,Float:y, Float:z;
for(new v; v < MAX_VEHICLES; v++)
{
if(!IsPlayerInRangeOfPoint(playerid, 3.0, x,y,z))
{
SendClientMessage(playerid, COLOR_RED,"((Рядом с вами нет транспорта!))");
return 1;
}
}
Подскажите что я делаю не так? Просто не работает! И желательно чтобы проверял игрок около капота транспорта или нет.
Re: Проверка(транспорт) -
OKStyle - 11.10.2011
Ты не получаешь координаты тачки.
pawn Code:
new Float:x,Float:y, Float:z;
for(new v; v < MAX_VEHICLES; v++)
{
GetVehiclePos(v, x, y, z);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, x,y,z))
{
SendClientMessage(playerid, COLOR_RED,"((Рядом с вами нет транспорта!))");
}
return 1;
}
Но писать так будет для каждой из 2000 тачек. Мне кажется, что логика должна быть немного иной:
pawn Code:
new Float:x,Float:y, Float:z;
for(new v; v < MAX_VEHICLES; v++)
{
GetVehiclePos(v, x, y, z);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, x,y,z)) continue;
new string[128];
format(string, sizeof(string), "Вы у тачки: %d", v);
SendClientMessage(playerid, COLOR_RED, string);
return 1;
}
Re: Проверка(транспорт) -
Maikkk - 11.10.2011
волучается второй вариант будет лучше, спасибо, а как сделать чтобы он проверял игрок у капота или нет?
Re: Проверка(транспорт) -
Stepashka - 11.10.2011
Тригонометрию в школе изучал?
Re: Проверка(транспорт) -
Maikkk - 11.10.2011
Quote:
Originally Posted by Stepashka
Тригонометрию в школе изучал?
|
... ? конечно ...
Re: Проверка(транспорт) -
Stepashka - 12.10.2011
Quote:
Originally Posted by Maikkk
... ? конечно ...
|
Тогда следи за мыслью:
координаты машины, угол её поворота, координтаы игрока, трехмерная система координат.
Тебе нужно определить полодение точки относительно другой точки на определенном растоянии под заданным углом, вперед банльна тригонометрия.
Re: Проверка(транспорт) -
Maikkk - 12.10.2011
все равно не пойму:
PHP Code:
new Float:x,Float:y, Float:z,Float: z_angle;
new Float:x1, Float:y1, Float:z1;
GetPlayerPos(playerid, x1, y1, z1);
GetVehicleZAngle(v, z_angle);
GetVehiclePos(v, x, y, z);
узнаю, а вот что дальше что то не пойму, с тригонометрией у меня проблемы(
Re: Проверка(транспорт) -
Mutha_X - 12.10.2011
Берешь координаты, добавляешь в этот борщ дистанцию от центра, припрявляя косинусами и синусами к нужным координатам, в синусах и косинусах делаешь нарезки под нужными углами отклонения. Получаешь 3 разноимённых борща и гонишь в столовую на проверку публике)
Мнемоническое объяснение xD
Чёртовы треугольники в помощь)
Re: Проверка(транспорт) -
Maikkk - 13.10.2011
опять не понял, воспрользовался ф-ей майсана, сделал так:
PHP Code:
new Float:x,Float:y, Float:z;
for(new v; v < MAX_VEHICLES; v++)
{
GetVehiclePos(v, x, y, z);
GETPOS(playerid, x,y, z);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, x,y,z))
{
SendClientMessage(playerid, COLOR_RED,"((Вы не у капота!))");
}
}
а вот сама ф-я:
PHP Code:
Float:GETPOS(playerid, &Float:q, &Float:w, Float:distance){
new Float:a;GetVehiclePos(playerid, q, w, a);
if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
else GetPlayerFacingAngle(playerid, a);q += (distance * floatsin(-a, degrees));w += (distance * floatcos(-a, degrees));return a;}
но все равно не пашет
Re: Проверка(транспорт) -
Mutha_X - 14.10.2011
Ну начнём с того, что это гон а не скрипт)
Code:
new Float:a,Float:b,Float:c,car,model;
for(new n=1;n<MAX_VEHICLES;n++)
{
model=GetVehicleModel(n);// нужно, чтобы в GetVehiclePosEx вместо "3" определять что подставлять из массива верное для каждой машины значение дистанции от центра к капоту + оптимизация.
if(model==0)continue;// ^> массив наверно сами найдёте и вставите как надо.
GetVehiclePosEx(n,a,b,c,3,0);
if(IsPlayerInRangeOfPoint(playerid, 2.0, a,b,c)) {car=n; break;}
}
if(car==0){SendClientMessage(playerid, COLOR_RED,"((Вы не у капота!))");}
//==========================================
stock GetVehiclePosEx(veh,&Float:x,&Float:y,&Float:z,Float:dist,Float:Zangle)
{
GetVehiclePos(veh,x,y,z);
new Float:r;
GetVehicleZAngle(veh,r);
Zangle=-(r+Zangle);
x = x + (dist * floatsin(Zangle,degrees));
y = y + (dist * floatcos(Zangle,degrees));
}