well that does make sense and help a little, but i got it partly working, the object is turned down by 90* then all the other rotations will be around the z axis. tho yours would work for just testing one direction, i need N, S, E, W, NE, NW, SE, SW. i would just do it in one direction but that wouldnt do anythign for what i need. if i knew how (if it were possible) to move an object 1 meter away from another when touched for 2 mins, and allow that object to be in any direction that would be eaiser. but alas their is no llMovePrimAway type of function (that i have seen).
this is my script so far, if anyone can modify it a bit to make it work better that would be appreciated:
erotate = llRot2Euler(rotate);
llSay(0, (string)erotate.z+ " euler rotation z"

;
a =(llRound(RAD_TO_DEG * erotate.z));
llSay(0, (string)a+ " direction of object z"

;
b =(llRound(RAD_TO_DEG * erotate.x));
llSay(0, (string)b+ " direction of object x"

;
c =(llRound(RAD_TO_DEG * erotate.y));
llSay(0, (string)c+ " direction of object y"

;
if (((a == 90) || (a == -270)) && (( c == 0) || (c == 360)) && (( b == 270) || (b == -90)))// 360
{
//other
}
else if (((a == -270) || (a == 90) )&& ((c == 45) || (c == -315))) //45*
{
//other
}
else if (((a == 0) || (a == 3600)) &&

( c == 90) || (c == -270)) && (( b == 0) || (b == 360))) //90
{
//other
}
else if (((a == -90) || (a == 270)) && ((c == 45) || (c == -315)))//135*
{
//other
}
else if(((a == 270) || (a == -90) )&& ((c == 360) || (c == 0)) && ((b == 90) || (b == -270))) //180
{
npos.y = opos.y + size.z / 2;
llSetPrimitiveParams([PRIM_POSITION, npos]);
}
else if (((a == -90) || (a == 270) )&& ((c == -45) || (c == 315)))//225*
{
//other
}
else if ((llAbs(a) == 180) && (( c == -90) || (c == 270)) && (( b == 0) || (b == 360))) //270
{
//other
}
else if (((a == -270) || (a == 90) )&& ((c == -45) || (c == 315))) //315*
{
//other
}
else
{
llSay(0, "error no valid rotation"

;
}
}