2008年02月18日
飛行機
先日、知り合いから、「輸送機タイプのツアーライドできる?」と言われてスクリプトを作成しました。
意外と良い出来だったので、旅客機を作っていれてみました。

で、さっそく MagSL 一周の飛行をしてみました。飛行機なので当然気球で一周するよりも早いのですが、それでも20分かかりました。

意外と良い出来だったので、旅客機を作っていれてみました。

で、さっそく MagSL 一周の飛行をしてみました。飛行機なので当然気球で一周するよりも早いのですが、それでも20分かかりました。

2008年01月06日
琴のスクリプト
春の海を奏でる琴のスクリプトを作ってみました。サウンドはkeyで指定しているので、カット&ペーストでオブジェクトに放り込むだけで、琴の音が得られます。
オーナーのクリックにより、On/Off できます。もうお正月も終わりですが、とりあえずこれで気分を盛り上げよー。

適当に作った琴のオブジェクトに入れて、奏でています。

とにさんとPeelさんの2人と一緒にセッション。
-------------------------------------<きりとり>-------------------------------------
オーナーのクリックにより、On/Off できます。もうお正月も終わりですが、とりあえずこれで気分を盛り上げよー。

適当に作った琴のオブジェクトに入れて、奏でています。

とにさんとPeelさんの2人と一緒にセッション。
-------------------------------------<きりとり>-------------------------------------
///
/// Module Name: play_sound_by_key.lsl
/// Module Function: Play Sound using key list
/// Prim: any
///
/// Author: Chiyosuke Wise
/// Version: 1.0.1
/// Date: 2008.01.06
///
///
/// History
/// 2007.01.06 First Release
///
//
// Maximum volue = 1.0
//
float volume = 1.0; // Volume
//
// TRUE: Play Loop
// FALSE: Play Once
//
integer b_loop = TRUE;
//
// Haru no Umi
//
list tracks =[
"cb1a5f07-ac9e-56f4-5da6-ad7e355dad7d",
"7523014d-3ade-71ec-cf22-45540e023ba8",
"1c1b3f96-0cf7-6c27-9966-16131f06cdce",
"43dcd4a7-da04-2d49-da74-5288954bc3c4",
"2d9e65df-bb55-9f70-f1e5-a8507ca07a0c",
"6f909003-41c2-f838-6f6c-9cb9dca5688e",
"912917d0-6d2c-5016-2498-5218e949fffc",
"d93d8020-1d98-ef9d-f293-bc93dc541723",
"481b7b5d-5ec2-5c77-ee2b-1ce910917269",
"f7ce981b-d708-1ba4-7666-9581d20208a9",
"7db0582c-7a13-5f0d-e313-612130748b46",
"79f72248-451d-430f-b8f0-89899f156c88",
"0feca119-c55f-403b-8152-bd3d8f1670bc",
"724240a2-53f2-bbcf-891d-51376e12115f",
"9ef4b412-b664-ad0c-6971-4b74608edf41",
"bffbbc15-2a79-7f31-6fb1-b5ee8c0f7ab9",
"e4b9f7d3-a41c-e1e1-c974-198bbce1b305",
"f5f32ed1-5e78-5340-5fb0-c79f9493619b",
"df6a9490-2027-448c-881f-7c7021997741",
"8a1dfe5e-94cb-3966-39b5-12ef03d039c9",
"a78796e2-e19a-44a6-6468-d85aea02210d",
"2dc12c4d-8fd1-6ea4-7a29-a8a26920d9d0",
"635ab695-1ff9-3c75-ff20-7d0145b2487e",
"f9470afe-fd6f-5d11-48ce-127500d16181",
"4dfe9602-b635-91fb-3ba3-f4e1e5562dfc",
"2d9ab666-3f39-3fcc-90a7-0d074507c6b6",
"5cc393c5-a534-5ea4-65f0-661bc67690a9",
"8da23943-def2-deab-523f-6a971225e9e4"];
integer b_play;
integer g_sound_loop;
key track_key;
integer num_tracks;
start() {
llSetSoundQueueing(TRUE);
g_sound_loop = 2;
b_play = TRUE;
track_key = llList2Key(tracks,0);
llSetTimerEvent(10.0+7.0/(num_tracks+1));
llPlaySound(track_key, volume);
track_key = llList2Key(tracks,1);
llPreloadSound(track_key);
llPlaySound(track_key, volume);
}
// Stop immediately
stop() {
b_play = FALSE;
llSetSoundQueueing(FALSE);
llPlaySound(llList2Key(tracks,0),0.0);
llStopSound();
}
default {
state_entry() {
num_tracks = llGetListLength(tracks);
stop();
llPreloadSound(llList2Key(tracks,0));
}
on_rez(integer start_param) {
llResetScript();
}
touch_start(integer total_number) {
if (llDetectedKey(0)!=llGetOwner()) {
llDialog(llDetectedKey(0), "\nOnly Owner can switch", ["OK"], 1000);
return;
}
if (b_play) {
stop();
llOwnerSay("Stop Sound");
}else{
start();
llOwnerSay("Start Sound");
}
}
timer() {
if (b_play) {
if (g_sound_loop>=num_tracks) {
if (b_loop) {
llSleep(10);
start();
return;
}else{
b_play = FALSE;
llSetTimerEvent(0);
return;
}
}
track_key = llList2Key(tracks,g_sound_loop++);
llPreloadSound(track_key);
llPlaySound(track_key, volume);
}
}
}
2008年01月06日
気球で年賀状
テクスチャによる年賀状を沢山のひとからいただき、「わぁ、自分でも作らなきゃ」とおもいつつ、1月5日になってしましました。とりあえず、Kalenの上空を飛んでいる、麻雀倶楽部&将棋クラブの気球をパチリと撮って、年賀状に仕立ててみました。
#そもそも、このスクリーンショット撮る前は、気球のテクスチャ画像を年賀状代わりに配っていた時期も・・・・。
そういう意味では、この気球はChiyosukeからの年賀状といえなくもないかも。

