この数年、、、できないと思い込んでいたことが、今日できることに気がつきました!
オブジェクトのインベントリの中の「ノートカード」。これ、もう最初から「タイムスタンプとかないし、どれ修正したかわからない」と思い込んでいたんです。
で、スクリプトが扱うノートカードの制限ってあるにかしら?と思い wiki を見ていたら、、、「ノートカードは不変」の項目を見つけ、、、。
できるじゃん!!!!私、これ4~5年は無理だとあきらめてたのにっ!
wiki のノートカードの説明
つまり、、、修正した時点で実は新しいオブジェクトとなり、Key が変わる!ってことなんです。それだと修正されたノートカードがどれかわかりますね!
で、書いてみた~。
list noteKey = [];
list noteList = [];
integer noteNum;
init(){
noteKey = noteList = [];
noteNum = llGetInventoryNumber(INVENTORY_NOTECARD);
if(noteNum>0){
integer i = 0;
for(;i<noteNum;++i){
string tName = llGetInventoryName(INVENTORY_NOTECARD,i);
noteList += tName;
noteKey += llGetInventoryKey(tName);
}
llWhisper(0,(string)llGetListLength(noteList)+"個のノートカードをインベントリでチェック可能です。");
}else{
llWhisper(0,"ノートカードはインベントリにありませんでした。");
}
}
default{
state_entry(){
init();
}
touch_start(integer total_number){
llSay(0, "Touched.");
}
changed(integer change){
if(change & CHANGED_INVENTORY){
integer tNum = llGetInventoryNumber(INVENTORY_NOTECARD);
llWhisper(0,(string)tNum+","+(string)noteNum);
//追加
if(tNum>noteNum){
llWhisper(0,"ノートカードが追加されました。");
init();
}else if(tNum<noteNum){
llWhisper(0,"ノートカードが削除されました。");
init();
}else if(tNum==noteNum){
llWhisper(0,"ノートカードが変更されました。");
integer i = 0;
for(;i<noteNum;++i){
string tName = llGetInventoryName(INVENTORY_NOTECARD,i);
if(llListFindList(noteKey,[llGetInventoryKey(tName)])==-1){
llWhisper(0,tName+"が変更されました。");
i=noteNum;
}
}
init();
}
}
}
}
先入観って怖いわ。。。
Wikiでは変更した時点で新しいキーが割り当てられるみたいですね。
返信削除それを利用すればノートカードを書き込んだ時点でReloadを始めたりすることもできちゃいます。
Wikiって読まなきゃ駄目ねw