2025/02/15

ワゴンセールス2025

今年2025年のベネチアカーニバルは2月15日(土)から3月4日(火)まで。
lovemax もサンマルコ広場の特設ワゴンセールスに出店しました。
場所は海側です。
出品物はここ4年同じもの。
例によってサボってます(^^;;

2024/08/14

広告飛行船を予約

広告看板飛行船を出すのに日にち指定で予約できるようにしました。

今までは飛行船の設定はイベント当日に行うか 設定済みの箱を用意しておいても当日にはタッチで起動しなければなりませんでした。
それを当日会場に来れないような場合でも日にち指定で予約できるようにしました。

日にち指定は飛行船を出す箱を編集してオブジェクト名("Airship Go Round Signboard Box")のところに予約日の数字を書きます。
書き方に決まりはなく 1〜31 の数字がどこかにあればそれは予約日とみなされます

写真は 予約日を指定した状態の箱です。この状態で今まで通り手動でタッチしてもスタンバイ状態になるし 日付が予約日になれば自動でスタンバイになります。

スクリプトはこんな感じ:

timer()
{
  integer scheduleday = getScheduleDay(); // オブジェクト名の中に書いた予約日を読む
  integer today = zoneDay(llGetTimestamp()); // 今日の日付
  if (today==scheduleday) { // 今日が予約日なら
    llMessageLinked(LINK_SET,Common,"State:standby",NULL_KEY); // スタンバイに
    llSetTimerEvent(0); // タイマーを止める
  }
}

ここで今日の日付を知る zoneDay(llGetTimestamp()) ですが タイムスタンプはUTC(協定世界時)なので日本とは9時間の時差があります。
日本の真夜中はUTCではまだ前日です。そこで日付をくり上げるのですが 問題なのは月末で31日は32日でなく1日にしなければなりません。
そのためには今日が月末日なのかどうかを月から また2月なら閏年かどうかも調べなくてはなりません。

月末日を調べるスクリプトは:

integer lastDay(integer year,integer month)
{
  if (0<=llListFindList([4,6,9,11],[month])) return 30;
  else if (month != 2 ) return 31; // 1,3,5,7,8,10,12,0(1月の前月はちょうど12月)
  else if (year%400 == 0) return 29; // 2400,2800,..(とうぶん来ないけど)
  else if (year%100 == 0) return 28; // 2100,2200,..(まだまだ先だけど)
  else if (year%4 == 0) return 29; // 2028,2032,..
  else return 28; // 2025,2026,2027,..
}

2024/01/27

ワゴンセールス2024

今年2024年のベネチアカーニバルは1月27日(土)から2月13日(火)まで。
lovemax もサンマルコ広場の特設ワゴンセールスに出店しました。
場所は海側です。
出品物は去年おととしと同じもの。
思いっきりサボってますねー(^^;;

2023/02/04

ワゴンセールス2023

今年2023年のベネチアカーニバルは2月4日(土)から21日(火)まで。
lovemax もサンマルコ広場の特設ワゴンセールスに出店してます。
ちょうど去年とほとんど同じ場所のワゴンが空いてました。

今年は新製品開発をサボったので 去年と同じものを置いてます。
詳しくは去年2月の記事を見てください:
ベネチアSIMカーニバル, 特設ワゴンセール, びっくり?宝箱
去年 びっくり?宝箱 の出品がちょっと出遅れましたが 今年はじっくり見ていただけます。
(タッチでデモが始まります。)

2023/01/09

2つ目の箱

広告看板飛行船を出す箱を2つ置いたときは 先に置いた箱が消えて最後の箱だけが有効になるようにしました。

イベント会場が変わったり準備していた場所が違っていたりなど イベントではなにかとハプニングがつきものです。
そんなときでも慌てなくていいように 宣伝飛行船は最後に置いた箱だけ有効!ということになってれば安心です。
で 有効な箱だけ残ってほかが自動で消えてくれれば混乱も起きません。

写真は 最初に右奥の箱で準備をしていたけれど あとから左手前の箱を置き直した というような場合です。
新しい箱に広告画像を貼ってスタンバイ状態にすると 先に置いた右奥の箱が消えて無効になり 左手前の箱が有効で残ります。

スクリプトはこんな感じ:

link_message(integer from, integer class, string state, key id) {
  if (state=="standby") {
    llRegionSay(Channel,"Clear"); // "Clear" を言って飛行船やほかの箱を消す
    llListen(Channel,"",NULL_KEY,"Clear"); //  自分も(ほかからの) "Clear" を聞く準備
    // (...)
  }
}
listen(integer ch, string na, key id, string msg) {
  llDie(); // ほかの箱から "Clear" を聞いたら自分を消す
}

llListen()listen() は自分自身の発言は聞かない仕様になってます。
なのでもし聞こえたのならほかの箱からの指令だというわけで 最後に "Clear" 指令を出した箱だけが残るというしかけです。

2022/12/11

メリークリスマス!

シーズンものということで クリスマスツリーを作ってみました。

クリスマスツリーの特徴といえば 何といってもあの円錐形と飾り付けですね。
リアルなら植木鉢が必要なところですが SL なら鉢も木の幹も省略できて 1プリムの円筒にテーパーをつければ空中で回転もできます。

回転してるように見せるには テクスチャーのアニメーションを設定します:

default {
  state_entry() {
    llSetTextureAnim(ANIM_ON|SMOOTH|LOOP,
        ALL_SIDES,1,1,1,1,0.1);
  }
}

不思議なのはこういうふうにすると 平面のはずのテクスチャーが 何か奥行きのある飾りのように立体的に見えてくることです。
おそらくテーパーをつけた円筒の表面を分割する具合で アニメーションの動きに微妙なずれができて それが錯覚になるのでしょう…

このクリスマスツリーはベネチアのお店で飾りを兼ねて お客さんに無料でプレゼントしています。
メリークリスマス!

2022/11/04

寄付を匿名で

更新した友だちからの要望に、チップジャーに入金した人の名前を表示しない設定もあります。

世の中には「寄付は必ず匿名で」という方もいらっしゃるようです。
ただ、友だちがいうにはそんな奥ゆかしい話ではなくて、アダルトなお店のときチップの額とか名前が出るのは欲が見えてしまうようで照れくさいとか決まりが悪いのだそうです。

通常(デフォルト)では写真のように、ジャーにログインしてるスタッフの名前, 合計入金額入金者金額を表示します。

これを匿名の寄付にするにはジャーの中にあるスクリプトの設定を書きかえます。
スクリプト pay user の18行目

integer ShowDonor = TRUE;

と書いてある TRUE(はい)を FALSE(いいえ)にします。

同じように、寄付があったときのジャーのリアクション・エフェクトを控えめにしたり無しにしたりもできます。
設定するにはチップジャーの Gold Coins/金貨 プリムの中にある action スクリプトを書きかえます。(6〜8行目)

integer Effect = TRUE; // パーティクル効果 TRUE: あり, FALSE: なし
vector Colour = <1,0.7,1>; // パーティクルの色 <(Red),(Green),(Blue)>
float Volume = 1.0; // 0-1 効果音のボリューム

なお、写真にあるジャーの表示の1番下 So Far: の金額はそのジャーに今まで入金された累積額を表しています。
これも友だちの要望から追加した機能で、この金額はスクリプト内の変数ではなく、プリムの 説明 に記録しています。
説明に1以上の数字を書き込んでおくと、入金があるたびに金額が加算されジャーの上に表示されます。
説明が空または数字以外のときには So Far: は出ません。
なので1番最初の金額はジャーを編集して書いておく必要があります。記憶を頼りに、または希望かそれとも見栄で(^^)~~