First Look からの眺めは、綺麗。世界が輝いて見えます。
特にKalen上空の気球からの眺めは絵になります。
MagSL の tokyo 1 の上空にも約1時間掛けて気球が飛んでいますが、First Lookで遠くまで見えるような設定にしたときのMirai やSantory simの風景、向こう岸に見えるtokyo 2の風景を眺めるとまた格別です。Akiba のArare Cafe の前に、気球の現在位置を示す地図を設置してあるので、ぜひ一度、搭乗してみてください。
#そもそも、このスクリーンショット撮る前は、気球のテクスチャ画像を年賀状代わりに配っていた時期も・・・・。
そういう意味では、この気球はChiyosukeからの年賀状といえなくもないかも。

First Look からの眺めは、綺麗。世界が輝いて見えます。
特にKalen上空の気球からの眺めは絵になります。
MagSL の tokyo 1 の上空にも約1時間掛けて気球が飛んでいますが、First Lookで遠くまで見えるような設定にしたときのMirai やSantory simの風景、向こう岸に見えるtokyo 2の風景を眺めるとまた格別です。Akiba のArare Cafe の前に、気球の現在位置を示す地図を設置してあるので、ぜひ一度、搭乗してみてください。
タグ :年賀状First Look
2007年12月31日
気球追跡システム
決められたコースを自動で周回する気球を作って、その試験としてMagSLのtokyo 1を一周できるようになりました。
ゆったりと飛ぶため、1周に1時間近く掛かります。その間にビューアが落ちることがしばしばあり、しかも落ちた後しばらくログインできない場合と可だと、気球がどこまで飛んでいったのかよくわかりません。
そこで、気球に現在どこを飛んでいるかを通信で報告させ、それをSL内のオブジェクトで表示するようにしました。
ついでに、表示オブジェクトをタッチすると、気球が最後に報告してきた座標に飛ぶためのマップを出すようにしてみました。
このマップは、Kandaの麻雀卓屋さんと、Kalenの将棋倶楽部に設置されています。

気球の絵柄も、クリスマスTINYだったものを着物Tinyにしました。Tinyサンタと同様、これもSenri Ohさんの作品。これらのTinyアバターは、Kandaで購入できます。

スクリプト的なことをちょっと説明すると、気球の座標は、Webサーバに llHTTPRequest() を用いて送られ、SL内のオブジェクトには、XMCデータとしてWebサーバから送られます。
ゆったりと飛ぶため、1周に1時間近く掛かります。その間にビューアが落ちることがしばしばあり、しかも落ちた後しばらくログインできない場合と可だと、気球がどこまで飛んでいったのかよくわかりません。
そこで、気球に現在どこを飛んでいるかを通信で報告させ、それをSL内のオブジェクトで表示するようにしました。
ついでに、表示オブジェクトをタッチすると、気球が最後に報告してきた座標に飛ぶためのマップを出すようにしてみました。
このマップは、Kandaの麻雀卓屋さんと、Kalenの将棋倶楽部に設置されています。

