私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇414:
装備をはずす [masaki] 03/12 08:38

 ├◇415:Re:装備をはずす [moon] 03/12 08:49
 │└◇416:Re[2]:装備をはずす [masaki] 03/12 19:17
 │ └◇420:Re[3]:装備をはずす [masaki] 03/14 18:48
 │  └◇422:Re[4]:装備をはずす [moon] 03/14 19:20
 │   └◇423:Re[5]:装備をはずす [masaki] 03/15 07:06
 │    └◇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
 └◇433:Re:装備をはずす [masaki] 03/16 12:43
  └◇434:Re[2]:装備をはずす [masaki] 03/16 14:30
   └◇436:Re[3]:装備をはずす [moon] 03/16 18:32
    └◇437:Re[4]:装備をはずす [masaki] 03/16 19:47
     └◇438:Re[5]:装備をはずす [moon] 03/16 20:52
      └◇439:Re[6]:装備をはずす [masaki] 03/17 13:36
       └◇441:Re[7]:装備をはずす [masaki] 03/17 21:51
        └◇442:Re[8]:装備をはずす [moon] 03/17 22:24
         └◇443:Re[9]:装備をはずす [masaki] 03/18 17:49<-last


414● 装備をはずす[ masaki ] 2003 03/12 08:38
初歩的な質問ですみません。
「装備をはずす」の部分はどこでしょうか?
わかりにくくて。。
すみません(;;
スレッド一覧


415● Re:装備をはずす[ moon ] 2003 03/12 08:49
> 初歩的な質問ですみません。
> 「装備をはずす」の部分はどこでしょうか?
> わかりにくくて。。
> すみません(;;

sub use_afterの、
  $ab = $db = 0; $sp =~ s/Qb//g; $sp =~ s/Qk//g; $sp =~ s/Qx//g; $sp =~ s/Qm//g; # (1)
とforeachの中の、
  $sts =~ s/Q[swat]//g; # (2)
です。

(1)ではスキルに追加されている特殊な武器(弓など)の装備フラグを削除していて、(2)ではアイテムステータスに追加されている装備フラグを削除しています。
スレッド一覧


416● Re[2]:装備をはずす[ masaki ] 2003 03/12 19:17
ありがとうございます!!
よくわからないことばっかりで大変です(´Д`A
スレッド一覧


420● Re[3]:装備をはずす[ masaki ] 2003 03/14 18:48
すみません。。
再度質問です。
装備をはずしたときに「はずしました」のメッセージを表示する場合はどのようにすればいいのでしょう?
スレッド一覧


422● Re[4]:装備をはずす[ moon ] 2003 03/14 19:20
> すみません。。
> 再度質問です。
> 装備をはずしたときに「はずしました」のメッセージを表示する場合はどのようにすればいいのでしょう?

sub armの最後に、
  push(@msg,"$itemをはずしました") if($nomsg && $sts!~/Q[swat]/);
を追加(かな・・・?)。

「最後」と書きましたが「一番安全な追加場所」という意味なので適切な場所が分かるのなら移動しても大丈夫です。
スレッド一覧


423● Re[5]:装備をはずす[ masaki ] 2003 03/15 07:06
なぜかメッセージが表示されません。。
sub armのどこに追加してもだめでした。
アイテム欄に使用を組み込んでいても問題はないですよね?(;;
なぜでしょうか??
スレッド一覧


424● Re[6]:装備をはずす[ moon ] 2003 03/15 11:46
> なぜかメッセージが表示されません。。
> sub armのどこに追加してもだめでした。
> アイテム欄に使用を組み込んでいても問題はないですよね?(;;
> なぜでしょうか??

sub armを呼び出しているサブルーチン(オリジナルではuse_after)に、if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 }がないのだと思います。
$nomsgはすでに装備している場合に「装備しました」のメッセージを表示しないためのものなので、これを流用して装備していたかどうかを判別するようにしました。
スレッド一覧


425● Re[7]:装備をはずす[ masaki ] 2003 03/15 16:48
いえ、ありますが・・・。。
でもやっぱり表示されません。
先日moonさんに教えて頂いた、
$sts =~ s/Q[swat]//g;
のあとに追加してみたところ、一個一個の場合はちゃんと「はずしました」と表示されるのですが、2つ以上の場合はずしてないものまで「はずしました」となってしまいます。

凡庸な剣と平凡な盾を装備…それぞれ装備しましたと表示される。
     ↓
凡庸な剣をはずすと、「平凡な盾をはずしました」も一緒に表示されてしまう。でも、盾は装備されたままです。

なんどもすみません(;;
スレッド一覧


426● Re[8]:装備をはずす[ moon ] 2003 03/15 17:35
> いえ、ありますが・・・。。
> でもやっぱり表示されません。
> 先日moonさんに教えて頂いた、
> $sts =~ s/Q[swat]//g;
> のあとに追加してみたところ、一個一個の場合はちゃんと「はずしました」と表示されるのですが、2つ以上の場合はずしてないものまで「はずしました」となってしまいます。
> 例
> 凡庸な剣と平凡な盾を装備…それぞれ装備しましたと表示される。
>      ↓
> 凡庸な剣をはずすと、「平凡な盾をはずしました」も一緒に表示されてしまう。でも、盾は装備されたままです。
>
> なんどもすみません(;;

$sts =~ s/Q[swat]//g;の前です。(後ろだとQ[swat]が削除された後なので・・・)
でも、後ろにしてあると常に$nomsgは0になるからそもそも「はずしました」の表示が出ないはずなのだけれどな〜。
スレッド一覧


427● Re[9]:装備をはずす[ moon ] 2003 03/15 17:46
そもそも表示されないはずという前述の理由から、ソースから$nomsgを検索してその周辺をチェックしてみてください。
そして関係ありそうな箇所とそれがあるサブルーチン名を書いてもらえるとどこが変なのかわかるかもしれません。
スレッド一覧


428● Re[10]:装備をはずす[ masaki ] 2003 03/15 21:30
$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;だけです。。
スレッド一覧


429● Re[11]:装備をはずす[ moon ] 2003 03/15 22:04
>         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]/); # 使用前に装備中、かつ、使用後に装備していないならメッセージ
スレッド一覧


430● Re[12]:装備をはずす[ masaki ] 2003 03/16 09:24
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の記事の場所にしました。
スレッド一覧


431● Re[13]:装備をはずす[ moon ] 2003 03/16 10:59
> 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]がないステータス'
となります。
スレッド一覧


432● 間違い[ moon ] 2003 03/16 11:11
すみません。テストしてみた結果、動きませんでした。
で、変更点はuse_after内を次のようにしてください。
  if ($Fm{$_}) {
    〜〜〜
  }
  elsif($nomsg){ # ここから追加
    push(@msg,"$itemをはずしました");
  }

これはテスト済みなので大丈夫だと思います。

# アイテムのチェックボックスにチェックが入っていないとsub armが呼び出されないことをうっかり忘れていました・・・。
スレッド一覧


433● Re:装備をはずす[ masaki ] 2003 03/16 12:43
できました〜〜(^^
ありがとうございます!!
わざわざテストまでして頂いて…(;;
アイテム欄に使用を組み込む改造をしていたせいですね。。
途中での解説、勉強になりました!!
本当にありがとうございました!!!!
スレッド一覧


434● Re[2]:装備をはずす[ masaki ] 2003 03/16 14:30
一日になんども質問すみません。
今、アイテムに呪いスキルNoがついていたら、装備をはずせない。
という改造をしているのですが、
if($sts !~ /No/){$ab = $db = 0; $sp =~ s/Qb//g; $sp =~ s/Qk//g; $sp =~ s/Qx//g; $sp =~ s/Qm//g;}
if($sts !~ /No/){$sts =~ s/Q[swat]//g;}
上のように変えて装備をはずそうとすると、装備はされているのですが装備による+1や+2が消えてしまいます。
他の動作をすれば、+1や+2が表示されるのですが、消えたまま保存すると、装備していない状態と同じになってしまいます。
(装備状態の太字にはなります)
なぜでしょうか?(^^;
スレッド一覧


436● Re[3]:装備をはずす[ moon ] 2003 03/16 18:32
返事が遅くて申し訳ないです。(新しいPCを買ってきたのでその設定作業に悪戦苦闘しているので(笑))

> アイテム欄に使用を組み込む改造をしていたせいですね。。

これは完全に自分の勘違いでしたのでその改造をしていたせいではないです。

> 一日になんども質問すみません。
> 今、アイテムに呪いスキルNoがついていたら、装備をはずせない。
> という改造をしているのですが、
> if($sts !~ /No/){$ab = $db = 0; $sp =~ s/Qb//g; $sp =~ s/Qk//g; $sp =~ s/Qx//g; $sp =~ s/Qm//g;}
> if($sts !~ /No/){$sts =~ s/Q[swat]//g;}
> 上のように変えて装備をはずそうとすると、装備はされているのですが装備による+1や+2が消えてしまいます。
> 他の動作をすれば、+1や+2が表示されるのですが、消えたまま保存すると、装備していない状態と同じになってしまいます。
> (装備状態の太字にはなります)
> なぜでしょうか?(^^;

$ab = 0などの行はアイテムを使用するしないに関わらず実行される場所なのでそこで$stsを参照しても空です。
そういうことで、if($sts !~ /No/){$ab = $db = 0;〜}は中身が必ず実行されているということです。

考え方を変えて、呪われていると「はずれなくなる」のではなく「装備中の場合は使用するしないに関わらず再び装備される」というようにしたほうがわかりやすいと思います。

まだ設定がほとんど完了していないので省略して書きましたがとりあえずこんな感じでやってみれば良いと思います。
スレッド一覧


437● Re[4]:装備をはずす[ masaki ] 2003 03/16 19:47
> 考え方を変えて、呪われていると「はずれなくなる」のではなく「装備中の場合は使用するしないに関わらず再び装備される」というようにしたほうがわかりやすいと思います。
もしNoが含まれていたら、装備状態にする。ということですか?
$sts =~ s/Q[swat]//g;
のあとに
if ($sts =~ /No/) {$sts =~ /Q[swat]/;}
を追加したのですが、出来ませんでした。。
頭の中が混乱してきました(滝汗
>返事が遅くて申し訳ないです。(新しいPCを買ってきたのでその設定作業に悪戦苦闘しているので(笑))
新しいパソコンですか!
おめでとうございます!!
moonさんのパソコンて、ものすごい量のデータがあったり・・・w
前のパソコンのデータを移したり、設定したり大変そうですね(^^;
頑張ってください!!
スレッド一覧


438● Re[5]:装備をはずす[ moon ] 2003 03/16 20:52
> > 考え方を変えて、呪われていると「はずれなくなる」のではなく「装備中の場合は使用するしないに関わらず再び装備される」というようにしたほうがわかりやすいと思います。
> もしNoが含まれていたら、装備状態にする。ということですか?

そういうことです。
まだまだ終わりそうにないどころか無事に終わるのかが疑問な状態なので以下適当なことを書きます。

  if ($sts =~ /Q[swat]/) { $nomsg = 1 } else { $nomsg = 0 }
を、
  if ($sts =~ /Q[swat]/) { $nomsg = 1; $Fm{$_} = 'on' if(index($sts,'No')>=0); } else { $nomsg = 0 }
とする。
スレッド一覧


439● Re[6]:装備をはずす[ masaki ] 2003 03/17 13:36
できました〜!!
何度も質問してすみませんでした(;;
本当にありがとうございました!
スレッド一覧


441● Re[7]:装備をはずす[ masaki ] 2003 03/17 21:51
バグ発生です(;;
所持アイテムが
・ブレスレット
・イヤリング
で、イヤリングが呪われていてブレスレットが呪われていない場合、イヤリングを装備して、↓
「ブレスレットにチェックして、イヤリングのチェックをはずし決定」すると、
『ブレスレットを装備しました
イヤリングを装備するには別のアイテムを外す必要があります』
となり、装備が入れ替わってしまいます。
(その瞬間は装備されていないことになるのかな?)
moonさんの都合のいいときでいいので、考えて下さると助かります。。
よろしくお願いします。
スレッド一覧


442● Re[8]:装備をはずす[ moon ] 2003 03/17 22:24
> バグ発生です(;;
> 所持アイテムが
> ・ブレスレット
> ・イヤリング
> で、イヤリングが呪われていてブレスレットが呪われていない場合、イヤリングを装備して、↓
> 「ブレスレットにチェックして、イヤリングのチェックをはずし決定」すると、
> 『ブレスレットを装備しました
> イヤリングを装備するには別のアイテムを外す必要があります』
> となり、装備が入れ替わってしまいます。
> (その瞬間は装備されていないことになるのかな?)
> moonさんの都合のいいときでいいので、考えて下さると助かります。。
> よろしくお願いします。

バグというか当然の結果です。
自分が参加している某SoS2でもそういう仕様となっています。(そこでしかプレイしていなかったりしますが(笑))

これはアイテムを先読みするか、それが装備失敗したときにその障害となった装備アイテムの装備をはずすようにしなければいけません。
この2つの処理はどちらも面倒なので、装備失敗になったら全てのアイテム処理をキャンセルするようにすれば"根本的な解決にはなりませんが"一応は呪いの装備品がはずれるのは防げると思います。

アイテム処理をキャンセルする場合の変更点は、sub armの最後に、
  $use_cancel = 1 if($nomsg && index($sts,'No')>=0 && $sts!~/Q[swat]/);
を追加しsub use_afterを以下のように変更する。
  if ($Fm{$_}) {
    〜〜〜
  }
を、
  if ($Fm{$_}) {
    〜〜〜
    if($use_cancel){
      push(@msg,"呪われた品「$item」をはずそうとしたことにより、呪いが発動し時間が巻き戻されました");
      return;
    }
  }

もちろんNo.438の変更をした上での話です。(やっていないとsub armが実行されないので・・・)
スレッド一覧


443● Re[9]:装備をはずす[ masaki ] 2003 03/18 17:49
お忙しい中、いろいろな質問に答えていただきありがとうございました(^^
本当にありがとうございました
スレッド一覧

CGIROOM