*how it works*
very simple really, it takes your position (or the prims) and the coordinates of where it's supposed to be looking at and creates a vector between them. then it uses the llGetRotBetween to get a rotatation between the z axis and where you want to look at and then applies that rotation to the llSetRot command.
Of note is the llSetRot command itself; there is a divisor in there. this is because I'm assuming it's an attachment and it corrects for the avatar's orientation. if this is going to be put in a object that's not attached to an avatar, then the line should be :
CODE
llSetRot(rotvec);if you leave it "as is" in an unattached prim your pointer will dance

CODE
vector lookat = <0,0,0>; //this is where the item will look at. remember to add +llGetRegionCorner() to the coordinates if they're taken from a sensor.
default {
state_entry() {
llSetTimerEvent(.01);//because llSetRot is not "autoupdating" like llLookAt(), we need to constantly update where it's looking to.
}
timer()
{
vector gposition = ( llGetRegionCorner()+llGetPos() ); //global position of the prim.
vector target = (lookat - gposition); // A vector to rotate along. "lookat" is where it's going to look at in global coordinates.
rotation rotvec = llRotBetween(<0,0,1>,llVecNorm(target)); //the rotation quaternion to rotate our object from pointing "up" towards the vector pointing at the waypoint
llSetRot(rotvec/llGetRot());
}
}