気球の絵柄も、クリスマスTINYだったものを着物Tinyにしました。Tinyサンタと同様、これもSenri Ohさんの作品。これらのTinyアバターは、Kandaで購入できます。

スクリプト的なことをちょっと説明すると、気球の座標は、Webサーバに llHTTPRequest() を用いて送られ、SL内のオブジェクトには、XMCデータとしてWebサーバから送られます。
2007年11月15日
LSLのアセンブラ
2007年10月28日
スクリプトエラーのリカバリー
あるときから、麻雀のHUDの中のスクリプトの1本(majan_find_useless_pai.lsl)が、Heap エラーで止まるようになりました。そのスクリプトは手牌の聴牌や、ツモ上がりを検出するスクリプトです。止まってしまっても、ゲームの進行は続くのですが、スクリプトが止まってしまったHUDをつけている人は、ツモ上がりやリーチが掛けられなくなります。

問題のスクリプトをリセットできれば、問題は解決します。また、当該スクリプトが止まっていることは、llMessageLinked()のメッセージの有無を観測することで、チェックができます。他のスクリプトから問題のスクリプトを llResetOtherScript() でリセットがかけられればよいのですが、llResetOtherScript() は、
This currently does not reset a script that stopped with a run-time error (like a stack-heap collision or a bounds check error), so it's of limited use.
となっていて、エラーで止まったスクリプトにリセットをかけることが出来ません。そのかわりに
llRemoteLoadScriptPin()が使えそうです。他のプリムの中に、エラーを起こすスクリプトをrunningのチェックを外した状態で置きます。さらにルートプリム中のmajan_find_useless_pai.lslが動作しているかチェックし、動いていないことを検出したら、llRemoteLoadScriptPin()で止まってしまったスクリプトを上書きし、running状態にするスクリプト(hud_alive.lsl)を設置しました。エラーで止まってしまっても、ツモが一巡以内に検出し、スクリプトを再スタートさせ、無事に続行できることが確認できました。

もっとも、こんな手法に頼らずに、Heap Error が起きないように組めればよいのですが、どこでHeap Errorが出ているのか、皆目見当がついていません。listで全く関係のないアドレスを参照している、というのが一番濃厚・・・。

問題のスクリプトをリセットできれば、問題は解決します。また、当該スクリプトが止まっていることは、llMessageLinked()のメッセージの有無を観測することで、チェックができます。他のスクリプトから問題のスクリプトを llResetOtherScript() でリセットがかけられればよいのですが、llResetOtherScript() は、
This currently does not reset a script that stopped with a run-time error (like a stack-heap collision or a bounds check error), so it's of limited use.
となっていて、エラーで止まったスクリプトにリセットをかけることが出来ません。そのかわりに
llRemoteLoadScriptPin()が使えそうです。他のプリムの中に、エラーを起こすスクリプトをrunningのチェックを外した状態で置きます。さらにルートプリム中のmajan_find_useless_pai.lslが動作しているかチェックし、動いていないことを検出したら、llRemoteLoadScriptPin()で止まってしまったスクリプトを上書きし、running状態にするスクリプト(hud_alive.lsl)を設置しました。エラーで止まってしまっても、ツモが一巡以内に検出し、スクリプトを再スタートさせ、無事に続行できることが確認できました。

もっとも、こんな手法に頼らずに、Heap Error が起きないように組めればよいのですが、どこでHeap Errorが出ているのか、皆目見当がついていません。listで全く関係のないアドレスを参照している、というのが一番濃厚・・・。
2007年10月14日
囲碁盤発見
LSLのWikiページのライブラリに囲碁のスクリプトが載っています。なので、世界のどこかには囲碁盤があるはず。
ライブラリの作者の方が参加しているグループから、定期的に囲碁対局が行われている場所(Vineland 28,133,47)を発見。
・・・超巨大な囲碁盤。

遠くからみると、こんな感じ。

ライブラリの作者の方が参加しているグループから、定期的に囲碁対局が行われている場所(Vineland 28,133,47)を発見。
・・・超巨大な囲碁盤。

