Second Lifeで気に入ったアイテムの記録です あ、ウソです。スクリプトとか他のことも書いてます

2008/08/08

土地とDeedとなんとか

ということで、だーいぶ前から趣味的にyoutubeのplayerとかいじってるわけですが
土地とDeedの関係で、設定がめんどくさかったりします。

で、設定できないならできないで
なんでできないのか言ってくれれば
設定しやすいのかなと。

こんなチェック関数作ってみました。
最初に、必要な情報を全部とってますが
実際には、必要なタイミングでとったほうがいいですね。
とりあえずは、わかりやすさ優先で。

あ、メッセージは日英で書いてますが
英語は適当です。

integer f_chk_parcel()
{
list l_parcel = llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_OWNER,PARCEL_DETAILS_GROUP]);
list l_obj = llGetObjectDetails(llGetKey(),[OBJECT_GROUP]);
key k_parcel_owner = llList2Key(l_parcel,0);
key k_parcel_group = llList2Key(l_parcel,1);
key k_object_group = llList2Key(l_obj,0);
key k_owner = llGetOwner();

// OK
if(k_parcel_owner==k_owner){
// GROUP DEED OK
// OWNER OK
return TRUE;
}
llWhisper(0,"この土地のmedia設定ができません。");

if(k_parcel_group!=NULL_KEY){
// 土地がグループ設定されています
if(k_parcel_group==k_parcel_owner){
// 土地はDeedされています
llWhisper(0,"この土地はグループの土地です");
llWhisper(0,"this parce is group DEED parcel");

if(k_object_group==NULL_KEY){
llWhisper(0,"オブジェクトにはグループ設定を行いDeedしてください");
llWhisper(0,"Please set group at object");
// オブジェクトのグループ設定がされていません
}else{
// オブジェクトのグループ設定がされています
if(k_object_group!=k_parcel_group){
llWhisper(0,"このオブジェクトと土地のグループが違います");
llWhisper(0,"The group of the object is different from parcel");
}else{
if(k_object_group!=k_owner){
// オブジェクトがグループDeedされていません
llWhisper(0,"オブジェクトをグループにDeedしてください");
llWhisper(0,"Please DEED object at group");
}
}
}
}else{
llWhisper(0,"この土地はグループ設定されていますがDeedされていません");
llWhisper(0,"this parce is NOT group DEED parcel");
// 土地はDeedされていません
}
}else{
// 土地がグループ設定されていません
// ここはあなたの土地ではありませんので
// media設定ができません
llWhisper(0,"ここはあなたの土地でも、グループの土地でもありません");
llWhisper(0,
"you are not Parcel Owner\n"
+"\t need parcel set group\n"
+"\t need object set group and deed"
);
}
return FALSE;
}

2 コメント:

Hidenori Glushenko さんのコメント...

抜け道がないかいろいろ想定してみましたが・・・・w

1つだけ気になったのは、ユーザーがグループのロールで「Change music & media settings」権限を持っている場合、オブジェクトをDeedしなくても土地のメディアを書き換えられるかどうかということなんですが、試してみたところ、ユーザーが権限を持っていてもオブジェクト(スクリプト)からの変更は行えないようでした。

というわけで、このチェック関数イイですねw



ところでふと思ったのは、グループへのDeed権限のあるユーザー(ユーザー自身はメディア変更権限を持たない)がグループDeedの土地でプリムをrezできれば、スクリプトから土地のメディア設定を書き換えられる、ってことになってしまうんですかねぇ。

グループヤヤコシスw

you Xiao さんのコメント...

たしかにややこしい...
結局、Deedした場合
「ロールに関係なく、
 土地オーナーと同等のことができる」
と考えちゃえばいいのかもですね。

こないだ、
Deedしたものをシフトコピーした時に
なんかヘンになったのが、少し気になってます。