2008年05月11日
チャットキャンプ2
チャットキャンプって、本当にどう作ればいいんだろーー><;;
誰かヒントください。w
で、悩んでても仕方ないので、listenを使ったチャットキャンプを作ってみました。
うーん、でもこれならshoutにも反応する><
むずかしいよー
amountは1回に支払うL$,intervalは最低待機時間(秒),maxaddingは待機時間の最大加算値(秒)です。
ある程度ランダムにしないといけないと思ったので,支払い間隔は,最低待機時間+ランダムに選んだ加算値にしてます。
下の場合だと,2分に「1~60秒」を足した時間ごとに,次にしゃべった人に1L$を支払います。
integer amount = 1;
integer interval = 120;
integer maxadding = 60;
default
{
state_entry()
{
llListen(0, "", NULL_KEY, "");
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT); }
listen(integer channel, string name , key id ,string message)
{
llGiveMoney(id,amount);
llSay(0,"Congratulations!! " + name );
integer adding = llFloor(llFrand(maxadding));
llSleep(interval + adding);
}
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp off");
llSetText("Camp off",<1.0,0.0,0.0>,1.0);
state campoff;
}
}
}
state campoff
{
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp on");
llSetText("",<1.0,0.0,0.0>,1.0);
state default;
}
}
}
誰かヒントください。w
で、悩んでても仕方ないので、listenを使ったチャットキャンプを作ってみました。
うーん、でもこれならshoutにも反応する><
むずかしいよー
amountは1回に支払うL$,intervalは最低待機時間(秒),maxaddingは待機時間の最大加算値(秒)です。
ある程度ランダムにしないといけないと思ったので,支払い間隔は,最低待機時間+ランダムに選んだ加算値にしてます。
下の場合だと,2分に「1~60秒」を足した時間ごとに,次にしゃべった人に1L$を支払います。
integer amount = 1;
integer interval = 120;
integer maxadding = 60;
default
{
state_entry()
{
llListen(0, "", NULL_KEY, "");
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT); }
listen(integer channel, string name , key id ,string message)
{
llGiveMoney(id,amount);
llSay(0,"Congratulations!! " + name );
integer adding = llFloor(llFrand(maxadding));
llSleep(interval + adding);
}
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp off");
llSetText("Camp off",<1.0,0.0,0.0>,1.0);
state campoff;
}
}
}
state campoff
{
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp on");
llSetText("",<1.0,0.0,0.0>,1.0);
state default;
}
}
}
2008年05月10日
チャットキャンプ
チャットキャンプのスクリプトを作ってみました。
うまく動くのかなー?
amountは1回に支払うL$,intervalはチャットしている人がいるか探す間隔(秒),areaは人を探す範囲(m)です。
センサーはオブジェクトの正面から半球の範囲にしています。(PI_BY_TWO)
また、オーナーはタッチでキャンプのオフを出来るようにしました。
integer amount = 1;
integer interval = 30;
integer area = 30;
integer index;
default
{
state_entry()
{
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
llSensorRepeat("",NULL_KEY,AGENT,area,PI_BY_TWO,interval);
}
sensor(integer total_number)
{
index = llFloor(llFrand(total_number));
if (llGetAgentInfo(llDetectedKey(index)) & AGENT_TYPING ){
llGiveMoney(llDetectedKey(index),amount);
llSay(0,"Congratulations!! " + llDetectedName(index));
}
}
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp off");
llSetText("Camp off",<1.0,0.0,0.0>,1.0);
state campoff;
}
}
}
state campoff
{
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp on");
llSetText("",<1.0,0.0,0.0>,1.0);
state default;
}
}
}
うまく動くのかなー?
amountは1回に支払うL$,intervalはチャットしている人がいるか探す間隔(秒),areaは人を探す範囲(m)です。
センサーはオブジェクトの正面から半球の範囲にしています。(PI_BY_TWO)
また、オーナーはタッチでキャンプのオフを出来るようにしました。
integer amount = 1;
integer interval = 30;
integer area = 30;
integer index;
default
{
state_entry()
{
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
llSensorRepeat("",NULL_KEY,AGENT,area,PI_BY_TWO,interval);
}
sensor(integer total_number)
{
index = llFloor(llFrand(total_number));
if (llGetAgentInfo(llDetectedKey(index)) & AGENT_TYPING ){
llGiveMoney(llDetectedKey(index),amount);
llSay(0,"Congratulations!! " + llDetectedName(index));
}
}
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp off");
llSetText("Camp off",<1.0,0.0,0.0>,1.0);
state campoff;
}
}
}
state campoff
{
touch_start(integer total_number){
if (llDetectedKey(0) == llGetOwner()){
llSay(0,"Camp on");
llSetText("",<1.0,0.0,0.0>,1.0);
state default;
}
}
}
2008年05月10日
プロフィールの写真
プロフィールの写真を自動的に表示するスクリプトを作ってみました。
SLの各個人ホームページからプロフィール写真のUUIDをとってきています。
key requestid;
string resident;
integer index;
default{
state_entry()
{
llSensorRepeat("",NULL_KEY,AGENT,30,PI,30);
}
sensor(integer total_number)
{
index = llFloor(llFrand(total_number));
requestid = llHTTPRequest("http://world.secondlife.com/resident/"+(string)llDetectedKey(index),[HTTP_METHOD,"GET"],"");
}
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == requestid)
{
integer i = llSubStringIndex(body,"http://secondlife.com/app/image/");
if ( i != -1 )
llSetTexture((string)llGetSubString(body,i+32,i+67),ALL_SIDES);
}
}
}
SLの各個人ホームページからプロフィール写真のUUIDをとってきています。
key requestid;
string resident;
integer index;
default{
state_entry()
{
llSensorRepeat("",NULL_KEY,AGENT,30,PI,30);
}
sensor(integer total_number)
{
index = llFloor(llFrand(total_number));
requestid = llHTTPRequest("http://world.secondlife.com/resident/"+(string)llDetectedKey(index),[HTTP_METHOD,"GET"],"");
}
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == requestid)
{
integer i = llSubStringIndex(body,"http://secondlife.com/app/image/");
if ( i != -1 )
llSetTexture((string)llGetSubString(body,i+32,i+67),ALL_SIDES);
}
}
}


