> HOME

  

Posted by at

早くも引越し?!

2012年06月08日

さて、このブログは開設してまだ間もないというのに、早くも引越しという運びになりました。
理由は皆さんご想像のとおり、無料ブログの商用利用違反疑惑です。

スクリプトの話をいろいろ書きたいわけですが、どうしても商品の話になったり、お店のデモで試せるよとか、商売へ誘導するような、ふくよかな匂いが漂うわけですよね。
だけどそういう匂いを一切排除するとなると、せっかく読んでいただいたお客さんに対して、肝心のところの説明がなかったり、どこで見れるか試せるかがわからないという、不親切になってしまいます。

そういうわけで、そんな不便のない別のブログに引越すことにしました。
新しいブログは、内容と関係ない広告がでてこないという利点もあって、とても快適です。

ここで新ブログへのリンクを書くと、また商用ブログへの誘導疑惑が発生するので、ここにリンクは書きませんが、本文ではなく、サイドバーのお気に入りにあるリンクは商用利用の例外らしいので、参考にしてみてください。

それでは皆様、またSL内のどこかで、または新しいブログでお会いいたしましょう。ごきげんよう。
  


Posted by lovemax at 19:03

飛行船でデモ飛行

2012年06月07日

お店に展示してある飛行船は「デモ飛行」ができます。
店が狭いので、半分に切ってありますが、性能にかわりはありません。

動かすには、船のどこかに座ってから、船体にタッチします。
操縦には、キーボードの矢印キー(前後左右)と PageUp・PageDownキー(上下)を使います。
止まるには、もういちどタッチするか、立ち上ってください。
あと、デモ飛行船は、もとの場所にもどさなくても大丈夫です。
乗客が降りると、勝手に消えるし、元の場所には新しい展示用の飛行船が出るようになってます。

スクリプトでは、飛行船オブジェクトを「乗り物」に設定し、それっぽい動きをするいろいろな設定をします。
細かいところは全部すっとばして、操縦のとこだけ一部を書くと…

矢印キーはふだん歩いたり飛行したりに使ってるので、これを飛行船操縦用に切り変えます。
// ------------
default {
 touch_start(integer total_number) { // タッチで矢印キーのコントロールを取る許可を依頼
  llRequestPermissions(llDetectedKey(0), PERMISSION_TAKE_CONTROLS);
 }
 run_time_permissions(integer perm) {
  if ( perm ) { // 許可を得てそれぞれ矢印キーのコントロールを取る
   llTakeControls(CONTROL_FWD | CONTROL_RIGHT | // 「↑」「→」(以下省略)
  }
 }
 control(key id, integer level, integer edge) { // 矢印キーを押したり離したりした時
  if(level & ~edge & CONTROL_FWD) { // 「↑」キーを押してるとき
   if( LinearMotor.x < 50 ) LinearMotor.x += 10; // 前進
   LinearMotor.z = 0;
  }
  if(level & ~edge & CONTROL_RIGHT) { // 「→」キーを押してるとき
   if ( AngularMotor.x < 2.5 ) AngularMotor.x += 0.5; // 右へ傾ける
   if ( -5 < AngularMotor.z ) AngularMotor.z -= 1; // 右回り回転
  }
  // (ほかは省略)
  fly( LinearMotor, AngularMotor);
 }
}

fly( vector linear_motor, vector angular_motor) { // 飛行船を動かす
 llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, linear_motor );
 llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );
}
// ------------
…こんな感じです。

参考:乗り物制作のチュートリアル
http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial/ja

築地で見かけたら、ぜひ乗り心地を試してみてください。
  


Posted by lovemax at 12:39

ノートもらえます

2012年06月06日

お店で売ってる商品で下のような表示のある箱からは、ノートももらえます。

右クリックででるメニューの「Get Note」を選ぶとノートカードが来ます。
説明や使い方が書いてありますので、参考にしてください。

このスクリプトは商品と一緒に入っていて、お店でお買いあげいただいたお客様には、おまけとして差し上げてます。内容は、
// ------------
string Note = ""; // ノートカードの名前
default {
 state_entry() {
  Note = llGetInventoryName(INVENTORY_NOTECARD, 0); // まずノートの名前を調べる
  if (Note) llSetTouchText("Get Note");
    // ノートがあれば右クリックメニューの「タッチ」を「Get Note」に変える
  else llSetTouchText(""); // なければもとに戻す
 }
 touch_start(integer total_number) {
  if (Note) llGiveInventory(llDetectedKey(0), Note); // 誰かがタッチしたらノートを渡す
 }
 changed(integer change) {
  if(change & CHANGED_INVENTORY) llResetScript(); // 中身が変わったら最初から
 }
}
// ------------
  


Posted by lovemax at 17:30

テレポート

2012年06月05日

上空にはアダルトショップもあって、地上のお店の端っこにあるテレポーター(デモ商品)を使って行けます。

タッチするとメニューが出て行先を選べ、うにうにと出現する怪しげな物体に座ると、それが目的地まで運んでくれるしかけです。

目的地まで運ぶしくみは、スクリプトの中で、プリムのパラメーター設定をする llSetPrimitiveParams() を使っています。
人が座っているオブジェクトを移動させるためで、位置設定の llSetPos(<x,y,z>) と同じことをするため、llSetPrimitiveParams([PRIM_POSITION,<x,y,z>])というふうに書きます。
なぜこちらを使うかというと、llSetPos() で動ける距離が10mしかなく、遠くに行くためには何度も繰り返さないといけないのですが、繰り返すたびに0.2秒休憩してしまうので、時間もかかり、テレポという感じじゃなくなります。
このことは llSetPrimitiveParams() でも同じなのですが、裏技があって、[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]というふうに同じことを繰り返して書いておけば、(10mづつ)何度動いても休憩は1回だけ、なので一瞬で行ったようになります。
そこで、行先までの距離を10mで割って、何回繰り返すか調べ、その回数分の長~いリスト[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]を作って、それで llSetPrimitiveParams() を呼び出すわけです。

スクリプトで書くと、こうなります。
// ------------
jumpPos(vector pos) { // posは目的地の<x,y,z>
 list rules = [];
 integer n = (integer)(llVecDist(pos, llGetPos()) / 10.0) + 1;
 for ( ; 0<n; --n ) rules += [ PRIM_POSITION, pos ];
 llSetPrimitiveParams(rules);
}
// ------------
llSetPrimitiveParams()の詳しい説明はこちら
http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja
  


Posted by lovemax at 16:56

築地のお店

2012年06月04日

「築地場外市場」にあるお店です。

通販ショップだけでなく、SLの中にも店をもってしまったわけですね。
ここでは、デモとかができるようにしています。
買う気がなくても、飛行船に乗って遊んだりできますよ。

場所はこちら、と書くとブログの商用利用違反になるらしいので、違反の例外らしい右のお気に入りをご参考に。

写真の、作業しているフリをしているのは人型の私です。どうぞ気になさらずに^^
  


Posted by lovemax at 09:06