Well, I assume u use a vector for the base offset:
VECTOR weaponOffset;
Then, in the function that positionates the weapons:
if(mouse_right)
{
vec_lerp(weaponOffset,weaponOffset,vector(5,0,-3),0.3);
}
else
{
vec_lerp(weaponOffset,weaponOffset,vector(15,-5,-5),0.3);
}
vec_set(my.x,weaponOffset);
vec_rotate(my.x,camera.pan);
vec_add(my.x,camera.x);
vec_set(my.pan,camera.pan);
Play with the values in the vec_lerp function to achieve what u want. U can also use multi vectors to achieve different offsets for different weapons.