本体はチューブをパスカット(B:0.250,E:0.550ぐらい)して、カットした側がベンダー正面になるように薄くします。それで商品表示用の面の番号が5、操作パネル用の面は0になります。操作パネルは「← →」って感じのテクスチャを作って貼り付けてくださいね。。。写真のと同じでよかったら llSetTexture("2f3d3767-0c2e-b646-2ae7-c7c1a4946a46",0); をstate_entryに追加して表示させてください。
// 均一価格商品ベンダー
integer price=50; // 価格
string item; // 表示中の商品名用変数
string texture; // 商品のテクスチャ用
integer number; // アイテム数
integer cur=0; // ポインタ用
string get_texture(string name)
{
integer i;
integer j=llGetInventoryNumber(INVENTORY_TEXTURE); // テクスチャ数
string str;
for (i=0; i < j; i++) {
str=llGetInventoryName(INVENTORY_TEXTURE,i); // テクスチャ名
if (str == name+".pic") return str; // 商品名.picが見つかったらテクスチャ名を返す
}
llWhisper(0,"Texture not found."); // 商品名.picが見つからない><
return TEXTURE_BLANK; // ブランクのテクスチャでリターン
}
set_item()
{
item=llGetInventoryName(INVENTORY_OBJECT,cur); // 選択された商品名
if (number) { // コンテンツ内に商品が入ってるとき(総数が0じゃない)
llSetText(item+"\n("+(string)(cur+1)+"/"+(string)number+")",<1,1,1>,1.0); // フローティングテキスト表示
texture=get_texture(item); // 商品のテクスチャ取得
}
else { // 商品が入ってないとき
llSetText("",<1,1,1>,1.0); // フローティングテキスト消去
texture=TEXTURE_BLANK; // テクスチャはブランク
}
llSetTexture(texture,5); // 上側(面番号5)にテクスチャを表示
}
init()
{
llSetPayPrice(PAY_HIDE,[PAY_HIDE,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 支払い不可にする
number=llGetInventoryNumber(INVENTORY_OBJECT); // コンテンツ内の商品(オブジェクト)の数
cur=0; // ポインタ初期化
set_item(); // set_itemへ
if (number) llSetPayPrice(PAY_HIDE,[price,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 商品が入ってたら支払い金額を設定
}
default
{
state_entry()
{
init(); // initへ
}
changed(integer change)
{
if (change & CHANGED_INVENTORY) {
init(); // コンテンツ内が変わったらinitへ
}
}
touch_start(integer total_number)
{
key id=llDetectedKey(0); // タッチしたアバターのキー
if (id) {
integer i=llDetectedTouchFace(0); // タッチした面番号チェック
if (i == -1) llWhisper(0,"Sorry, your viewer not support."); // 古いビューワーは諦めてもらう^^;
else if (i == 0) { // 面番号0
vector v=llDetectedTouchUV(0); // タッチされた位置
if (v.x > 0.5) { // 中央よりも右だったら次の商品
cur++;
if (cur >= number) cur=0;
}
else { // そうでないときは前の商品になるようポインタをセット
cur--;
if (cur < 0) cur=number-1;
}
set_item(); // set_itemで商品表示
}
}
}
money(key id, integer amount)
{ // 支払いがあったら
if (amount == price)
{
llGiveInventory(id,item); // 商品を渡す
llInstantMessage(id,"Thank you for your purchase."); // あざーす!!
}
}
}
スクリプト最初の価格のところだけ設定して、商品(オブジェクト以外は箱詰めして)とテクスチャをコンテンツに入れてくださいね。そしてテクスチャ名は「商品名.pic」になるようにしてください。
この前のアニメーションベンダーと同じく、どの商品が売れたか通知する部分や、価格を表示する部分は書いてないですが、価格は各商品のテクスチャに描き入れるかベンダーのオブジェクト名や説明に付け加えたらいいと思いますw
0 件のコメント:
コメントを投稿