私設SoS2オーナー応援BBS

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

スレッド

└◇589:
Re[3]:新アイテム [moon] 05/19 22:33

 └◇590:Re[4]:新アイテム [akira] 05/20 09:08
  └◇591:Re[5]:新アイテム [moon] 05/20 19:32
   ├◇592:補足 [moon] 05/20 23:20
   └◇593:Re[6]:新アイテム [akira] 05/21 05:31
    └◇594:Re[7]:新アイテム [moon] 05/21 08:37
     └◇595:Re[8]:新アイテム [akira] 05/21 09:45
      └◇597:Re[9]:新アイテム [masaki] 05/21 13:14
       └◇598:Re[10]:新アイテム [moon] 05/21 19:25
        └◇599:できました! [akira] 05/21 22:06
         └◇600:Re:できました! [masaki] 05/22 16:46<-last


589● Re[3]:新アイテム[ moon ] 2003 05/19 22:33
> > sub foodを再利用するのであれば、use_afterのelsif ($sts =~ /Fd/) { &food }をelsif ($sts =~ /Fd|Pf/) { &food }に。
> > そして、foodでif(index($sts, 'Pf') < 0){〜}else{〜}として通常の食料と処理をわける。
> > umsgは変更しなくて良いのでfoodに直接push(@msg, "〜");を書いてメッセージを表示。
> > 商品設定や鑑定は他のアイテムを参考に変更。
> > といった流れかな。
> >
>
> ご解答ありがとうございます。
> food内がよく分からずてこずっているところです(汗)。

先に書いた分岐をもう少し詳細に書くと、
if(index($sts, 'Pf') < 0){
  &umsg('摂'); # 通常のメッセージ
}
else{
  push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
  $av = 'poison';
}

# 既に毒化している状態を考慮しないと上記のようになります。(&umsg('摂');だけの置換)

> > # 新しくPfというのを作るのではなく食料に'Pz'が付いていたら毒化する、というほうが自然かも。(変更も少なく済むだろうし)
>
> Pzでもいけるんですね。
> これだとPfと作業は変わるんでしょうか?
> (こちらのほうが楽そうですね)

こちらは「賞味期限切れ」と明示的には表示されないですが、上記のsub foodへの変更においてPfをPzに変更するだけで他の箇所はデフォルトで良いはずです。
スレッド一覧


590● Re[4]:新アイテム[ akira ] 2003 05/20 09:08
> 先に書いた分岐をもう少し詳細に書くと、
> if(index($sts, 'Pf') < 0){
>   &umsg('摂'); # 通常のメッセージ
> }
> else{
>   push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
>   $av = 'poison';
> }
>
> # 既に毒化している状態を考慮しないと上記のようになります。(&umsg('摂');だけの置換)
>
試してみたのですがどうもうまくいきません。
この構文はfood内のどこに書き込めばよいんでしょうか?
スレッド一覧


591● Re[5]:新アイテム[ moon ] 2003 05/20 19:32
> 試してみたのですがどうもうまくいきません。
> この構文はfood内のどこに書き込めばよいんでしょうか?

&umsg('摂');を置き換えるだけです。

# そのままコピペして全角空白の変換をしていないとか。(笑)
スレッド一覧


592● 補足[ moon ] 2003 05/20 23:20
No.589で書いた処理では「アイテム名」や「摂取した」というメッセージが出ないので、それらのメッセージを出すためには出力を適宜変更してください。
スレッド一覧


593● Re[6]:新アイテム[ akira ] 2003 05/21 05:31

> &umsg('摂');を置き換えるだけです。
>
> # そのままコピペして全角空白の変換をしていないとか。(笑)