遠くからみると、こんな感じ。

タグ :囲碁
2007年08月16日
将棋盤発売開始
将棋盤をKandaで発売開始しました。場所は、kanda の麻雀卓を販売している場所です。
実物は、Arare CafeやKalenの雀荘でみることができます。(8/16日現在の時点では)

続きを読む
実物は、Arare CafeやKalenの雀荘でみることができます。(8/16日現在の時点では)

続きを読む
2007年08月16日
巨大将棋盤
将棋盤、指し手の履歴を対局直後に見る機能をつけました。
プレイ用の大きめな将棋盤にも足をつけてみました。足もスカルプト。
駒とちがって、結構ガタガタ。

足がなかったころはそんなに気になりませんでしたが、思った以上に巨大。隣の通常版と比べると、2倍以上の大きさ。座ると、首から上しか見えません。(対戦中は、盤面を見下ろす形なので、まあ、関係ないといえば関係ないですが。)

それから、マニュアルも作って壁に貼っておきました。もうちょっとしたら、このマニュアルと将棋盤をセットにして、Kandaあたりでひっそりと売ろうかと目論んでいます。が、将棋をさせる人って、麻雀を打てる人よりも少ない感じが・・・。

続きを読む
プレイ用の大きめな将棋盤にも足をつけてみました。足もスカルプト。
駒とちがって、結構ガタガタ。

足がなかったころはそんなに気になりませんでしたが、思った以上に巨大。隣の通常版と比べると、2倍以上の大きさ。座ると、首から上しか見えません。(対戦中は、盤面を見下ろす形なので、まあ、関係ないといえば関係ないですが。)

それから、マニュアルも作って壁に貼っておきました。もうちょっとしたら、このマニュアルと将棋盤をセットにして、Kandaあたりでひっそりと売ろうかと目論んでいます。が、将棋をさせる人って、麻雀を打てる人よりも少ない感じが・・・。

続きを読む
2007年08月12日
将棋盤、完成
先週から作っていた将棋盤、
(1). 「打ち歩詰め」を禁じ手として打てないようにする機能と
(2). 投了機能
(3). 王手が掛かった状態で相手の番になったら即負け
(4). 座ると、盤面を見下ろす視点に設定
の機能を入れて、ほぼ完成しました。「打ち歩詰め」は、面倒だから省いちゃおうかとも思ったのですが、禁じてとして明記されているので、入れました。

全部で、131プリム。意外と大きいのは、盤面の各マスに位置決めのためのプリムが貼り付けてあるせい。ルートプリムだけはちょっと余分な感じですが、後から将棋盤の厚さを簡単に変えられるようにあえて入れたのですが、削っても良いかも。
駒: 40プリム
位置決め: 81プリム
将棋盤: 1プリム
駒台: 2プリム
投了ボタン: 2プリム
座布団: 2プリム
手番表示: 2プリム
ルートプリム: 1プリム。
------------------------------------
合計 131プリム
(1). 「打ち歩詰め」を禁じ手として打てないようにする機能と
(2). 投了機能
(3). 王手が掛かった状態で相手の番になったら即負け
(4). 座ると、盤面を見下ろす視点に設定
の機能を入れて、ほぼ完成しました。「打ち歩詰め」は、面倒だから省いちゃおうかとも思ったのですが、禁じてとして明記されているので、入れました。

全部で、131プリム。意外と大きいのは、盤面の各マスに位置決めのためのプリムが貼り付けてあるせい。ルートプリムだけはちょっと余分な感じですが、後から将棋盤の厚さを簡単に変えられるようにあえて入れたのですが、削っても良いかも。
駒: 40プリム
位置決め: 81プリム
将棋盤: 1プリム
駒台: 2プリム
投了ボタン: 2プリム
座布団: 2プリム
手番表示: 2プリム
ルートプリム: 1プリム。
------------------------------------
合計 131プリム
2007年08月10日
将棋盤その後
スカルプトで駒を作った将棋盤、富士通のニュースを見て、一度はやめちゃおうかと思った将棋盤。気を取り直して、スクリプトを仕込んで対戦可能なところまでもってきました。

とりあえず、Kalenの麻雀荘の第4卓のところにしばらく置いておきますので、興味のある方は、ぜひ遊びにきてください。麻雀卓と違って、人間が2人いないとまったく動きませんが、将棋ならば駒の動かし方がわかる方も多いと思います。
プレイ方法は、座布団に2人が座ると、対戦開始です。麻雀卓同様、盤面に手番を示す赤いインジケータがあります。

