Привет, на двух форумах уже узнавал, но либо ничего не отвечали, либо ничего толкового.
Суть в том, что есть 2 точки: 1ая - игрок, 2ая - бот. И нужно, чтобы бот посмотрел на игрока, где бы тот не находился.
Так вот, по расчетам все верно - угол взора игрока точно высчитывается и игрок разворачивается и смотрит на бота. Однако, если мы разворачиваем бота, то вертикальный вектор
fAngles[0] является неверным(смотрит вверх когда нужно вниз и наоборот).
Код:
new fNOrigin[3], fpOrigin[3]
get_user_origin(IdBot,fNOrigin,0)
get_user_origin(id,fpOrigin,0)
new Float:fX = float(fNOrigin[0]) - float(fpOrigin[0])
new Float:fZ = float(fNOrigin[1]) - float(fpOrigin[1])
new Float:fY = float(fNOrigin[2]) - float(fpOrigin[2])
new Float: fAngles[3]
fAngles[0]=floatatan(floatdiv(fY,floatsqroot(floatadd(floatadd(floatpower(floatsub(float(fNOrigin[0]),fpOrigin[0]),2.0),floatpower(floatsub(float(fNOrigin[1]),fpOrigin[1]),2.0)),floatpower(floatsub(float(fNOrigin[2]),fpOrigin[2]),2.0)))),degrees)
if(fX==0&&fZ>0) fAngles[1]=float(-90)//x==0,y<0
else if(fX==0&&fZ<0) fAngles[1]=float(90)
else if(fX>0&&fZ==0) fAngles[1]=float(180)
else if(fX<0&&fZ==0) fAngles[1]=float(0)
else if(fX==0&&fZ==0) fAngles[1]=float(0)
else if(fX<0&&fZ!=0) fAngles[1]=floatatan(floatdiv(fZ,fX),degrees)
else if(fX>0&&fZ!=0) fAngles[1]=floatadd(float(180),floatatan(floatdiv(fZ,fX),degrees))
entity_set_vector(IdBot, EV_VEC_angles, fAngles)