Archive for the ‘secondlife’ Category

セカンドライフからtwitter再び   2 comments

Posted at 2:06 am in computer,secondlife

以前セカンドライフからtwitterに書き込みできるインチキリンデンスクリプトを掲載した記憶があるのですが、それから幾星霜(おおげさ)。ようやく自分の書き込みがセカンドライフに表示(というかチャットに流れるのですが)されるようにしてみました。

もちろん前回同様にTwitter Mobileを使用するわけですが、これまた前回以上にソースを修正する必要があります。面倒なので詳しくは説明しませんが、llHTTPRequestに合わせてはき出されるHTMLを短くする、というかもはやHTMLじゃないですが、まあ、短くすると言うことですね。あと、セカンドライフは基本的にUnicodeを使ってるのでそのへん気を遣う必要があります。

以下はセカンドライフ側のソース。

key login_id;
key say_id;
key read_id;

string requestUrl=”http://example.jp/index.php?”;
string ses_key;
string user_name=”YujiKazan”;
string passwd=”うんこ”;
string twit_mes;
integer mode=0;

string getSLURL(){
string sim_name=llGetRegionName();
vector sim_pos=llGetRootPosition();
string sim_x=(string) llRound (sim_pos.x);
string sim_y=(string) llRound (sim_pos.y);
string sim_z=(string) llRound (sim_pos.z);
string SLURL=”http://slurl.com/secondlife/”+sim_name+”/”+sim_x+”/”+sim_y+”/”+sim_z;
return(SLURL);
}

default
{
state_entry(){
state listen_stop;
}
}

//スキャンします
state chat_listen{
state_entry(){
llOwnerSay(“listen start”);
llSetColor(<255.0,255.0,255.0>,ALL_SIDES);
llListen(83,””,NULL_KEY,””);

//60秒ごとに読み込み
llSetTimerEvent(60.0);
}
touch_end(integer i){
state listen_stop;
}

//聞いたよ
listen(integer channel,string name,key id,string message){
string owner=llGetOwner();

login_id = llHTTPRequest(requestUrl,[HTTP_METHOD,”POST”, HTTP_MIMETYPE, “application/x-www-form-urlencoded”],”user=”+user_name+”&pass=”+passwd+”&mode=login”);
//wassrと一緒で
twit_mes=message+” “+getSLURL()+” “;
//モードを書き込みに
mode=1;
}

timer(){
login_id = llHTTPRequest(requestUrl,[HTTP_METHOD,”POST”, HTTP_MIMETYPE, “application/x-www-form-urlencoded”],”user=”+user_name+”&pass=”+passwd+”&mode=login”);
//モードを読み込み
mode=0;
}

http_response(key requestid, integer status, list metadata, string body){
//正常なときはrequestidにはllHTTPRequestの戻り値と同じkeyが返ってくるらしい
if (requestid == login_id) {
//ses_key=body;

//UTF-8にしたらゴミが付いたので
integer body_length=llStringLength(body);
//ケツから26だけ切り出す
ses_key=llGetSubString(body,body_length-26,body_length);

llOwnerSay(“twitter OK!”);
llOwnerSay((string)ses_key);

if(mode==0){
read_id=llHTTPRequest(requestUrl+”key=”+ses_key+”&status=update”, [HTTP_METHOD,”GET”], “”);
llOwnerSay(requestUrl+”key=”+ses_key+”&status=update”);
}
else if(mode==1){
say_id = llHTTPRequest(requestUrl,[HTTP_METHOD,”POST”, HTTP_MIMETYPE, “application/x-www-form-urlencoded”],”mode=write&type=&name=&key=”+ses_key+”&command=&comment=”+twit_mes);
}
} else if(requestid == say_id){
//llOwnerSay(body);
llOwnerSay(“投稿しました”);
}
else if(requestid == read_id){
llOwnerSay(body);
//\nが区切りみたいなの
list chat_list=llParseString2List(real_body, [“\n”], []);
//リストから取り出し
integer i=0;
integer chat_length=llGetListLength(chat_list);
for(i=0;i< chat_length-1;i++){
llSay(0, llBase64ToString(llList2String(chat_list, i)));
}
}
}else {
llOwnerSay((string)status+” error”);
}
}
}

