Прежде всего обрати внимание на атрибуты v_angle, view_ofs, origin ( http://amxmodx.ucoz.ru/forum/8-50-1 ) view_ofs - положение позиции глаз игрока относительно начала координат модели игрока(origin)
прибавляет origin + view_ofs = получаем точку в пространстве, с которой игрок смотрит.
Теперь нам нужно отойти на 35u от точки взгляда в сторону взгляда
Направление взгляда можно получить с атрибута v_angle, но оно в градусах. Для перевода из градусов в единичный вектор существует функция в движке EngFunc_MakeVectors, которая принимает 3х мерный массив "углов" и записывает соответствующий вектор прямого направления в globalvars_t::v_forward.
Прибавляем вектор взгляда длинной в 35u к положению глаз игрока относительно начала пространства
(origin + view_ofs) + (v_forward * 35) получаем точку, которая расположена через 35u перед игроком.
Итак, на Pawn+amxx это выглядит так(для наглядности не оптимизировано):
Code
static Float:origin[3], Float:view_ofs[3]
pev(id, pev_origin, origin)
pev(id, pev_view_ofs, view_ofs)
static Float:view_pos[3]
view_pos[0] = origin[0] + view_ofs[0]
view_pos[1] = origin[1] + view_ofs[1]
view_pos[2] = origin[2] + view_ofs[2]
static Float:v_angle[3]
pev(id, pev_v_angle, v_angle)
engfunc(EngFunc_MakeVectors, v_angle)
static Float:v_vector[3]
global_get(glb_v_forward, v_vector)
static Float:forward_origin[3]
forward_origin[0] = view_pos[0] + 35.0 * v_vector[0]
forward_origin[1] = view_pos[1] + 35.0 * v_vector[1]
forward_origin[2] = view_pos[2] + 35.0 * v_vector[2]
//view_pos[] - точка, откуда игрок смотрит
//forward_origin[] - точка через 35u от взгляда игрока
(материал частично с VEN's fakemeta_utils, fm_get_aim_origin)