Path update

From Second Life Wiki
Revision as of 08:17, 30 August 2013 by Pedro Oval (talk | contribs) (Change category from Pathfinding to LSL_Pathfinding)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Description

Event: path_update( integer type, list reserved ){ ; }

Event description goes here.

• integer type A PU_*, it's the path event type
• list reserved Reserved; not currently used.
Constants Value Description
PU_SLOWDOWN_DISTANCE_REACHED 0x00 Character is near current goal.
PU_GOAL_REACHED 0x01 Character has reached the goal and will stop or choose a new goal (if wandering).
PU_FAILURE_INVALID_START 0x02 Character cannot navigate from the current location - e.g., the character is off the navmesh or too high above it.
PU_FAILURE_INVALID_GOAL 0x03 Goal is not on the navmesh and cannot be reached.
PU_FAILURE_UNREACHABLE 0x04 Goal is no longer reachable for some reason - e.g., an obstacle blocks the path.
PU_FAILURE_TARGET_GONE 0x05 Target (for llPursue or llEvade) can no longer be tracked - e.g., it left the region or is an avatar that is now more than about 30m outside the region.
PU_FAILURE_NO_VALID_DESTINATION 0x06 There's no good place for the character to go - e.g., it is patrolling and all the patrol points are now unreachable.
PU_EVADE_HIDDEN 0x07 Triggered when an llEvade character thinks it has hidden from its pursuer.
PU_EVADE_SPOTTED 0x08 Triggered when an llEvade character switches from hiding to running
PU_FAILURE_NO_NAVMESH 0x09 This is a fatal error reported to a character when there is no navmesh for the region. This usually indicates a server failure and users should file a bug report and include the time and region in which they received this message.
PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED 0x0A Triggered when a character enters a region with dynamic pathfinding disabled. Dynamic pathfinding can be toggled by estate managers via the 'dynamic_pathfinding' option in the Region Debug Console.
PU_FAILURE_PARCEL_UNREACHABLE 0x0B Triggered when a character failed to enter a parcel because it is not allowed to enter, e.g. because the parcel is already full or because object entry was disabled after the navmesh was baked.
PU_FAILURE_OTHER 0xF4240 Other failure.

Caveats

All Issues ~ Search JIRA for related Bugs

Examples

<lsl> create_wandering_character() { // Clear any previous character behaviors

   llDeleteCharacter();

// MAX_SPEED is @ 20 by default

   llCreateCharacter([
       CHARACTER_MAX_SPEED, 25.0,
       CHARACTER_DESIRED_SPEED, 15.0]);
   llWanderWithin(llGetPos(), <10.0, 10.0,  2.0>, []);

}

list get_pathupdate_failure_info(integer type) {

   if (type == PU_SLOWDOWN_DISTANCE_REACHED)
       return ["Near", FALSE];
   
   if (type == PU_GOAL_REACHED)
       return ["Stopping", FALSE];
   
   if (type == PU_FAILURE_INVALID_START)
       return ["Cannot path find from current location! Attempting "
               + "to go to the center of the region.", TRUE];
   if (type == PU_FAILURE_INVALID_GOAL)
       return ["Goal not on navmesh!", FALSE];
   
   if (type == PU_FAILURE_UNREACHABLE)
       return ["Goal unreachable!", FALSE];
   
   if (type == PU_FAILURE_TARGET_GONE)
       return ["Target gone!", FALSE];
   
   if (type == PU_FAILURE_NO_VALID_DESTINATION)
       return ["No place to go!", FALSE];
   
   if (type ==  PU_EVADE_HIDDEN)
       return ["Hiding from pursuer...", FALSE];
   
   if (type == PU_EVADE_SPOTTED)
       return ["Switched from hiding to running...", FALSE];
   
   if (type ==  PU_FAILURE_NO_NAVMESH)
       return ["Region has no nav mesh..", FALSE];
   
   if (type == PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED)
       return ["Dynamic pathfinding is disabled in this region.", FALSE];
   if (type == PU_FAILURE_PARCEL_UNREACHABLE)
       return ["Parcel entry problem (is the parcel full?).", FALSE];
   if (type == PU_FAILURE_OTHER)
       return ["Hit an unspecified failure", FALSE];
   return ["Unknown failure", FALSE];

}

default {

   on_rez(integer start_param)
   {
       llResetScript();
   }
   state_entry()
   {
       create_wandering_character();
   }

   path_update(integer type, list reserved)
   {
       list params = get_pathupdate_failure_info(type);
       string info = llList2String(params, 0);
       integer /* boolean */ hasToMove = llList2Integer(params, 1);
       llInstantMessage(llGetOwner(), info);
       if (hasToMove)
       {
           vector currentPosition = llGetPos();
           llNavigateTo(<128.0, 128.0, llGround(<128.0, 128.0, 0.0> - currentPosition)>, [FORCE_DIRECT_PATH, TRUE]);
       }
   }

} </lsl>

Deep Notes

History

Date of Release 31/07/2012

Signature

event void path_update( integer type, list reserved );