2009年08月13日

マップが開かなくて、困っています

すみません。

実は、ランドマークを読み込む形の簡単テレポートというスクリプトをブログで見つけたので、使ってみました。

そうしたら、このスクリプトは、同じSIM内の移動のためのテレポートで、LMを使うからと言って、他のSIMにテレポートできるものとは、違っていました。

それで、自分で改良してダイアログで、行き先を選択してSLURLをチャットに表示して、テレポートする形のものを作りました。

これは、完成したのですが・・・

SLURLで出来たのだから、マップを開いてテレポートする形も出来るのでは?と思い、早速改良しました。


それで、座標を下記の方法で、変換してマップにいれるようにしました。


string f;


f = "<"+(string)X+","+(string)Y+","+(string)Z+">";
pos = (vector)f;



ここからは、リッスンのイベントの中にあります。
llMapDestination(Name, pos, ZERO_VECTOR);

X,Y,Zが整数のため、一度文字に変換しています。
既に僕が作った上下に移動する乗り物は、この変換方法で、オブジェクトの高度の設定などが出来ています。
それで、今回も、マップの座標にいれるだけでと思ったのですが、上手く行きません。

僕は、ランドマークのタイトルに書かれているSIM名、座標を読み取ってそれをSLURL変えるスクリプトを作りました。


 僕が最初に見たスクリプトの一部です。
 一番初めにLMの名前を読み込んでいますが、そこは、省略しました。

touch_start(integer total_number){//触られると実行
if(lname!=""){
llMapDestination(llGetRegionName(), pos, );//マップを開く
//llGiveInventory(llDetectedKey(0),lname);//この行を有効にするとLMを渡す
}
}//

dataserver(key qid, string data){//リクエストに対するリターンが有れば実行
if (qid==rid){ rid="";pos=(vector)data;}//LMを読み取る(リターン)
}//



とりあえず、僕のllMapDestinationの手前で、チャットでSIMと座標を確認にたら、ちゃんと入っています。
ただ、座標の方は、正しい座標の後ろ小数点以下にゼロが、4桁くらい並んでいました。

やっぱり、小数点以下のゼロが、いけないのでしょうか?
それとも、ベクトルに変換するやり方が悪いのでしょうか?

すいません。
教えてください。
お願いします。




同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by miracle☆  at 10:19 │Comments(5)スクリプト関連

この記事へのコメント
タッチイベントじゃないとマップは使えないはずです。
Posted by DHR at 2009年08月13日 11:50
後はアタッチメントであれば、オーナーに対して、という限定付で他のイベントでも使えます。

マップ表示の関数自体には、「誰に」表示すると言う引数がありませんよね。

タッチイベントでは自動的に「さわった人」としてくれるのですが、リッスンイベントでは自動的に発言者にはしてくれないのです。

これは、spam防止のための仕様のようなものですね。
Posted by RoyalTurkey Marksetin at 2009年08月13日 12:33
http://wiki.secondlife.com/wiki/LlMapDestination

↑詳しくはここを。
英語ですが、大抵のSLwikiのページは同一項目の日本語ページより英語ページのほうが情報量が多いです。日本語ページはたまに言葉足らずだったり誤解を招きそうな表現になっている場合もあります。
たまにそういうの見つけたら、日本語のほうを修正とか追加するんですけどね・・・。

実験したところ、右手に装着したアタッチメントの中に入れたスクリプトでは、state_entryイベントからの呼び出しでも、timerイベント、listenイベントからの呼び出しでも問題なくマップ表示出来ました。

あと、文字列のベクトルにキャストを使って変換するとき、integerにキャストしてからstringにキャストすれば、小数点はなくなると思います。

string f_str;
float flt=5.625468;

f_str=(string)((integer)flt);

llSay(0,f_str);

上記のコードを適当にstate_entryにでも放り込んでみてください。
"5"が表示されます。
Posted by RoyalTurkey Marksetin at 2009年08月13日 13:04
DHRさん、ありがとうございます。

設置型のオブジェクトで使う場合は、タッチイベントのみ有効なんですね、

助かりました。

ありがとうございます。
Posted by miracle☆ at 2009年08月13日 13:36
RoyalTurkey Marksetin さん、ありがとうございます。

とっても、助かりました。

アタッチすれば、タッチ以外のイベントでも使えるんですね。

早速、アタッチさせて、やってみます。

それから、小数点を消す方法も、とても助かりました。

ありがとうございます。
Posted by miracle☆ at 2009年08月13日 13:40
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。