2008年12月13日
数字を残す方法はないでしょうか〜
二回目の投稿です〜
なかなか問題解決しないので投稿させて頂きました。
数字の付いた(テキスト)オブジェクトを装着させて、タッチすると
数字がプラスしていくというものを作成しました〜
しかしアバターから外し再度装着すると、前回の
数字はタッチするまでは残っているのですが、タッチすると
0に戻ってしまい一からの状態になってしまいます。
前回装備していた最後の数字を維持し、続けて数字を
プラスしていくのは可能なのでしょうか〜
だれか教えてください。
なかなか問題解決しないので投稿させて頂きました。
数字の付いた(テキスト)オブジェクトを装着させて、タッチすると
数字がプラスしていくというものを作成しました〜
しかしアバターから外し再度装着すると、前回の
数字はタッチするまでは残っているのですが、タッチすると
0に戻ってしまい一からの状態になってしまいます。
前回装備していた最後の数字を維持し、続けて数字を
プラスしていくのは可能なのでしょうか〜
だれか教えてください。
Posted by Tsubaki
at 21:33
│Comments(16)
もしかして装着する際などに、スクリプトをリセットしたり、数字に「0」を代入したりする処理を行っていませんでしょうか。
そうでなければ、グローバル変数に指定しておいた値はデタッチしても保管されているはずですよ。
装着したオブジェクトは、土地においているオブジェクトを
タッチすると、装着しているオブジェトの数字が変わるといった
ちょっと複雑なものを使用しています~
スクリプトは下記のものになります
integer hit = 1;
string txt;
default
{
state_entry()
{
llListen(-10,"","llGetOwnerKey()","");
}
on_rez(integer num)
{
llResetScript();
}
listen(integer channel , string name , key id , string message)
{
list LvUp = llCSV2List(message);
if (llList2String(LvUp, 0) == (string)llGetOwner())
{
if (hit < 100){
txt = (string)hit;
hit += 1;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
}
}
}
}
まだまだ勉強不足で、なかなか解けません~
お助けを~
string txt;
default
{
state_entry()
{
llListen(-10,"","llGetOwnerKey()","");
}
on_rez(integer num)
{
llListen(-10,"","llGetOwnerKey()","");
}
listen(integer channel , string name , key id , string message)
{
list LvUp = llCSV2List(message);
if (llList2String(LvUp, 0) == (string)llGetOwner())
{
if (hit < 100){
txt = (string)hit;
hit += 1;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
}
}
}
}
パッと見た感じこれでいけそうですが
助かりました~
やってみます~
これで進めます~感謝
取ったんですね~
今の状態から数字を下げるいい方法は
ないでしょうか 単純にやっても
0からマイナスになるんですけど
ここの部分も今日一日やってるけど
解決できません~
マイナスにならないように減らしたい、という意味ならば、
if (llList2String(LvUp, 0) == (string)llGetOwner())
{
if (hit > 0){//★変更行
txt = (string)hit;
hit--;//★変更行
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
}
}
これで段々減っていく処理になると思います。(最初のは、最大値Lv99までひとつずつ増加する計算でしたので)
まだまだ問題山積みですが
がんばりま〜す
ほんと助かりました〜
またわからなくなったら投稿させて
いただきます。
いろいろやってみてるんですけど
うまくいきません。
おたすけ〜
integer hit = 1;
string txt;
default
{
state_entry()
{
llListen(-10,"","llGetOwnerKey()","");
}
on_rez(integer num)
{
llListen(-10,"","llGetOwnerKey()","");
}
listen(integer channel , string name , key id , string message)
{
list LvUp = llCSV2List(message);
if (llList2String(LvUp, 0) == (string)llGetOwner())
{
if (hit < 100){
txt = (string)hit;
hit += 1;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
} else if (llList2String(LvDown, 0) == (string)llGetOwner()){
if (hit > 0){//★変更行
txt = (string)hit;
hit--;//★変更行
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
}
}
}
}
}
こんな感じです
これはエラーしてます
いけたのですが、交互に処理すると
どうしてもプラス側は1減ってから増えて、
マイナス側は1増えてから減っていく感じに
なります。
もう一息だとはおもうのですが^^;
integer hit = 1;
string txt;
default
{
state_entry()
{
llListen(-10,"","llGetOwnerKey()","");
}
on_rez(integer num)
{
llListen(-10,"","llGetOwnerKey()","");
llSetTimerEvent(30.0);
}
listen(integer channel , string name , key id , string message){
if (message == "LvUp"){
if (hit < 100){
txt = (string)hit;
hit += 1;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);}
}
else if(message == "LvDown"){
if (hit > 0){//★変更行
txt = (string)hit;
hit--;//★変更行
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);
}
}
}
}
hit += 1;
や
txt = (string)hit;
hit--;//★変更行
のように、最終的に表示する変数(ここでは txt)に値を入れた後に、hit 変数をカウントアップしたり、カウントダウンしているので、「どうしてもプラス側は1減ってから増えて、マイナス側は1増えてから減っていく感じになります」という挙動になっているのだと思われます。
単純には、上記箇所の順序を入れ替えればよいのではないでしょうか。
on_rezのところに「llSetTimerEvent~」とタイマーがセットされているところが気になりました。
上記のスクリプト内にはtimerイベントがありませんので、タイマーのセットは必要ないと思います。
もしも表記していないだけで実際はtimerイベントがあるのでしたら失礼します;
混乱してます~^^;
最終はタイマーイベントは削除しました~
もうちょい先になりますが、うちのSIMに
きてください。今回の成果をみることが
できると思います
ほんと助かりました~
下記内容でオーナーしか反応しないように
しようと思っているのですが、なかなか出来ません〜
同じ物を他の人が装着して処理すると
同時にプラス・マイナスしてしまいます。
なにかいい方法はないでしょうか〜
いろいろ試したけどだめでした〜
「//」のものは残骸です〜
integer hit = 1 ;
string txt;
default
{
state_entry()
{
llListen(-10,"","llGetOwnerKey()","");
}
on_rez(integer num)
{
llListen(-10,"","llGetOwnerKey()","");
}
listen(integer channel , string name , key id , string message){
//if (llDetectedKey(0) == llGetOwner()){
//list listMessage = llCSV2List(message);
//if (llList2String(listMessage, 0) == (string)llGetOwner()){
if (message == "LvUp"){
if(hit < 100){
hit += 1;
txt = (string)hit;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);}
}else if (message == "LvDown"){
if(hit > 0){
hit--;
txt = (string)hit;
(string)hit;
llSetText("Lv."+txt,<1.0,0.0,1.0>,1.0);}
}
}
}
3番目のパラメータには発言元のUUIDを指定してフィルタしますが、ダブルクオートで囲った "llGetOwnerKey()" という文字列を key 型に変換したものは、対象オブジェクトとして無効な UUID と判定されて、結局何もフィルタがかからない状態で llListen が実行されます。
(2)「オーナーしか反応しないように」
これは、タッチされたオブジェクトが say する情報に「誰がタッチしたのか」を付加し、listen で受け取る側では、その UUID が所有者なのかを判定するようなロジックが少なくとも必要でしょう。
同一のオブジェクトから聞こえてくる発言そのものだけでは、誰がタッチした発言なのかは判別できません。
----
そろそろこの当初の質問とは異なる内容になってきているので、一度仕切り直すなりした方が、後々このトピックを見る方にも喜ばれるかもしれません。
まだ解決には至っていませんが
大変助かりました〜
がんばってみます〜