Проверка(транспорт)
#1

Здравствуйте, я пробую сделать проверку, в команде, чтобы проверял, есть ли рядом с игроком транспорт или нет, если нет то "действие".
Вот так я делал:
PHP Code:
new Float:x,Float:yFloat:z;
for(new 
vMAX_VEHICLESv++)
{
if(!
IsPlayerInRangeOfPoint(playerid3.0x,y,z))
{
SendClientMessage(playeridCOLOR_RED,"((Рядом с вами нет транспорта!))");
return 
1;
}

Подскажите что я делаю не так? Просто не работает! И желательно чтобы проверял игрок около капота транспорта или нет.
Reply
#2

Ты не получаешь координаты тачки.

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;
}
Reply
#3

волучается второй вариант будет лучше, спасибо, а как сделать чтобы он проверял игрок у капота или нет?
Reply
#4

Тригонометрию в школе изучал?
Reply
#5

Quote:
Originally Posted by Stepashka
View Post
Тригонометрию в школе изучал?
... ? конечно ...
Reply
#6

Quote:
Originally Posted by Maikkk
View Post
... ? конечно ...
Тогда следи за мыслью:
координаты машины, угол её поворота, координтаы игрока, трехмерная система координат.
Тебе нужно определить полодение точки относительно другой точки на определенном растоянии под заданным углом, вперед банльна тригонометрия.
Reply
#7

все равно не пойму:
PHP Code:
new Float:x,Float:yFloat:z,Floatz_angle
new 
Float:x1Float:y1Float:z1;
GetPlayerPos(playeridx1y1z1);
GetVehicleZAngle(vz_angle);
GetVehiclePos(vxyz); 
узнаю, а вот что дальше что то не пойму, с тригонометрией у меня проблемы(
Reply
#8

Берешь координаты, добавляешь в этот борщ дистанцию от центра, припрявляя косинусами и синусами к нужным координатам, в синусах и косинусах делаешь нарезки под нужными углами отклонения. Получаешь 3 разноимённых борща и гонишь в столовую на проверку публике)

Мнемоническое объяснение xD

Чёртовы треугольники в помощь)
Reply
#9

опять не понял, воспрользовался ф-ей майсана, сделал так:
PHP Code:
new Float:x,Float:yFloat:z;
for(new 
vMAX_VEHICLESv++)
{
GetVehiclePos(vxyz);
GETPOS(playeridx,yz);
if(!
IsPlayerInRangeOfPoint(playerid3.0x,y,z))
{
SendClientMessage(playeridCOLOR_RED,"((Вы не у капота!))");
}

а вот сама ф-я:
PHP Code:
Float:GETPOS(playerid, &Float:q, &Float:wFloat:distance){
new 
Float:a;GetVehiclePos(playeridqwa);
if (
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
else 
GetPlayerFacingAngle(playerida);+= (distance floatsin(-adegrees));+= (distance floatcos(-adegrees));return a;} 
но все равно не пашет
Reply
#10

Ну начнём с того, что это гон а не скрипт)

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));
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)