気ままな一言
2008年03月15日
チップジャー
以前のブログコメントにも出ましたが、少し前にととごくへ私のチップジャー置きました。^^
その時にもらったのがZEROさんところのスクリプトでした。
最初はメッセージだけ変更するつもりでしたが、
折角なので自分なりに改良しようと思いました。
と、気付いたら、全部書き直していましたーw
--- 主な機能 ---
・個人毎の支払い累計でランキング表示
・最終支払者の表示
・支払い合計表示
・過去の支払履歴確認
ちょうどこの頃からみんな金額表示をやめてしまったのですが、
私だけテストも兼ねてそのままです。。
なので支払い人数が増えたときなど不具合が出るかもしれません。
スクリプトのLSLソースは載せておきますので改変はご自由に。
テキスト部分などを書き換えるといいでしょう。
重複チェックの手法はチップジャー以外でも使えると思います。
お礼はチップで~w
ちなみにカウンター横に物理で転がっていますwww
その時にもらったのがZEROさんところのスクリプトでした。
最初はメッセージだけ変更するつもりでしたが、
折角なので自分なりに改良しようと思いました。
と、気付いたら、全部書き直していましたーw
--- 主な機能 ---
・個人毎の支払い累計でランキング表示
・最終支払者の表示
・支払い合計表示
・過去の支払履歴確認
ちょうどこの頃からみんな金額表示をやめてしまったのですが、
私だけテストも兼ねてそのままです。。
なので支払い人数が増えたときなど不具合が出るかもしれません。
スクリプトのLSLソースは載せておきますので改変はご自由に。
テキスト部分などを書き換えるといいでしょう。
重複チェックの手法はチップジャー以外でも使えると思います。
お礼はチップで~w
ちなみにカウンター横に物理で転がっていますwww
//============================================================================== // チップジャー // Remiel Little //============================================================================== integer SHOW_MAX = 3; // 表示する人数 //------------------------------------------------------------------------------ list payList = []; // 支払いリスト [ 金額, 名前, …… ] integer total = 0; // 合計 string lastName; // 最後に支払った名前 integer lastAmount; // 最後に支払われた金額 //------------------------------------------------------------------------------ SetText() { integer i; integer j; string msg = "チップはここへ" + "\n"; integer len = llGetListLength(payList) / 2; // 金額と名前でセットなので // 上位の人を表示 if (len > SHOW_MAX) { len = SHOW_MAX; } for (i = 0, j = 0; i < len; i++, j+=2) { msg += (string)(i + 1) + ". " // 順位 + llList2String(payList, j + 1) + "様" // 名前 + "(" + llList2String(payList, j) + "L$)" // L$ + "\n"; } msg += " \n"; // 最後にくれた人 if (lastAmount > 0) { msg += "Last:" + lastName + "様" + "(" + (string)lastAmount + "L$)" + "\n"; } // チップ合計 msg += "Total:"+ (string)total + "L$"; // テキスト表示 llSetText(msg, <1.0, 1.0, 1.0>, 1.0); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ default { state_entry() { SetText(); } money(key id, integer amount) { string name = llKey2Name(id); lastName = name; lastAmount = amount; total += amount; // 累計 // 重複チェック integer index = llListFindList(payList, [ name ]); if (index >= 0) { // 置換 amount += llList2Integer(payList, index - 1); // L$加算 payList = llListReplaceList(payList, [ amount, name ], index - 1, index); } else { // 新規追加 payList += [ amount, name ]; } // 金額順にソート payList = llListSort(payList, 2, FALSE); SetText(); // リストが増えすぎたら削除 if (llGetFreeMemory() < 1024) { integer n = (1024 - llGetFreeMemory()) / 100 + 1; // 適当…… payList = llDeleteSubList(payList, -2 * n, -1); // 後ろからいくつか消す } } // money touch_start(integer total_number) { // オーナーのタッチで過去の支払いリスト表示 if (llDetectedKey(0) == llGetOwner()) { integer i; integer j; integer len = llGetListLength(payList) / 2; for (i = 0, j = 0; i < len; i++, j+=2) { llOwnerSay((string)(i + 1) + ". " + llList2String(payList, j + 1) + " (" + llList2String(payList, j) + "L$)"); } } } // touch_start } // default
Posted by れむ at 19:48
│サンプル