ソラマメ ブログ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 4人
オーナーへメッセージ
QRコード
QRCODE

気ままな一言

ご質問等、ページへのリンクはご自由に。気軽にコメントでもどうそ~
詳しいことは角川SIMのサポートセンターまでいらっしゃいませっ

世間知らずなので逆にいろいろ教えてください♪

2008年03月15日

チップジャー

以前のブログコメントにも出ましたが、少し前にととごくへ私のチップジャー置きました。^^

その時にもらったのが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




同じカテゴリー(サンプル)の記事
  (2007-12-06 03:50)
Posted by れむ at 19:48 │サンプル