state listen_stop{
state_entry(){
llOwnerSay(“listen stop”);
llSetColor(<.0,.0,0.0>,ALL_SIDES);
llSetTimerEvent(0.0);
}
touch_end(integer i){
state chat_listen;
}
}

これをHUDなんかにすると、セカンドライフにいながらTwitterの読み書きができるのでちょっと便利ですよ。

Written by bogus on 6月 10th, 2008

「セカンドライフ」って何で叩かれてるの?   no comments

Posted at 2:04 pm in secondlife

もう4月です。そろそろ過去問をDBに投入したりしなきゃいけないなあと夢の無職生活を妄想したりしていますが、現実は厳しくなぜか順調に出世して仕事に追われています。つか忙しすぎ。でもローンがあるのですよ!

まあローンが終わる頃にはリストラされて無職っぽいですけどねw会社人生のスピードが早すぎです。

そんな愚痴を書いててもしょうがないので仕事の一環ということで関係者的な視点から「セカンドライフって終わったって言われてるけど何だったの?」的なことを書きつつ、スクリプトのことなんかを書いてみようと思いますよ。

世間でよく言われている「セカンドライフ」の終わってる点として挙げられているのは

・アバターがきもい
・目的がないのはイヤだ
・電通乙
・英語嫌い

みたいなのがあると思うのですが、

まず上2つは

「自分で作ればいいじゃない」

で終わり。
他のネットゲームと違って、プラットフォームなんですよね。そのへんリンデンラボもいってるわけですが。
なのでゲーム雑誌の取材なんか受けないとかなんとかあるわけですが、それはおいといて、

なんつか、Windowsが面白いか面白くないかって、面白いわけねーだろ的なことと一緒でセカンドライフってプラットフォームだけだと面白いわけがない。
普通のゲームだとそれで終わりなんですが、セカンドライフだと「作れる」じゃないですか。
イヤなら自分で何とかすればいいのに… そのへんの面白さが伝わってないのかなあと思います。

オンラインゲームだと自分は消費するしかできないけど、自力で(制限はありますが)ゲームだって作れるんだからそのへんやってみればいいのになあ。
しかも、他のゲームと違ってすげえ簡単に物って作れるわけじゃないですか、あとテクスチャだって貼り込める(1点5円ほどかかりますが)し。

あと、自分で作った物を見ながらウダウダ話してみたり、リアルタイムで作った物について話ができたりするってそんな環境今までなかったと思うのですよね。

まとめてみると
「自分で物が作れる、しかもタダ! しかも動かせる! しかもそれを肴にウダウダ話ができる!」

みたいなことだと思うのですよ。

今までに3Dオブジェクトをタダでちょっとクリックするだけで作れて、
そのオブジェクトにプログラム入れたらぐりぐり動いて、しかもインターネット上でみんなが見れて
その作った物の感想がリアルタイムに聞けるものあったか? ないだろ?

お前ら昔のPCでプログラム書いてたとき、遅い!って怒ったか? グラフィックがヘボいって文句いったか?
そんなことより目の前の箱使って限界まで作り込んだだろ?

ちょっと熱くなってしまいましたw失礼

みたいな、ちょっとまだ環境的には貧弱でバグもいっぱいあるけれど、こんな物作りのプリミティブな楽しさを感じられる魅力的なツールなのに、なぜかよくわからないマスコミが、よくわからない「金儲け」とかいうキーワードでくくってしまったからどうにもわけがわからなくなってしまったみたいで。。

で、マスコミということでよく出てくる電通ですが、ほとんど絡んでません。詳しくは書けませんが1プレイヤーですよ。

なので、電通(笑)とかいってる人は絶対ニワカw

まあ、文句言う前に1回でもログインしてみて、どっかで積み木組み合わせてみたり、服作ってみたり、円柱にプログラム組み込んで空飛ばしたり、メール送りまくってみたりしてみようじゃないですか。

