2009年12月02日
アルカナタロットのスクリプト
とりわけネタが無いから
こんど、とあるパーティーで出す予定なミニゲーム
アルカナタロット占いのスクリプト全文を載せてみる。
占い・・といっても、占いとしての機能は一切ナシ(w)で
このゲームは
44種類の出目があるクジ引きゲームであって
そのうち3種類の出目が500L$を得られる大当たり、というシロモノ。
遊んでみてゼンゼン当たらないでいると
「ボクにだけ当てさせてくれないんじゃないーの?」
とグチがこぼれそうになるけど
内容を読めば、カンペキなランダムだなってナットクできるよ!
確認してみてd(。ゝε・。)Йё
仕組み
1200秒をひとつのラウンドとし
すべてのプレイヤーは1ラウンドにつき1回しかプレイできない。
タッチしたときに表示されるカードの画像は
44分割された1枚のテクスチャをllOffsetTextureで部分表示する。
条件分岐で
運命の輪・太陽・世界の正位置が出たときに大当たり判定をする。
list played = [];
integer count = 0;
integer limit = 1200;
integer seconds;
integer round = 1;
string win1name = "- - - - -";
string win2name = "- - - - -";
string win3name = "- - - - -";
string win4name = "- - - - -";
string win5name = "- - - - -";
text()
{
llSetText("Round "+(string)round+"\n"+(string)seconds+"\n最後の大当り\n#1 "+win1name+"\n#2 "+win2name+"\n#3 "+win3name+"\n#4 "+win4name+"\n#5 "+win5name+"",<0.4,1,0.4>,TRUE);
}
default
{
state_entry()
{
seconds = limit;
llSetTimerEvent(TRUE);
llOffsetTexture(0.583,0.375,ALL_SIDES);
llScaleTexture(0.16,0.247 ,ALL_SIDES);
text();
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
}
touch_start(integer total_number)
{
if(llDetectedKey(0) == llGetOwner())
{
llOwnerSay((string)count);
}
string name = llDetectedName(0);
integer find = llListFindList(played ,[name]);
if(find == -1)
{
string nani;
float X; float Y;
float p = llFloor(llFrand(22));//llFloor小数点以下切り捨て
if (p== 0){X=0.748; Y=0.375;nani="0 愚者";}
else if(p== 1){X=0.913; Y=0.375;nani="I 魔術師";}
else if(p== 2){X=0.078; Y=0.375;nani="II 女司祭長";}
else if(p== 3){X=0.243; Y=0.375;nani="III 女帝";}
else if(p== 4){X=0.583; Y=0.125;nani="IV 皇帝";}
else if(p== 5){X=0.748; Y=0.125;nani="V 司祭長";}
else if(p== 6){X=0.913; Y=0.125;nani="VI 恋人";}
else if(p== 7){X=0.078; Y=0.125;nani="VII 戦車";}
else if(p== 8){X=0.243; Y=0.125;nani="VIII 力";}
else if(p== 9){X=0.583; Y=0.875;nani="IX 隠者";}
else if(p==10){X=0.748; Y=0.875;nani="X 運命の輪";}
else if(p==11){X=0.913; Y=0.875;nani="XI 正義";}
else if(p==12){X=0.078; Y=0.875;nani="XII 吊られた男";}
else if(p==13){X=0.243; Y=0.875;nani="XIII 死神";}
else if(p==14){X=0.583; Y=0.625;nani="XIV 節制";}
else if(p==15){X=0.748; Y=0.625;nani="XV 悪魔";}
else if(p==16){X=0.913; Y=0.625;nani="XVI 塔";}
else if(p==17){X=0.078; Y=0.625;nani="XVII 星";}
else if(p==18){X=0.243; Y=0.625;nani="XVIII 月";}
else if(p==19){X=0.408; Y=0.375;nani="XIX 太陽";}
else if(p==20){X=0.408; Y=0.125;nani="XX 審判";}
else {X=0.408; Y=0.875;nani="XXI 世界";}
float q = llFloor(llFrand(2));
string muki;
if(q == 1)
{
muki = "正位置";
llScaleTexture(0.16,0.247 ,ALL_SIDES);
}
else
{
muki = "逆位置";
llScaleTexture(-0.16,-0.247 ,ALL_SIDES);
}
llOffsetTexture(X,Y,ALL_SIDES);
llSay(0,""+name+"さんがチャレンジして、"+nani+" "+muki+" を引きました。");
played += name;
if(p*q == 10 | p*q == 19 | p*q == 21)//運命の輪・太陽・世界の正位置が出た時
{
llSleep(2.0);
llSay(0,"当たーりぃ!");
count++;
win5name = win4name;
win4name = win3name;
win3name = win2name;
win2name = win1name;
win1name = name;
text();
llGiveMoney(llDetectedKey(0),500);
}
llSleep(3.0);
llOffsetTexture(0.583,0.375,ALL_SIDES);
llScaleTexture(0.16,0.247 ,ALL_SIDES);
}
else
{
llInstantMessage(llDetectedKey(0),"間隔が短いです。次のラウンドまでお待ちください。");
}
}
timer()
{
seconds--;
if(seconds <= 0)
{
played = [];
seconds = limit;
round++;
}
text();
}
}
こんど、とあるパーティーで出す予定なミニゲーム
アルカナタロット占いのスクリプト全文を載せてみる。
占い・・といっても、占いとしての機能は一切ナシ(w)で
このゲームは
44種類の出目があるクジ引きゲームであって
そのうち3種類の出目が500L$を得られる大当たり、というシロモノ。
遊んでみてゼンゼン当たらないでいると
「ボクにだけ当てさせてくれないんじゃないーの?」
とグチがこぼれそうになるけど
内容を読めば、カンペキなランダムだなってナットクできるよ!
確認してみてd(。ゝε・。)Йё
仕組み
1200秒をひとつのラウンドとし
すべてのプレイヤーは1ラウンドにつき1回しかプレイできない。
タッチしたときに表示されるカードの画像は
44分割された1枚のテクスチャをllOffsetTextureで部分表示する。
条件分岐で
運命の輪・太陽・世界の正位置が出たときに大当たり判定をする。
list played = [];
integer count = 0;
integer limit = 1200;
integer seconds;
integer round = 1;
string win1name = "- - - - -";
string win2name = "- - - - -";
string win3name = "- - - - -";
string win4name = "- - - - -";
string win5name = "- - - - -";
text()
{
llSetText("Round "+(string)round+"\n"+(string)seconds+"\n最後の大当り\n#1 "+win1name+"\n#2 "+win2name+"\n#3 "+win3name+"\n#4 "+win4name+"\n#5 "+win5name+"",<0.4,1,0.4>,TRUE);
}
default
{
state_entry()
{
seconds = limit;
llSetTimerEvent(TRUE);
llOffsetTexture(0.583,0.375,ALL_SIDES);
llScaleTexture(0.16,0.247 ,ALL_SIDES);
text();
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
}
touch_start(integer total_number)
{
if(llDetectedKey(0) == llGetOwner())
{
llOwnerSay((string)count);
}
string name = llDetectedName(0);
integer find = llListFindList(played ,[name]);
if(find == -1)
{
string nani;
float X; float Y;
float p = llFloor(llFrand(22));//llFloor小数点以下切り捨て
if (p== 0){X=0.748; Y=0.375;nani="0 愚者";}
else if(p== 1){X=0.913; Y=0.375;nani="I 魔術師";}
else if(p== 2){X=0.078; Y=0.375;nani="II 女司祭長";}
else if(p== 3){X=0.243; Y=0.375;nani="III 女帝";}
else if(p== 4){X=0.583; Y=0.125;nani="IV 皇帝";}
else if(p== 5){X=0.748; Y=0.125;nani="V 司祭長";}
else if(p== 6){X=0.913; Y=0.125;nani="VI 恋人";}
else if(p== 7){X=0.078; Y=0.125;nani="VII 戦車";}
else if(p== 8){X=0.243; Y=0.125;nani="VIII 力";}
else if(p== 9){X=0.583; Y=0.875;nani="IX 隠者";}
else if(p==10){X=0.748; Y=0.875;nani="X 運命の輪";}
else if(p==11){X=0.913; Y=0.875;nani="XI 正義";}
else if(p==12){X=0.078; Y=0.875;nani="XII 吊られた男";}
else if(p==13){X=0.243; Y=0.875;nani="XIII 死神";}
else if(p==14){X=0.583; Y=0.625;nani="XIV 節制";}
else if(p==15){X=0.748; Y=0.625;nani="XV 悪魔";}
else if(p==16){X=0.913; Y=0.625;nani="XVI 塔";}
else if(p==17){X=0.078; Y=0.625;nani="XVII 星";}
else if(p==18){X=0.243; Y=0.625;nani="XVIII 月";}
else if(p==19){X=0.408; Y=0.375;nani="XIX 太陽";}
else if(p==20){X=0.408; Y=0.125;nani="XX 審判";}
else {X=0.408; Y=0.875;nani="XXI 世界";}
float q = llFloor(llFrand(2));
string muki;
if(q == 1)
{
muki = "正位置";
llScaleTexture(0.16,0.247 ,ALL_SIDES);
}
else
{
muki = "逆位置";
llScaleTexture(-0.16,-0.247 ,ALL_SIDES);
}
llOffsetTexture(X,Y,ALL_SIDES);
llSay(0,""+name+"さんがチャレンジして、"+nani+" "+muki+" を引きました。");
played += name;
if(p*q == 10 | p*q == 19 | p*q == 21)//運命の輪・太陽・世界の正位置が出た時
{
llSleep(2.0);
llSay(0,"当たーりぃ!");
count++;
win5name = win4name;
win4name = win3name;
win3name = win2name;
win2name = win1name;
win1name = name;
text();
llGiveMoney(llDetectedKey(0),500);
}
llSleep(3.0);
llOffsetTexture(0.583,0.375,ALL_SIDES);
llScaleTexture(0.16,0.247 ,ALL_SIDES);
}
else
{
llInstantMessage(llDetectedKey(0),"間隔が短いです。次のラウンドまでお待ちください。");
}
}
timer()
{
seconds--;
if(seconds <= 0)
{
played = [];
seconds = limit;
round++;
}
text();
}
}