2008年02月18日
プリムカウンター(リンデンスクリプト Tips)
土地に存在するプリム数をカウントするスクリプトです。 その土地のMAXプリム数及び現在の使用プリム数、残りの利用可能プリム数を表示します。 また、オブジェクトのオーナー毎のプリム数(上位5人まで)を表示します。表示は、10秒毎に 更新されます。プリム数を土地情報から毎回確認する必要がないので便利です。不審なプリ ムもすぐに気付くことができますw* 注1:このスクリプトの実行には、その土地のオーナー権限が必要です。 * 注2:土地にグループ所有のオブジェクトがある場合、正常に動作しません。 * 注3:土地に一時オブジェクトがある場合、数値(prims available)が土地情報の数値と異なる結果になります。 * グループ別や一時プリムの数値を調べたいときは、こちらを参考下さい。
「スクリプト内容」 // // SHOP ZERO Tips22 PrimCounter Script v1.0 // // Created by Zero2000 Kid 2008/02/18 // float cycle=10; integer read_count; integer maxprims; integer total; integer owner_count; list primlist; string mes; default { state_entry() { llSetText("", <1,1,1>, 1); maxprims=llGetParcelMaxPrims(llGetPos(),FALSE); llSetTimerEvent(cycle); } on_rez(integer int) { llResetScript(); } timer() { list tmplist =llGetParcelPrimOwners(llGetPos()); owner_count=llGetListLength(tmplist)/2; integer i; primlist=[]; for (i=0; i < owner_count; i++) { primlist+=llList2Integer(tmplist,2*i+1); primlist+=llList2Key(tmplist,2*i); } primlist=llListSort(primlist,2,FALSE); if (owner_count>4) owner_count=5; read_count=0; total=0; mes=""; llRequestAgentData(llList2Key(primlist,1), DATA_NAME); } dataserver(key queryid, string data) { string OwnerName=data; string primcount=llList2String(primlist,2*read_count); mes+="No."+(string)(read_count+1)+" "+OwnerName+"("+primcount+")\n"; total+=(integer)primcount; read_count++; if (read_count < owner_count) { llRequestAgentData(llList2Key(primlist,2*read_count+1), DATA_NAME); } else { mes+="-------------------------\n"; mes+="total:"+(string)total+"/"+(string)maxprims+"\n"; mes+=(string)(maxprims-total)+" prims available."; llSetText(mes, <1,1,1>, 1); } } } 「スクリプトの説明」 全体の流れとしては、タイマーイベントを利用して、10秒サイクルでllGetParcelPrimOwnersを 実行し、プリム数をチェックしています。 1. まず最初に、state_entryが呼び出され以下の3つのコマンドが実行されます。 // フローティングテキストの初期化。 llSetText("", <1,1,1>, 1); // その土地で許される最大プリム数を取得します。 maxprims=llGetParcelMaxPrims(llGetPos(),FALSE); // タイマーイベントの開始。 llSetTimerEvent(cycle); 2. タイマーイベント(timer)の呼び出し タイマーイベントの中では、まず土地に存在するプリムのオーナーリスト(オーナーUUIDと所有プ リム数)を取得し、そのリストを昇順にソートしています。オーナーリストの取得には、llGetParcel PrimOwnersというコマンドを利用します。 list tmplist =llGetParcelPrimOwners(llGetPos()); このコマンドは、指定した座標の土地に存在するプリムの内訳をオーナー毎にリスト形式で返します。 具体的には、[ オーナー1のUUID,オーナー1のプリム数, オーナー2のUUID,オーナー2のプリム数, ... ] という感じです。詳しくは、llGetParcelPrimOwnersを参照ください。 owner_count=llGetListLength(tmplist)/2; // プリムオーナー数を取得します。 integer i; // 変数定義 primlist=[]; // リスト変数初期化 // ソートコマンドが使用できるように、オーナーリストの偶数番目(オーナーKEY)と奇数番目(プリム数)の // 要素を入れ替えます。 for (i=0; i < owner_count; i++) { primlist+=llList2Integer(tmplist,2*i+1); primlist+=llList2Key(tmplist,2*i); } // ソートコマンドで、プリム数の昇順にオーナーリストを並び替えます。 // ソートコマンドについては、llListSortを参照ください。 primlist=llListSort(primlist,2,FALSE); // プリムオーナー数が5名以上の場合は、5名を上限とする。(表示制限) if (owner_count>4) owner_count=5; 3. オーナー名称の取得 llGetParcelPrimOwnersで得られるオーナーの情報は、名称ではなくUUIDです。分かりやすいようにUUID から名称に変換します。UUIDから名称に変換するコマンドは、2種類あります。llKey2NameとllGetAgentInfoです。 llKey2Nameに関しては、アバターが同一SIM内に存在していなければ名前を取得できないので、今回は、 llGetAgentInfoを使用します。 // アバターのUUIDを元に、アバターの名称を要求します。 llRequestAgentData(llList2Key(primlist,1), DATA_NAME); llRequestAgentDataが実行されるとdataserverイベントが発生します。dataserverイベントの中では、所有 オーナーの数だけllRequestAgentDataを繰り返し、名称変換及びプリム数の加算を行います。全てのリクエストが 終了すると最後にフローティングテキストで結果を表示します。 リンデンスクリプト Tips Intexへ
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
Posted by Zero2000 Kidd at 22:31│Comments(6)
│リンデンスクリプトTips
この記事へのコメント
相変わらず。。。
見ても意味不wwww
うちのWEB担当者が
参考にこのブログみてるぞおおおwww
見ても意味不wwww
うちのWEB担当者が
参考にこのブログみてるぞおおおwww
Posted by take at 2008年02月19日 13:47
どんどん参考にしてくれw
Posted by ZERO
at 2008年02月20日 00:33

あ、これいいですね^^
さっそくやってみます,(^o^)m
さっそくやってみます,(^o^)m
Posted by rino schnyder at 2008年05月30日 21:04
いつも参考にさせてもらってます^^
質問なのですがグループ所有のオブジェクトが土地内にある場合表示されない(おそらく土地情報が読み込めない)のですがなぜでしょうか?
質問なのですがグループ所有のオブジェクトが土地内にある場合表示されない(おそらく土地情報が読み込めない)のですがなぜでしょうか?
Posted by yoppy runo at 2008年09月04日 12:14
解決しました^^
UUIDを名前に変換するときグループ所有物は変換できないため表示しないのですね^^
お騒がせしました。
UUIDを名前に変換するときグループ所有物は変換できないため表示しないのですね^^
お騒がせしました。
Posted by yoppy runo at 2008年09月04日 17:11
ありがとう
Posted by wedding dresses at 2011年09月19日 15:51