あと、英語嫌いな人は知りません(w
まあほとんどのことは日本語で何とかなってるのでコミュニケーション不全の人以外はいいんじゃないのかなあ。
えっと、で、その物作りと、物をぐりぐり動かすためのスクリプトを紹介させていただこうと思ったのですが、長くなってしまったので次のエントリに続きます(たぶん)

Written by bogus on 4月 3rd, 2008

セカンドライフシム検索アップデート   no comments

Posted at 6:09 pm in secondlife,おしらせ

いろいろ新創刊の雑誌などにかかわってまして、以上に忙しかった挙句、終わったら寝込むという地獄のような3ヶ月だったわけで、このブログの更新に割く気力もネタも残っているわけもなく、しばらくぶりの登場です。こんにちは。

ということで、ちょっぴりゆとりも出てきましたので猫を愛でる日々…というわけでなく懸案となっていましたシム検索のちょっぴりアップデート。地図の表示ができなくなっていたのを最近のMAP APIに対応させました。わーい。ということでセカンドライフシム検索にアクセスしてみてください。

セカンドライフシム検索
http://sec.ondlife.net/
その他やってることについてはまた後ほど。

Written by bogus on 12月 15th, 2007

Tagged with

セカンドライフ検索アップデート   1 comment

Posted at 2:17 pm in secondlife

週末からコツコツ作っているセカンドライフシム検索ですが、「マグスル」や「メルティングドッツ」などの名前でも検索できるようにちょっとだけアップデートしました。
せっかくの平日休みだというのにいったい何をやっているのでしょうね。

Written by bogus on 8月 21st, 2007

セカンドライフのシム検索   no comments

Posted at 6:48 pm in secondlife

最近のおすすめシムはyaoi kingdomで、みんなに言いふらしています。あとペドキャラも作れる3Dが得意な人に会ったので、ちょっと面白いことができるかもなあと妄想に耽っておりますがそれはおいといて。

セカンドライフのシムを探すのには基本的に地図から検索するしかないのですが、これがまた後方にしかマッチしなくて非常に困ったかんじ。

そんなわけであんなデータを使ってシムを検索できるようにしてみました。

シム検索

検索だけじゃアレなので、一応URLにしておいたので、見つけたシムには飛べるはず。
japanはこんなにあったのね。とびっくりすることも多いので、とりあえず試してみてくださいませ。

あと

リンデンスクリプトのWiki

も地道にやってるので見てみてください。

Written by bogus on 8月 19th, 2007

セカンドライフからtwitter   no comments

Posted at 5:59 pm in secondlife

セカンドライフForum

というサイトに関わることになりました。遊びに来てください。

それはおいといて、自分の周りの数人がtwitterというのをやっていて、とはいえ流行ってるなんてこともないのでほっといたのだが、先ほど送られてきたhjの最新号を読んでいるとtwitterの記事が書かれていたので、セカンドライフからtwitterに書き込めたらいいなあと思ったので、とりあえず登録してコードを書いてみた。
Read the rest of this entry »

Written by bogus on 8月 11th, 2007

セカンドライフ日本語メニューの変更   no comments

Posted at 6:26 pm in secondlife

ようやく日本語版として以前の怪しい日本語メニューからは改善された物ができあがってきたのですが、それでもまだちょっと怪しいとかこの表現はイヤだなあと、修正したいなあと思っていたところ、実は

C:\Program Files\SecondLife\skins\xui\ja
にあるファイルを修正すりゃなんとかなるんじゃないの?ということで早速自分好みに調教してやることにしました。

まずはサクッと第一弾、ほぼ全角を半角に変えただけです。

http://bogus.jp/menu_japanese001.zip

使い方は簡単。

これをダウンロードして解凍して、

C:\Program Files\SecondLife\skins\xui\ja

の中にあるファイルと置き換えるだけ。
もし、このせいで何か起こっても絶対に責任は取らないので、自己犠牲の精神でがんばってください。

他の人が各方言バージョンでも作ればいいなあと思います。

あと、関係ないけど↓のような本が出ますよ。よろしくね。
セカンドライフで作る リンデンスクリプト入門(CDROM付)

Written by bogus on 7月 17th, 2007

セカンドライフHTTPスキャナ   no comments

Posted at 3:13 pm in secondlife

引き続きセカンドライフというアレなものに時間を割かれていて更新も原稿もままなりません。
文句ばかり言っても無駄なので、リンデンスクリプトでHTTPスキャナを書いてみました。
http://bogus.jp:80/みたいなかんじでポートスキャナを作ろうかと思ったのですが、HTTPサーバからGETできない限りポートが空いてても閉じててもレスポンスが499が返ってくるのであきらめて、HTTPが空いてるかどうかスキャンするようにしてみました。あんまり役に立ちません。工夫すればリンクチェッカーとかに使えるかもしれませんが。。
key requestId;
string requestUrl;
integer addr=1;
default
{
state_entry(){
state stop_scan;
}
}

//スキャンします
state start_scan{
touch_end(integer i){
state stop_scan;
}
state_entry(){
llSetTimerEvent(10.0);
llSay(0,”scan start”);
}

timer(){
requestUrl=”http://192.168.75.”+(string)addr+”/”;
llSay(0,”requestUrl:”+requestUrl);
requestId = llHTTPRequest(requestUrl,[HTTP_METHOD,”GET”,HTTP_MIMETYPE,”text/plain;charset=utf-8″],””);
if(addr>255){
addr=1;
}else{
addr++;
}
}
http_response(key request_id, integer status, list metadata, string body){
//正常なときはrequest_idにはllHTTPRequestの戻り値と同じkeyが返ってくるらしい
if (request_id == requestId) {
llSay(0,body);
} else {
llSay(0,(string)status+” error”);
}
}
}

state stop_scan{
state_entry(){
llSay(0,”scan stop”);
}
touch_end(integer i){
state start_scan;
}
}

Written by bogus on 6月 16th, 2007

セカンドライフ   no comments

Posted at 3:22 pm in secondlife

このところセカンドライフというのにどっぷりでして(仕事で)、更新も原稿もままならない状況です。
とはいえゴールデンウィークと言うことでちょっぴり時間もできたので、最近さわっているセカンドライフのスクリプトでも貼り付けることにします。

YouTubeっぽいのが貼ってあるのを見つけたので、自分もやってみようと思ったのですが、挫折。調べてみたところ実はQuickTimeだったということがあったので、とりあえず単純なQTのストリーミングを見るスクリプトを。

float start_time = 3.0;
float playtime_length = 20.0;

default
{
state_entry()
{
//動画に使用するテクスチャをセット
llParcelMediaCommandList( [
PARCEL_MEDIA_COMMAND_TEXTURE, (key)llGetTexture(0)]);
}

touch_start(integer total_number){
llSay(0, “Please say the filename to show….”);
state playing;
}
}

state playing{
state_entry(){
llListen(0,””,llGetOwner(),””);
}

listen(integer channel,string name,key id,string message){
string url = llGetObjectDesc() + message;
llSay(0, url);
llParcelMediaCommandList([
PARCEL_MEDIA_COMMAND_URL, url,
PARCEL_MEDIA_COMMAND_AGENT, llDetectedKey(0),//オブジェクトのキーを返す
PARCEL_MEDIA_COMMAND_TIME, start_time,//早送りしてみたり
PARCEL_MEDIA_COMMAND_PLAY]);
list Info = llParcelMediaQuery([PARCEL_MEDIA_COMMAND_URL,
PARCEL_MEDIA_COMMAND_TEXTURE]);//流れている動画を取得
llOwnerSay(“Playing ‘” + llList2String(Info, 0) +
“‘ on texture ‘” + (string)llList2Key(Info, 1) +
“‘ for agent ” + llDetectedName(0));
//再生時間を決める
llSetTimerEvent(playtime_length);
}

touch_start(integer total_number){
llParcelMediaCommandList( [PARCEL_MEDIA_COMMAND_STOP] );
state default;
}
//タイマイベント
timer()
{
llParcelMediaCommandList( [PARCEL_MEDIA_COMMAND_STOP] );
llSetTimerEvent(0.0);
state default;
}
}
土地ごとに流せる動画は1つのようなので、いろいろ見るには工夫が必要なのかも。

Written by bogus on 5月 3rd, 2007