れむ
2008年03月15日 19:48
//============================================================================== // チップジャー // 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); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ 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