Difference between revisions of "LlFleeFrom"

From Second Life Wiki
Jump to navigation Jump to search
Line 14: Line 14:
caveats=
caveats=
* Must use llCreateCharacter or script won't compile.
* Must use llCreateCharacter or script won't compile.
* Vertical positions specified for any vectors should be chosen to be as close as possible to the actual height of the terrain requested. Large difference between the provided vertical position and the actual terrain/object will result in failure of the behavior.
* The position to flee from must be near the nav mesh; otherwise, this behavior will fail with PU_FAILURE_INVALID_GOAL.
* If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use [[llEvade]] instead.|
* If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use [[llEvade]] instead.|
examples=
examples=

Revision as of 15:52, 12 June 2012

Summary

Function: llFleeFrom( vector source, float distance, list options );

Directs an object to keep away from a defined position in the region or adjacent regions.

• vector source Global coordinate from which to flee.
• float distance Distance in meters to flee from the source.
• list options No options available at this time.

Caveats

  • Must use llCreateCharacter or script won't compile.
  • The position to flee from must be near the nav mesh; otherwise, this behavior will fail with PU_FAILURE_INVALID_GOAL.
  • If you want to avoid an agent or object as per the example below, it's much more elegant and less sim resource intensive to use llEvade instead.

Examples

<lsl> vector last_touched_pos; key last_touched_key;

default { state_entry() {

}

touch_start(integer total_number) { last_touched_key = llDetectedKey(0); last_touched_pos = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0); llFleeFrom(last_touched_pos, 10, []); llSetTimerEvent(0.2); }

timer() { vector last_touched_pos_now = llList2Vector(llGetObjectDetails(last_touched_key, [OBJECT_POS]), 0); if ( llVecDist(owner_pos, last_owner_pos) > 1 ) { last_touched_pos = last_touched_pos_now; llFleeFrom(last_touched_pos, 10, []); } } }

</lsl>

Notes

The position vector can be set outside the current region by using extended range region coordinates: e.g., to avoid the SE corner of the region to the East of the current one, you could llFleeFrom(<0.0, 512.0, 0.0>, []);

Deep Notes

Signature

function void llFleeFrom( vector source, float distance, list options );