ページ

2009/09/27

カラーチェンジダイアログスクリプト


// カラーチェンジ
integer listen_handle;
integer CHANNEL;
list color_name=["Red","Green","Blue","White"]; // 色の名前
list color_value=[<1,0,0>,<0,1,0>,<0,0,1>,<1,1,1>]; // 色の値

default
{
touch_start(integer total_number)
{
key agent=llDetectedKey(0); // タッチしたアバターのキー
if (agent != llGetOwner()) return; // オーナーでないときは中断
llListenRemove(listen_handle); // listen解除
CHANNEL=llCeil(llFrand(2147483646)); // listenチャンネルのランダム化
listen_handle=llListen(CHANNEL, "", agent, ""); // listen開始
llDialog(agent, "Color change", color_name, CHANNEL); // ダイアログ表示
}

listen(integer channel, string name, key id, string msg)
{
llListenRemove(listen_handle); // listen解除
if (channel == CHANNEL && id == llGetOwner()) {
integer i=llListFindList(color_name,[msg]); // 押されたボタンをリストから検索
if (i < 0) return; // 一致しなかったら終了 vector color=llList2Vector(color_value,i); // 色の値リストの一致した色 llSetLinkColor(LINK_SET,color,ALL_SIDES); // 全プリムの色を変更 } } }



変えたくないプリムには以下を挿入

// 色変更しない子プリム

vector color=<0,0,0>; // 変えたくない色

default
{
changed(integer change)
{
if (change & CHANGED_COLOR) { // 色が変わったら
if (llGetColor(0) != color) { // 違う色に変わったら
llSetColor(color,ALL_SIDES); // 元の色に戻す
}
}
}
}