Path update/ja
< Path update
Jump to navigation
Jump to search
Revision as of 12:41, 2 November 2023 by Misaki Vanilla (talk | contribs)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
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
- Note that if wandering, the "stop" (
PU_GOAL_REACHED
) type may never occur as a new goal may be chosen when near (PU_SLOWDOWN_DISTANCE_REACHED
) the previous goal. - When the character cannot navigate from the current position (
PU_FAILURE_INVALID_START
) llNavigateTo with theFORCE_DIRECT_PATH
option may be helpful.
Examples
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]);
}
}
}