2022/10/30

MyTipjar アップデート

ひさびさの製品アップデートです。
友達のお店で試しに使ってもらってた機能がうまくいってるみたいなので製品に反映しました。
変更点はジャーへのスタッフのログイン・ログアウトを基本自動にしたこと。

製品記事: チップジャーからボードに連絡

タッチでログインできるのは同じですが、タッチし忘れても、場所を移動しても、1番近いジャーに自動でログインします。いなくなればもちろんログアウトも自動。
タッチ忘れを気にしなくていいので楽なのと、お客さんが来られてからログインすると、なにかチップをおねだりしてるように見られないか、とか気にせずにすみます。

自動ログインの仕掛けは、タッチがあったとき、お客さんから入金があったとき、一定時間ごとに、センサーを起動してまわりのスタッフとジャーの位置を調べてジャーの近くのスタッフをログインリストに入れ直します。

センサー部分のスクリプトはこちら:

  sensor(integer n)
  { // 自動ログイン: まわりを調べてユーザーを更新; n:人数
    InKeys = []; // ログインユーザーIDリスト(チップをもらう)
    InNames = []; // 名前
    // 1) まわりのユーザーを検出(入金者を除いて)
    list userids = []; // ユーザーIDリスト(仮)
    list userposs = []; // 位置
    key id;
    integer i;
    for(i=0; i<n; ++i) { // まわりの人を順に調べる
      id = llDetectedKey(i);
      if (isUserNotDonor(id)) { // 入金者でないユーザーなら
        userids += [id]; // ユーザーIDリスト(仮)に加える
        userposs += [llDetectedPos(i)]; // 位置
      }
    }
    // 2) まわりの他のジャーを調べてログインユーザーを更新
    // 他のジャーがなければ全ユーザー
    vector pos;
    float d0;
    integer m = llGetListLength(JarPoss); // 他のジャー
    integer j;
    float d;
    n = llGetListLength(userids);
    for (i=0; i<n; ++i) { // まわりのユーザー(チップをもらえる)
      if (JarPoss) { // まわりに他のジャーがあるとき
        pos = llList2Vector(userposs,i); // ユーザーの位置
        d0 = llVecDist(pos,Pos); // このジャーとユーザーの距離
        for (j=0; j<m; ++j) { // まわりの他のジャーを調べる
          d = llVecDist(pos,llList2Vector(JarPoss,j));
            // まわりのジャーとユーザーの距離
          if (d<d0) jump next; // 他のジャーが近い人は除外
        }          
      }
      id = llList2Key(userids,i);
      InKeys += [id]; // ログインユーザーIDリストに加える
      InNames += [agentName(id)]; // 名前          
      @next;
    }
    if (0<Amount) shareAmount(); // 3) 入金があったときは分配
    setText(); // 4) 更新結果を表示
  }

SLマーケットプレイス
https://marketplace.secondlife.com/p/lovemax-MyTipjar/8322026
前のバージョンをお買い上げいただいてるお客様でアップデートご希望の方は lovemax までご連絡ください。無償で最新バージョンの製品をお届けします。