Отбросить игрока
#1

Как отбросить игрока от точки (x,y) c помощью SetPlayerVelocity. ?


Пробовал через неё, не вышло
PHP код:
stock GetXYInFrontOfPoint(Float:xFloat:y, &Float:x2, &Float:y2Float:AFloat:distance)
{
    
x2 + (distance floatsin(-Adegrees));
    
y2 + (distance floatcos(-Adegrees));

Понял что нужно найти угол относительно двух точек, но так и не получилось
Reply
#2

В определенном направлении или в любом?
Reply
#3

да, в определенном
Reply
#4

Известна координата откуда нужно откинуть
Reply
#5

Я раньше в OnPlayerTakeDamage откидывал так, может приспособите под себя
pawn Код:
new Float:X, Float:Y, Float:Z, Float:pAng;
    GetPlayerFacingAngle(issuerid, pAng);
    GetPlayerVelocity(playerid, X, Y, Z);
    SetPlayerVelocity(playerid, X + (floatsin(-pAng, degrees) * 0.1), Y + (floatcos(pAng, degrees) * 0.1) , Z+0.05);
Reply
#6

Да, спасибо. Знаю этот метод. Как раз таки пытался найти угол под эти операции, нахожу ,по видимому, не верно
Reply
#7

Что именно не работает?
Reply
#8

PHP код:
new Float:XFloat:YFloat:ZFloat:A;
180-atan2(POS[1][0]-POS[0][0], POS[1][1]-POS[0][1]);
GetPlayerVelocity(iXYZ);
SetPlayerVelocity(i+ (floatsin(-Adegrees) * 4.0), + (floatcos(Adegrees) * 4.0) , Z+1.0); 
То притягивает, то отталкивает не так как надо (в сторону). Проще говоря, взялся за не свое
Reply
#9

А вот нашел правильное нахождение угла

PHP код:
#define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0)
 
stock ReturnZAngleToPoint(playeridFloat:xFloat:y)
{
    new 
Float:P[4];
    
GetPlayerPos(playerid,P[0],P[1],P[2]);
    
P[3] = (180.0 atan2(floatsub(P[0],x),floatsub(P[1],y)));
    
fclamp360(P[3]);
    return 
P[3];

Reply
#10

Всё, всё отлично работает
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)