Path update/ja

From Second Life Wiki
Jump to navigation Jump to search

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.
定数 説明
PU_SLOWDOWN_DISTANCE_REACHED 0x00 キャラクターが現在のゴールに近いです。
PU_GOAL_REACHED 0x01 キャラクターがゴールに到達し、停止するか新しいゴールを選択します(放浪の場合)。
PU_FAILURE_INVALID_START 0x02 キャラクターは現在の位置からナビゲーションできません - たとえば、キャラクターがナビメッシュの外にいるか、それより高い位置にいます。
PU_FAILURE_INVALID_GOAL 0x03 ゴールがナビメッシュ上になく、到達できません。
PU_FAILURE_UNREACHABLE 0x04 何らかの理由でゴールに到達できなくなりました - たとえば、障害物が経路をブロックしています。
PU_FAILURE_TARGET_GONE 0x05 対象(llPursueまたはllEvadeの場合)をもはや追跡できません - たとえば、それがリージョンを出たか、アバターがリージョンの外に約30m以上いる場合。
PU_FAILURE_NO_VALID_DESTINATION 0x06 キャラクターが行くのに適切な場所がありません - たとえば、巡回していてすべての巡回ポイントが到達不能になった場合。
PU_EVADE_HIDDEN 0x07 llEvadeキャラクターが追跡者から隠れたと思ったときにトリガーされます。
PU_EVADE_SPOTTED 0x08 llEvadeキャラクターが隠れている状態から走り始めるときにトリガーされます。
PU_FAILURE_NO_NAVMESH 0x09 このリージョンにはナビメッシュがないため、キャラクターに報告される致命的なエラーです。これは通常、サーバの障害を示しており、ユーザーはこのメッセージを受け取った時間とリージョンを含めてバグレポートを提出する必要があります。
PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED 0x0A キャラクターが動的なパスファインディングが無効になっているリージョンに入るときにトリガーされます。動的なパスファインディングはエステートマネージャーがリージョンデバッグコンソールの 'dynamic_pathfinding' オプションを介してトグルできます。
PU_FAILURE_PARCEL_UNREACHABLE 0x0B キャラクターがパーセルに入ることができなかったときにトリガーされます。たとえば、パーセルが既に満員であるか、ナビメッシュがベイクされた後にオブジェクトエントリが無効になっている場合など。
PU_FAILURE_OTHER 0xF4240 その他の失敗。

Caveats


Examples

<syntaxhighlight lang="lsl2"> 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]);
       }
   }

} </syntaxhighlight>

Deep Notes

History

Date of Release 31/07/2012

Signature

event void path_update( integer type, list reserved );