# Sub Food #
sub food {
    if ($av eq 'dead') { &umsg('死') }
    elsif ($bp =~ /Hb/) {
        $item = $bn . $item; $bp =~ tr/a-zA-Z//d;
        $iak *= $bp; $iak = 999 if $iak > 999; $iak = -99 if $iak < -99;
        $sts = sprintf("%04d%03d%03d",0,$iak,0) . "FdWi";
        &umsg('作'); $bp = $bn = '';
if(index($sts, 'Pf') < 0){
   &umsg('摂'); # 通常のメッセージ
}
else{
   push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
   $av = 'poison';
}
}
文法チェックは大丈夫だったのですが、
毒状態にならないしメッセージも出ません。
上はコピペしたのでスペース加減は違って見えるかもしれないんですが。
スレッド一覧


594● Re[7]:新アイテム[ moon ] 2003 05/21 08:37
>
> > &umsg('摂');を置き換えるだけです。
> >
> > # そのままコピペして全角空白の変換をしていないとか。(笑)
>
> # Sub Food #
> sub food {
>     if ($av eq 'dead') { &umsg('死') }
>     elsif ($bp =~ /Hb/) {
>         $item = $bn . $item; $bp =~ tr/a-zA-Z//d;
>         $iak *= $bp; $iak = 999 if $iak > 999; $iak = -99 if $iak < -99;
>         $sts = sprintf("%04d%03d%03d",0,$iak,0) . "FdWi";
>         &umsg('作'); $bp = $bn = '';
> if(index($sts, 'Pf') < 0){
>    &umsg('摂'); # 通常のメッセージ
> }
> else{
>    push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
>    $av = 'poison';
> }
> }
> 文法チェックは大丈夫だったのですが、
> 毒状態にならないしメッセージも出ません。
> 上はコピペしたのでスペース加減は違って見えるかもしれないんですが。

元の&umsg('摂');を囲んであったelse{}が無いようですが。
スレッド一覧


595● Re[8]:新アイテム[ akira ] 2003 05/21 09:45
> > > &umsg('摂');を置き換えるだけです。
> 元の&umsg('摂');を囲んであったelse{}が無いようですが。

結局のところ勉強不足というか言葉がいまいち分からず、
「置き換え」の仕方が分からないです。
置き換え、置換で探しても置換演算子あたりでヒットしてしまって。これとは別物ですよね。

何度も同じところですみませんが、
# Sub Food #
sub food {
    if ($av eq 'dead') { &umsg('死') }
    elsif ($bp =~ /Hb/) {
        $item = $bn . $item; $bp =~ tr/a-zA-Z//d;
        $iak *= $bp; $iak = 999 if $iak > 999; $iak = -99 if $iak < -99;
        $sts = sprintf("%04d%03d%03d",0,$iak,0) . "FdWi";
        &umsg('作'); $bp = $bn = '';
    } else { &umsg('摂'); $hp = &hpcheck($hp,$xp,$iak); $gn = 1 }
if(index($sts, 'Pf') < 0){
   &umsg('摂'); # 通常のメッセージ
}
else{
   push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
   $av = 'poison';
}
}
にすると当然「置き換え」の指示通りではないし
単に書き込んだだけ、文法もだめになっちゃいます。
スレッド一覧


597● Re[9]:新アイテム[ masaki ] 2003 05/21 13:14
akiraさん初めまして(^^
moonさんいつもお世話になっております。m(_ _)m
ちょっと覗きに来て、思ったので一言w
>else { &umsg('摂'); $hp = &hpcheck($hp,$xp,$iak); $gn = 1 }
>if(index($sts, 'Pf') < 0){
>   &umsg('摂'); # 通常のメッセージ
>}
>else{
>   push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
>   $av = 'poison';
>}
ではなく、
else {
if(index($sts, 'Pf') < 0){
&umsg('摂'); # 通常のメッセージ
}
else{
push(@msg, '腐っていたようでお腹を壊しました。'); # 賞味期限切れのメッセージ
$av = 'poison';
}
$hp = &hpcheck($hp,$xp,$iak); $gn = 1;}
ということではないでしょうか?
置き換えとはそのまま置きかえるだけですから、深く考えないほうが言いと思います(^^;
間違っているかもしれませんw
失礼しました(^^
スレッド一覧


598● Re[10]:新アイテム[ moon ] 2003 05/21 19:25
masakiさんが書かれた通りです。

変更のついでに、push(@msg, '腐っていたようでお腹を壊しました。');をpush(@msg, "$itemを摂取したら腐っていたようでお腹を壊しました。");のような感じにしたほうが良いと思います。
スレッド一覧


599● できました![ akira ] 2003 05/21 22:06
moonさん、いつもありがとうございます。
無事できました。

masakiさん、はじめまして。
masakiさんの書き込みをみてはこういうのもできるんだ、
と思っていました。
ご指摘ありがとうございました。
無事できました♪

それでは、失礼します。
本当に助かりました。
これからもよろしくお願いします。
スレッド一覧


600● Re:できました![ masaki ] 2003 05/22 16:46
> moonさん、いつもありがとうございます。
> 無事できました。
>
> masakiさん、はじめまして。
> masakiさんの書き込みをみてはこういうのもできるんだ、
> と思っていました。
> ご指摘ありがとうございました。
> 無事できました♪
>
> それでは、失礼します。
> 本当に助かりました。
> これからもよろしくお願いします。
僕はなにもしてないですけどねw
勉強中ですから〜(^^
これからも宜しくお願いします。
スレッド一覧

CGIROOM