ソラマメブログ

2007年06月20日

アクセスカウンタ

最近微妙なネタしかなかったりするので、世界展で設置していたアクセスカウンタを紹介してみようかと思います。

設置は、人が踏みそうな場所に薄い板などを置いてスクリプトを入れるだけ。
同じグループの人がタッチすると人数を教えてくれます。

integer gMax = 50;
integer gCnt;
list gName;
default{
collision_start(integer n){
integer i;
for(i=0; i<n; i++){
if(llDetectedType(i) & AGENT){
string name = llDetectedName(i);
if(llListFindList(gName, [name]) < 0){
gCnt++;
gName = gName + [name];
}
}
}
integer m = llGetListLength(gName);
if(m > gMax){
gName = llDeleteSubList(gName, m - gMax, gMax);
}
}
touch_start(integer n){
key id = llDetectedKey(0);
if(llSameGroup(id)){
llInstantMessage(id, "Counter: "+(string)gCnt);
}
}
}

ある人数までは同じ人が踏んでも加算されません。
センサーではなくコリジョンを使用してるので環境にはやさしいとは思いますが、広くていろんな方向から人が来たり、人がずっと乗り続ける場所(床全体に仕込むとか)にはあまり向かないかもしれませんね。

多分ファントムなオブジェでも大丈夫だったと思います。※ファントムにする場合はもう一工夫必要でした(state_entry(){llVolumeDetect(TRUE);} を追加)。うまく囲って使ってやってくださいませ。



この記事へのトラックバックURL

http://tomoneko.slmame.com/t10935
この記事へのコメント
とても参考になります。
グループのほうのサイトにお気に入り登録させてもらいました。
また遊びに来ます^^
Posted by 真雪 at 2007年06月20日 12:27
phantomにした場合は、collision系のイベント(land_collisionを除く)を起こさなくなりますので、実は使えなかったりします…。
http://rpgstats.com/wiki/index.php?title=Phantom

phantomにしながらcollisionイベントを取るには、llVolumeDetectをTRUEにすると良いです(TRUEにすると強制的にphantomになります)
http://rpgstats.com/wiki/index.php?title=LlVolumeDetect
Posted by みやおか at 2007年06月20日 12:41
> 真雪さん
いらっしゃいませ。
微妙に情報量は少ないですが、何かの参考になれば。

> みやおかさん
おおっと、その通りでした。ご指摘ありがとうございます。
遅くなりましたが、本文の方訂正させていただきました。
Posted by ともねこ at 2007年06月21日 03:48
はい、参考にさせていただきますー^^
Posted by 真雪 at 2007年06月21日 10:35