LSL Example Pathfinding Wanderer

From Second Life Wiki
Revision as of 08:53, 25 February 2017 by Fred Gandt (talk | contribs) (changed <pre> to <syntaxthighlight lang="lsl2">)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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.

This is a pathfinding test script, which is a simple wandering character.

// wandering box; touch me to start wandering
default
{
    on_rez(integer reznum)
    {
        llResetScript();
    }
    state_entry()
    {
        llSay(0, "Touch me to trigger wandering");
        llDeleteCharacter();
        llCreateCharacter([]);        
    }
    touch_start(integer detected)
    {
        llWanderWithin(llGetPos(), <20.0, 20.0, 5.0>, []);
    }
    path_update(integer type, list reserved)
    {
        string update_desc;

        if (type == PU_SLOWDOWN_DISTANCE_REACHED)
        {
            update_desc = "Near";
        }
        else if (type == PU_GOAL_REACHED)
        {
            update_desc = "Stopping";
        }
        else if (type == PU_FAILURE_INVALID_START)
        {
            update_desc = "Cannot path find from current location!";
        }
        else if (type == PU_FAILURE_INVALID_GOAL)
        {
            update_desc = "Goal not on navmesh!";
        }
        else if (type == PU_FAILURE_UNREACHABLE)
        {
            update_desc = "Goal unreachable!";
        }
        else if (type == PU_FAILURE_TARGET_GONE)
        {
            update_desc = "Target gone!";
        }
        else if (type == PU_FAILURE_NO_VALID_DESTINATION)
        {
            update_desc = "No place to go!";
        }
        else if (type == PU_EVADE_HIDDEN)
        {
            update_desc = "I am hidden from my pursuer";
        }
        else if (type == PU_EVADE_SPOTTED)
        {
            update_desc = "I was found by my pursuer";
        }
        else if (type == PU_FAILURE_NO_NAVMESH)
        {
            update_desc = "Error: there is no navmesh for this region?!";
        }
        else if(type == PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED)
        {
            update_desc = "Dynamic pathfinding is disabled in this region";
        }
        else if(type == PU_FAILURE_PARCEL_UNREACHABLE)
        {
            update_desc = "Failed to enter a parcel - is it full?";
        }
        else
        {
            update_desc = "Erm... Not a known value!";
        }
        llOwnerSay("path_update: " + (string)type + ": " + update_desc);
    }
}