インジケータが赤く灯ったら、あなたの手番です。将棋の指し方は、まず動かしたい将棋の駒をクリックすると、黄色くハイライトされ、盤面の移動可能な範囲が水色で表示されます。盤面もしくは、水色のマスの上の駒をクリックすると、移動できます。

また、間違った駒を指定してしまった場合は、黄色くハイライトされている駒をクリックすると、選択が解除され、別の駒を選択できるようになります。
持ち駒を盤面に配置したいときも、配置したい駒をクリックしてから、置きたい場所(やはり水色でおける場所がハイライトされます)においてください。
禁じ手のうち、「打ち歩詰め 」は実装してません。2歩や敵陣1段目、2段目への桂馬、1段目への香車・歩兵の配置はできなようにしています。
続きを読む

とりあえず、Kalenの麻雀荘の第4卓のところにしばらく置いておきますので、興味のある方は、ぜひ遊びにきてください。麻雀卓と違って、人間が2人いないとまったく動きませんが、将棋ならば駒の動かし方がわかる方も多いと思います。
プレイ方法は、座布団に2人が座ると、対戦開始です。麻雀卓同様、盤面に手番を示す赤いインジケータがあります。

インジケータが赤く灯ったら、あなたの手番です。将棋の指し方は、まず動かしたい将棋の駒をクリックすると、黄色くハイライトされ、盤面の移動可能な範囲が水色で表示されます。盤面もしくは、水色のマスの上の駒をクリックすると、移動できます。

また、間違った駒を指定してしまった場合は、黄色くハイライトされている駒をクリックすると、選択が解除され、別の駒を選択できるようになります。
持ち駒を盤面に配置したいときも、配置したい駒をクリックしてから、置きたい場所(やはり水色でおける場所がハイライトされます)においてください。
禁じ手のうち、「打ち歩詰め 」は実装してません。2歩や敵陣1段目、2段目への桂馬、1段目への香車・歩兵の配置はできなようにしています。
続きを読む
2007年07月18日
llHTTPRequest() のリクエストヘッダ
SL内のオブジェクトから、llHTTPRequest() でWebサイトに情報を送ろうと、lsl Wikiを見ながら奮戦していました。Apache + PHP で組んでいたのですが、HTTPリクエストのヘッダに添付される情報が、PHPのスクリプトでどうしても取り出せない。
$_SERVER["X-SecondLife-Shard"] とか、大文字に変えればいいのかと、
$_SERVER["X-SECONDLIFE-SHARD"] とか試したのですが、全然ダメ。
結局、echo implode(",",array_keys($_SERVER)); で表示させて、確認したところ、以下のキーで$_SERVER から読み出せることが判明しました。
HTTP_X_SECONDLIFE_SHARD
HTTP_X_SECONDLIFE_OBJECT_NAME
HTTP_X_SECONDLIFE_OBJECT_KEY
HTTP_X_SECONDLIFE_REGION
HTTP_X_SECONDLIFE_LOCAL_POSITION
HTTP_X_SECONDLIFE_LOCAL_ROTATION
HTTP_X_SECONDLIFE_LOCAL_VELOCITY
HTTP_X_SECONDLIFE_OWNER_NAME
HTTP_X_SECONDLIFE_OWNER_KEY
$_SERVER["X-SecondLife-Shard"] とか、大文字に変えればいいのかと、
$_SERVER["X-SECONDLIFE-SHARD"] とか試したのですが、全然ダメ。
結局、echo implode(",",array_keys($_SERVER)); で表示させて、確認したところ、以下のキーで$_SERVER から読み出せることが判明しました。
HTTP_X_SECONDLIFE_SHARD
HTTP_X_SECONDLIFE_OBJECT_NAME
HTTP_X_SECONDLIFE_OBJECT_KEY
HTTP_X_SECONDLIFE_REGION
HTTP_X_SECONDLIFE_LOCAL_POSITION
HTTP_X_SECONDLIFE_LOCAL_ROTATION
HTTP_X_SECONDLIFE_LOCAL_VELOCITY
HTTP_X_SECONDLIFE_OWNER_NAME
HTTP_X_SECONDLIFE_OWNER_KEY


