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

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);
    }
}