Changed/ja
< Changed
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.
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
フラグ | 説明 | |
---|---|---|
CHANGED_INVENTORY | 0x001 | プリムのインベントリが変わりました。 (オーナーが追加したインベントリだけ) |
CHANGED_COLOR | 0x002 | プリムの色か透過度が変わりました。 |
CHANGED_SHAPE | 0x004 | プリムの形が変わりました。 |
CHANGED_SCALE | 0x008 | プリムのサイズが変わりました。 |
CHANGED_TEXTURE | 0x010 | プリムのテクスチャかテクスチャの属性が変わりました。 |
CHANGED_LINK | 0x020 | オブジェクトを構成するプリムの数が変わったか、オブジェクトの上に座っているアバターの数が変わりました。 |
CHANGED_ALLOWED_DROP | 0x040 | オーナー以外のユーザ (編集不可能な場合はオーナーも含む) がプリムにインベントリを追加しました。 |
CHANGED_OWNER | 0x080 | オブジェクトのオーナーが変わりました。 |
CHANGED_REGION | 0x100 | オブジェクトのある地域が変わりました。 |
CHANGED_TELEPORT | 0x200 | オブジェクトが 装着 されたままテレポートしました。 |
CHANGED_REGION_START | 0x400 | 地域が今オンラインになりました。 |
CHANGED_MEDIA | 0x800 | プリムメディア が変更されました。 |
警告
changed イベントの中で state を離れる場合、state を変更する直前にさらに変更が行われていると、この state に戻ってきたときに changed イベントが発生することになります。例えば、
default
{
changed(integer change)
{
if(change & CHANGED_LINK)
{
integer links = 0;
if(llGetObjectPrimCount(llGetKey()) < (links = llGetNumberOfPrims()))
{
llUnSit(llGetLinkKey(links));
state whatever;
}
else
llOwnerSay("リンクかリンク解除かされましたが、上には誰も座っていません。");
// default ステートに戻ってきた後にこれがチャットされます。
}
}
}
state whatever
{
state_entry()
{
llSetTimerEvent(10.0);//秒
}
timer()
{
state default;
}
}
サンプル
default
{
changed(integer change)
{
// & です。 && ではありません ... ビット演算子です!
if (change & CHANGED_INVENTORY)
{
llOwnerSay("インベントリが変わりました。");
}
if (change & CHANGED_COLOR)
{
llOwnerSay("色か透過度が変わりました。");
}
if (change & CHANGED_SHAPE)
{
llOwnerSay("プリムの形が変わりました。");
}
if (change & CHANGED_SCALE)
{
llOwnerSay("プリムのサイズが変わりました。");
}
if (change & CHANGED_TEXTURE)
{
llOwnerSay("プリムのテクスチャかテクスチャの属性が変わりました。");
}
if (change & CHANGED_LINK)
{
llOwnerSay("リンクされているプリムの数が変わりました。");
}
if (change & CHANGED_ALLOWED_DROP)
{
llOwnerSay("インベントリが編集権限のないユーザによって変更されました "+
"プリムにアイテムが落とされ、スクリプトはそれを許可しました。");
}
if (change & CHANGED_OWNER)
{
llOwnerSay("オブジェクトのオーナーが変わりました。");
}
if (change & CHANGED_REGION)
{
llOwnerSay("オブジェクトのある地域が変わりました。");
}
if (change & CHANGED_TELEPORT)
{
llOwnerSay("オブジェクトが装着されたままテレポートしました。");
}
if (change & CHANGED_REGION_START)
{
llOwnerSay("地域が今再起動されました。");
}
}
}
複数の変更で同じアクションが呼ばれたときのために、以下の構文を使用するとよいでしょう。
default
{
changed(integer change)
{
if(change & (CHANGED_OWNER | CHANGED_INVENTORY)) // どちらかの変更で true が返ります。
llResetScript();
}
}
注意点
llGetOwner に " (change & CHANGED_OWNER) " の完全な考察が載っています。
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。