2010年4月15日木曜日

リンク番号をフローティングテキストに!っす

1.38の新関数を使った小ネタっす。
プリムとプリムが重なってると見難くて使えないっすけど、
それなりに便利っす。
どうもぺんぎんっす( ◎v◎ )


論よりソースということで、さっさと載せるっす。


integer flag;
integer listen_handle;

default
{
  state_entry()
  {
    flag = FALSE;
    listen_handle = llListen(0, "", llGetOwner(), "");
  }
  on_rez(integer start_param)
  {
    llResetScript();
  }
  touch_start(integer total_number)
  {
    flag = !flag;
    if(flag)
    {
      llOwnerSay("TEXT ON");
      integer i = llGetObjectPrimCount(llGetKey());
      for( ; i > 0; i--)
      {
        llSetLinkPrimitiveParamsFast(
          i,
          [PRIM_TEXT, (string)i, <1.0, 1.0, 1.0>, 1.0]
        );
      }
    }
    else
    {
      llOwnerSay("TEXT OFF");
      llSetLinkPrimitiveParamsFast(
        LINK_SET,
        [PRIM_TEXT, "", <1.0, 1.0, 1.0>, 1.0]
      );
    }
  }
  listen(integer channel, string name, key id, string message)
  {
    llListenRemove(listen_handle);
    if(message == "on") // 小文字注意!
    {
      flag = TRUE;
      llOwnerSay("TEXT ON");
      integer i = llGetObjectPrimCount(llGetKey());
      for( ; i > 0; i--)
      {
        llSetLinkPrimitiveParamsFast(
          i,
          [PRIM_TEXT, (string)i, <1.0, 1.0, 1.0>, 1.0]
        );
      }
    }
    else if(message == "off") // 小文字注意!
    {
      flag = FALSE;
      llOwnerSay("TEXT OFF");
      llSetLinkPrimitiveParamsFast(
        LINK_SET,
        [PRIM_TEXT, "", <1.0, 1.0, 1.0>, 1.0]
      );
    }
    else if(message == "ガッ") // 半角カタカナ注意!
    {
      llOwnerSay("TEXT OFF & REMOVE");
      llSetLinkPrimitiveParamsFast(
        LINK_SET,
        [PRIM_TEXT, "", <1.0, 1.0, 1.0>, 1.0]
      );
      llRemoveInventory(llGetScriptName());
    }

    listen_handle = llListen(0, "", llGetOwner(), "");
  }
}




ざっくりと説明すると、
1.スクリプトをプリムに入れる
2A.Touchする → 表示-非表示切り替え
2B.パブリックチャンネル(=0チャンネル)でオーナーが…
 on → テキストON
 off → テキストOFF
 ガッ → テキストOFF & スクリプト削除


1.38で新しく来たところについては太字にしてあるっす。
参考にどうぞっす。

[2010/04/16]
listenイベントも追加したっす。
メッセージはテキトーに変えてくださいっす。

1 件のコメント:

Free Avatar