SA-MP Forums Archive
Проверка(транспорт) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Проверка(транспорт) (/showthread.php?tid=289439)



Проверка(транспорт) - Maikkk - 11.10.2011

Здравствуйте, я пробую сделать проверку, в команде, чтобы проверял, есть ли рядом с игроком транспорт или нет, если нет то "действие".
Вот так я делал:
PHP Code:
new Float:x,Float:yFloat:z;
for(new 
vMAX_VEHICLESv++)
{
if(!
IsPlayerInRangeOfPoint(playerid3.0x,y,z))
{
SendClientMessage(playeridCOLOR_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
View Post
Тригонометрию в школе изучал?
... ? конечно ...


Re: Проверка(транспорт) - Stepashka - 12.10.2011

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


Re: Проверка(транспорт) - Maikkk - 12.10.2011

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


Re: Проверка(транспорт) - Mutha_X - 12.10.2011

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

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

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


Re: Проверка(транспорт) - Maikkk - 13.10.2011

опять не понял, воспрользовался ф-ей майсана, сделал так:
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;} 
но все равно не пашет


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