2008年02月15日
キャンプスクリプト
キャンプスクリプトを作ってみました。
メッセージは英語だとそっけないので
日本語にしています。
この設定だと
上限10L$
17分ごとに2L$の支払いとなってます。
string message1 = "44Kt44Oj44Oz44OX44OB44Kn44Ki44O844Gn44O844GZ77yB";
string message2 = "44GM";
string message3 = "5YiG44GU44Go44Gr5pSv5omV44KP44KM44G+44GZ44CC";
string message4 = "6YCj57aa44Gn";
string message5 = "TCTjgb7jgafjgafjgZnjgII=";
string message6 = "44GM44Kt44Oj44Oz44OX5Lit44Gn44GZ44CC";
string message7 = "5YiG57WM6YGO44CC";
string message8 = "5pmC6ZaT44GM55+t44GE44Gu44Gn44GK5pSv5omV44Gn44GN44G+44Gb44KT44CC";
string message9 = "44GV44KT44CC44GK55ay44KM5qeY44Gn44GX44Gf44CC";
string message10 = "TCTjgpLjgYrmlK/miZXjgYTjgZfjgb7jgZfjgZ/jgII=";
integer paylimit = 10;//支払い上限
integer minunit = 17;//支払い時間の単位
integer payunit = 2;//支払い金額の単位
integer nowminute = 0;//現在の経過時間
key sitid = NULL_KEY; //座ったアバターのID。
string sitname = "";//座ったアバターの名前
init()
{
nowminute = 0;
sitid = NULL_KEY;
sitname = "";
setPayText(FALSE);
llSetTimerEvent(0.0);//タイマーの停止
}
setPayText(integer torf)
{
string ptxt = llBase64ToString(message1)+"\n"+(string)payunit+"L$"+llBase64ToString(message2)+(string)minunit+llBase64ToString(message3)+
"\n"+llBase64ToString(message4)+(string)paylimit+llBase64ToString(message5);
if(torf)
{
ptxt = ptxt + "\n"+sitname+llBase64ToString(message6)+(string)nowminute+llBase64ToString(message7);
}
llSetText(ptxt,<1,1,1>,1.0);
}
pay()
{
integer paymoney = (nowminute / minunit) * payunit;//支払い金額生成
if(paymoney == 0)
{
llSay(0,llBase64ToString(message8));
}
else
{
if(paymoney>paylimit)//支払い上限チェック
{
paymoney = paylimit;
}
llSay(0,sitname+llBase64ToString(message9)+(string)paymoney+llBase64ToString(message10));
llGiveMoney(sitid,paymoney);
}
init();
}
default
{
state_entry()
{
llSitTarget(<0,0.1,0.5> , <0,0,0,1>); //イスの位置
llSetText("CAMP\nnot available.",<1,0,0>,1.0);//パーミッションが来るまでは支払い不可
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);//パーミッションを得る
}
on_rez(integer num)
{
llResetScript();
}
run_time_permissions(integer perm)
{
if(perm & PERMISSION_DEBIT)
{
state payable;
}
}
}
state payable
{
state_entry()
{
init();
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent != NULL_KEY)
{
init();
sitid = agent;
sitname = llKey2Name(sitid);
llSetTimerEvent(60);
setPayText(TRUE);
}
else
{
pay();
}
}
}
timer()
{
nowminute++;//1分経過ごとに増やす
setPayText(TRUE);//支払い金額を変更
}
}
メッセージは英語だとそっけないので
日本語にしています。
この設定だと
上限10L$
17分ごとに2L$の支払いとなってます。
string message1 = "44Kt44Oj44Oz44OX44OB44Kn44Ki44O844Gn44O844GZ77yB";
string message2 = "44GM";
string message3 = "5YiG44GU44Go44Gr5pSv5omV44KP44KM44G+44GZ44CC";
string message4 = "6YCj57aa44Gn";
string message5 = "TCTjgb7jgafjgafjgZnjgII=";
string message6 = "44GM44Kt44Oj44Oz44OX5Lit44Gn44GZ44CC";
string message7 = "5YiG57WM6YGO44CC";
string message8 = "5pmC6ZaT44GM55+t44GE44Gu44Gn44GK5pSv5omV44Gn44GN44G+44Gb44KT44CC";
string message9 = "44GV44KT44CC44GK55ay44KM5qeY44Gn44GX44Gf44CC";
string message10 = "TCTjgpLjgYrmlK/miZXjgYTjgZfjgb7jgZfjgZ/jgII=";
integer paylimit = 10;//支払い上限
integer minunit = 17;//支払い時間の単位
integer payunit = 2;//支払い金額の単位
integer nowminute = 0;//現在の経過時間
key sitid = NULL_KEY; //座ったアバターのID。
string sitname = "";//座ったアバターの名前
init()
{
nowminute = 0;
sitid = NULL_KEY;
sitname = "";
setPayText(FALSE);
llSetTimerEvent(0.0);//タイマーの停止
}
setPayText(integer torf)
{
string ptxt = llBase64ToString(message1)+"\n"+(string)payunit+"L$"+llBase64ToString(message2)+(string)minunit+llBase64ToString(message3)+
"\n"+llBase64ToString(message4)+(string)paylimit+llBase64ToString(message5);
if(torf)
{
ptxt = ptxt + "\n"+sitname+llBase64ToString(message6)+(string)nowminute+llBase64ToString(message7);
}
llSetText(ptxt,<1,1,1>,1.0);
}
pay()
{
integer paymoney = (nowminute / minunit) * payunit;//支払い金額生成
if(paymoney == 0)
{
llSay(0,llBase64ToString(message8));
}
else
{
if(paymoney>paylimit)//支払い上限チェック
{
paymoney = paylimit;
}
llSay(0,sitname+llBase64ToString(message9)+(string)paymoney+llBase64ToString(message10));
llGiveMoney(sitid,paymoney);
}
init();
}
default
{
state_entry()
{
llSitTarget(<0,0.1,0.5> , <0,0,0,1>); //イスの位置
llSetText("CAMP\nnot available.",<1,0,0>,1.0);//パーミッションが来るまでは支払い不可
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);//パーミッションを得る
}
on_rez(integer num)
{
llResetScript();
}
run_time_permissions(integer perm)
{
if(perm & PERMISSION_DEBIT)
{
state payable;
}
}
}
state payable
{
state_entry()
{
init();
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent != NULL_KEY)
{
init();
sitid = agent;
sitname = llKey2Name(sitid);
llSetTimerEvent(60);
setPayText(TRUE);
}
else
{
pay();
}
}
}
timer()
{
nowminute++;//1分経過ごとに増やす
setPayText(TRUE);//支払い金額を変更
}
}



