Hmmm... I know that tutorial. As I remember, it had some useless vector coding and a bad template... But anyway, your questions:
The crosshair disappears when you step next to a wall because the crosshair is placed inside the wall. Make the code place the crosshair sprite closer to the player (or camfocus - see below) and the problem won't be as bad.
It disappears when you zoom in? You mean a zoom mod? The crosshair is placed in front of the player. When the camera looks at something else, the crosshair is still being placed in front of the player; so as you zoom in, you zoom in front of the crosshair. To fix the problem, create the crosshair in front of the camera's focus instead of the player. Use GetPrimaryFocus(cam_int) to return the focus_object of a camera.
Good luck
------------------
More matter with less art.