▼スレッド
│
└◇424:Re[6]:装備をはずす [moon] 03/15 11:46
└◇425:Re[7]:装備をはずす [masaki] 03/15 16:48
└◇426:Re[8]:装備をはずす [moon] 03/15 17:35
└◇427:Re[9]:装備をはずす [moon] 03/15 17:46
└◇428:Re[10]:装備をはずす [masaki] 03/15 21:30
└◇429:Re[11]:装備をはずす [moon] 03/15 22:04
└◇430:Re[12]:装備をはずす [masaki] 03/16 09:24
└◇431:Re[13]:装備をはずす [moon] 03/16 10:59
└◇432:間違い [moon] 03/16 11:11
> なぜかメッセージが表示されません。。スレッド一覧
> sub armのどこに追加してもだめでした。
> アイテム欄に使用を組み込んでいても問題はないですよね?(;;
> なぜでしょうか??
sub armを呼び出しているサブルーチン(オリジナルではuse_after)に、if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 }がないのだと思います。
$nomsgはすでに装備している場合に「装備しました」のメッセージを表示しないためのものなので、これを流用して装備していたかどうかを判別するようにしました。
いえ、ありますが・・・。。スレッド一覧
でもやっぱり表示されません。
先日moonさんに教えて頂いた、
$sts =~ s/Q[swat]//g;
のあとに追加してみたところ、一個一個の場合はちゃんと「はずしました」と表示されるのですが、2つ以上の場合はずしてないものまで「はずしました」となってしまいます。
例
凡庸な剣と平凡な盾を装備…それぞれ装備しましたと表示される。
↓
凡庸な剣をはずすと、「平凡な盾をはずしました」も一緒に表示されてしまう。でも、盾は装備されたままです。
なんどもすみません(;;
> いえ、ありますが・・・。。スレッド一覧
> でもやっぱり表示されません。
> 先日moonさんに教えて頂いた、
> $sts =~ s/Q[swat]//g;
> のあとに追加してみたところ、一個一個の場合はちゃんと「はずしました」と表示されるのですが、2つ以上の場合はずしてないものまで「はずしました」となってしまいます。
> 例
> 凡庸な剣と平凡な盾を装備…それぞれ装備しましたと表示される。
> ↓
> 凡庸な剣をはずすと、「平凡な盾をはずしました」も一緒に表示されてしまう。でも、盾は装備されたままです。
>
> なんどもすみません(;;
$sts =~ s/Q[swat]//g;の前です。(後ろだとQ[swat]が削除された後なので・・・)
でも、後ろにしてあると常に$nomsgは0になるからそもそも「はずしました」の表示が出ないはずなのだけれどな〜。
そもそも表示されないはずという前述の理由から、ソースから$nomsgを検索してその周辺をチェックしてみてください。スレッド一覧
そして関係ありそうな箇所とそれがあるサブルーチン名を書いてもらえるとどこが変なのかわかるかもしれません。
$sts =~ s/Q[swat]//g;スレッド一覧
の前だと逆に表示されません(;;
後だと表示されるのに・・・。
ソースというのsos2.cgiのものですか?
$nomsgというのはここしかないです。
sub use_afterの
if (!$post) { return }
@rcdlines = &get_user("$Fm{'id'}");
&splititem('i');
if($Fm{'icount'} ne $#items){ push(@msg,'アイテム数が合いません'); return }
$ab = $db = 0; $sp =~ s/Qb//g; $sp =~ s/Qk//g; $sp =~ s/Qx//g; $sp =~ s/Qm//g;
foreach (0 .. $#items) {
($item,$sts,$price) = split(/△/,$items[$_]);
$iak = substr($sts,4,2); $idd = substr($sts,6,2);
if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 }
$sts =~ s/Q[swat]//g;
push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/);
↑の場合、さっきの記事の状態です。。
これ以外考えられないのですが…(;;
あとは、sub armの &umsg('装') if !$nomsg;だけです。。
> if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 }スレッド一覧
> $sts =~ s/Q[swat]//g;
> push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/);
> ↑の場合、さっきの記事の状態です。。
もしかして「はずしました」の位置が上記ということはないですよね?(No.423でsub armの最後にやっていると思っていましたが・・・)
主要部分にコメントを付けて説明すると、
if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 } # 使用前に装備中なら$nomsgが1
$sts =~ s/Q[swat]//g; # 装備をはずした状態
push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/); # 使用前に装備中、かつ、使用後に装備していないならメッセージ
sub arm の最後に追加してもどうしてもメッセージが表示されません。(;;スレッド一覧
場所が間違っているのでしょうか?
sub arm内
} elsif ($ch !~ /$a2/) {
$ab += $iak; $db += $idd;
&umsg('装') if !$nomsg;
if ($a1 eq 'Bw') { $sp .= 'Qb' }
if ($a1 eq 'Kt') { $sp .= 'Qk' }
if ($a1 eq 'Ax') { $sp .= 'Qx' }
if ($a1 eq 'Sw' && $sts =~ /Li/) { $sp .= 'Qm' }
$ch .= $a2; $sts .= $a2;
} else { &umsg('別') }
} else { &umsg('職') }
push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/);
}
最後というのがここではないのでしょうか?(^^;;
これでは表示されないので、428の記事の場所にしました。
> sub arm の最後に追加してもどうしてもメッセージが表示されません。(;;スレッド一覧
> 場所が間違っているのでしょうか?
> sub arm内
> } elsif ($ch !~ /$a2/) {
> $ab += $iak; $db += $idd;
> &umsg('装') if !$nomsg;
> if ($a1 eq 'Bw') { $sp .= 'Qb' }
> if ($a1 eq 'Kt') { $sp .= 'Qk' }
> if ($a1 eq 'Ax') { $sp .= 'Qx' }
> if ($a1 eq 'Sw' && $sts =~ /Li/) { $sp .= 'Qm' }
> $ch .= $a2; $sts .= $a2;
> } else { &umsg('別') }
> } else { &umsg('職') }
> push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/);
> }
> 最後というのがここではないのでしょうか?(^^;;
> これでは表示されないので、428の記事の場所にしました。
場所は間違っていないです。
$nomsgは変なところで初期化していないはずだし、装備後に$stsにはQ[swat]が付くはずだし、どこがうまく動作していないのだろう?
そもそも自分の考え方が間違っているということもあるので変だと思ったところは指摘してください。
とりあえず、「はずしました」の上にpush(@msg,"\$nomsg=$nomsg<br>\$sts=$sts");を追加してその時点での変数の値を確認してください。
使用前に既に装備してあるもののチェックをはずして実行した場合の正常な動作表示としては、
$nomsg=1
$sts='Q[swat]がないステータス'
となります。
すみません。テストしてみた結果、動きませんでした。スレッド一覧
で、変更点はuse_after内を次のようにしてください。
if ($Fm{$_}) {
〜〜〜
}
elsif($nomsg){ # ここから追加
push(@msg,"$itemをはずしました");
}
これはテスト済みなので大丈夫だと思います。
# アイテムのチェックボックスにチェックが入っていないとsub armが呼び出されないことをうっかり忘れていました・・・。