Noscript Avoidance

From Pool's Closed Wiki
Revision as of 19:46, 5 August 2009 by Afroduck (talk | contribs) (New page: A problem for launching followers, especially in sandboxes, is the "safe zones" with scripting disabled. The following is an avoidance subroutine you can integrate into scripts to make sur...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

A problem for launching followers, especially in sandboxes, is the "safe zones" with scripting disabled. The following is an avoidance subroutine you can integrate into scripts to make sure your object stops before getting trapped. It will stop under these circumtances:

  • Target goes into a noscript area.
  • Target leaves a noscript area but that area remains between the object and the target. The object will continue to wait until it has a safe vector to the target before moving again.


<lsl>

       // You can use a normal llSensorRepeat if you don't wish to use llGetObjectDetails.
       list desu = llGetObjectDetails(gTargetKey, [OBJECT_POS]); //gTargetKey is the UUID of the current target stored as a global variable
       vector target = llList2Vector(desu, 0);
       vector here = llGetPos();
       vector distance = target - here; //Vector between object and the target
       float length = llVecMag(distance);
       vector normz = llVecNorm(distance);
       float mod_length = 4;
       if ( !(PARCEL_FLAG_ALLOW_SCRIPTS & llGetParcelFlags(target)) )
       {
           return;
       }
       while ( mod_length <= length )
       {
           integer frac_trap_check = llGetParcelFlags( here + (normz * mod_length) );
           if ( !(PARCEL_FLAG_ALLOW_SCRIPTS & frac_trap_check ) )
           {
              return;
           }
           mod_length = mod_length + 4;
       }
       
       llSetPos( pos + offset );

</lsl>