Когда ты копируешь пулю - оригинал, привяжи копию к оружию или пивоту на конце ствола( CopyEntity( пуля_оригинал, оружие_или_пивот ) ), тогда копия автоматически сориентируется так же как и оружие или пивот. Далее открепи ее EntityParent( пуля_копия, 0 ) и теперь в функции обновления двигай вперед по координате Z
MoveEntity пуля_копия, 0, 0, скорость_пули
Еще как вариант - ориентировать пулю по вектору оружие -> цель
Координаты точки попадания пули например узнавать с помощью CameraPick( камера, координата_прицела_X, координата_прицела_Y )
точка_попадания_X = PickedX()
точка_попадания_Y = PickedY()
точка_попадания_Z = PickedZ()
потом, зная координаты оружия
оружие_X = EntityX( оружие )
оружие_Y = EntityY( оружие )
оружие_Z = EntityZ( оружие )
Далее получаем из этих координат вектор
Dx# = точка_попадания_X - оружие_X
Dy# = точка_попадания_Y - оружие_Y
Dz# = точка_попадания_Z - оружие_Z
Выравниваем пулю по этому вектору ( линии от оружия до точки попадания ) с помощью AlignToVector
AlignToVector( пуля_копия, Dx, Dy, Dz, 0 )
и все, теперь в функции обновления можем ее двигать вперед по координате Z
MoveEntity пуля_копия, 0, 0, скорость_пули
ЗЫ
Я правда непомню нужно ли делать компоненты вектора отрицательными или нет
AlignToVector( пуля_копия, -Dx, -Dy, -Dz, 0 )
Вобщем поэкспериментируй
ЗЫ
Глобальные координаты(мировые) узнаються с помощью последнего параметра - флага в некоторых функциях
например
EntityX( обьект, флаг_глобальных_координат )
тоесть ставь последний параметр как True.