私設SoS2オーナー応援BBS

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

スレッド

└◇824:
街ごとにアイテム変化(探索回数指定付) [織江] 10/15 14:17

 └◇825:Re:街ごとにアイテム変化(探索回数指定付) [moon] 10/15 19:51
  └◇826:有難うございます!! [織江] 10/15 23:07
   └◇833:コンタクト後の探索エラー [織江] 10/17 23:47
    ├◇834:つけたし。 [織江] 10/18 00:07
    │└◇836:Re:つけたし。 [moon] 10/18 00:24
    │ └◇837:Re[2]:つけたし。 [moon] 10/18 00:31
    │  └◇838:さらに追記 [moon] 10/18 00:35
    └◇835:Re:コンタクト後の探索エラー [moon] 10/18 00:16
     └◇842:Re[2]:コンタクト後の探索エラー [織江] 10/18 20:49
      └◇843:Re[3]:コンタクト後の探索エラー [moon] 10/18 23:30
       └◇844:今度こそ。 [織江] 10/19 01:11<-last


824● 街ごとにアイテム変化(探索回数指定付)[ 織江 ] 2003 10/15 14:17
初めまして。
とても初心者的な質問かとは思いますが、どうにも分からないので、教えて頂ければ幸いです。

ましまろ様の分割統合版を基本に、街移動を組み込みました。
街ごとに出現アイテムを変え、尚且つ全てに探索回数指定ができるようにしたいのですが、やり方がよくわからず、無理矢理やったはいいのですが、表示が非常に鬱陶しいのです。

下記のようになっているのですが…。
これを、「今いる場所の探索指定のみ表示させる」
もしくは、今いる場所によって、中のdatファイル指定のみ変える
といったような方法はないでしょうか。

お忙しい中申し訳ありませんが、ご助力頂ければ幸いです。

>>>>>>


&input('radio','mode','find_item',' checked',"新校舎探索  探索回数:");
if (($tw eq 1) || ($tw eq 2) || ($tw eq 3) && $hp > 1){
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}

&input('radio','mode','find_item2','',"旧校舎上階探索  探索回数:");
if (($tw eq 4) || ($tw eq 5) && $hp > 1){
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}

        &input('radio','mode','find_item3','',"旧校舎探索  探索回数:");
if (($tw eq 6) || ($tw eq 7) && $hp > 1){
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}
        
&input('radio','mode','find_item4','',"深層部探索  探索回数:");
if ($tw eq 8 && $hp > 1){
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}

&input('radio','mode','find_item5','',"最深部探索  探索回数:");
if (($tw eq 9) || ($tw eq 10) && $hp > 1){
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}
スレッド一覧


825● Re:街ごとにアイテム変化(探索回数指定付)[ moon ] 2003 10/15 19:51
> これを、「今いる場所の探索指定のみ表示させる」
> もしくは、今いる場所によって、中のdatファイル指定のみ変える
> といったような方法はないでしょうか。

次のような感じではどうでしょうか。

my $num = $tw == 4 || $tw == 5 ? '2' : $tw == 6 || $tw == 7 ? '3' : $tw == 8 ? '4' : $tw == 9 || $tw == 10 ? '5' : ''; # mode値に付く数字の計算
&input('radio', 'mode', "find_item$num", ' checked', ('新校舎', '旧校舎上階', '旧校舎', '深層部', '最深部')[$num eq '' ? 0 : $num - 1] . '探索  探索回数:'); # 探索場所の表示
if($hp > 1){
  print '<select name=t_max>';
  foreach(1 .. $hp - 1){
    print qq|<option value=$_>${_}回\n|;
  }
  print '</select><br>';
}
else{
  print ' 0回<br>';
}
スレッド一覧


826● 有難うございます!![ 織江 ] 2003 10/15 23:07
早速お教えいただき、誠に有難うございます。
おかげ様で、無事に出来ました。
本当に有難うございました!!
スレッド一覧


833● コンタクト後の探索エラー[ 織江 ] 2003 10/17 23:47
度々申し訳ありません。
街ごとのアイテム変化を教えていただき、どうにかできたと思っていたのですが、
どうやら、誰かと会った後に探索するとエラーが出るようになってしまったようなのです。
色々と弄ってみたのですが、どうにも原因が分からずにいます。
一度街移動の画面へ行って戻ると、エラーが出ないようです。
街フラグはやはり全て足されているようで、誰かとコンタクトした後のみに起きる現象のようですが…。
ちなみに、誰かとコンタクトして戻ってくると、探索回数にポップアップは表示されず、体力が残っていても「0回」と表示されています。

何度もお手数をかけて申し訳ありませんが、ご助力願えれば幸いです。
スレッド一覧


834● つけたし。[ 織江 ] 2003 10/18 00:07
念のためファイルを貼り付けさせて頂きます。
教えていただいたままだと上手くいかなかったので、組み合わせた結果、おかしくなってしまったのかもしれません…。

http://noiz.edisc.jp/cgi/sos2/sos2.txt
スレッド一覧


836● Re:つけたし。[ moon ] 2003 10/18 00:24
再配布を公開しているのでもない限り、ファイルそのままはリンクしないほうが良いと思いますよ。

スクリプトを見た感じ新規登録時も同じ症状になりそうな気がしますね・・・。
normal_actionの
  ($pid,$pnm,$pps,$pjb,$pig,$psp,$pbp,$others) = split(/<>/,$line);
  if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp; $myjb = $pjb }
を、
  ($pid, $pnm, $pps, $pjb, $pig, $psp, $pbp, $ptw) = (split(/<>/, $line))[0, 1, 2, 3, 4, 5, 6, ???]; # ???は$ptwに相当するパラメータの番号(IDから順に数えていってください。)
  if($Fm{'id'} eq $pid){$mysp = $psp; $mybp = $pbp; $myjb = $pjb; $hp = $php; $tw = $ptw;}
に変更すれば良いと思います。
スレッド一覧


837● Re[2]:つけたし。[ moon ] 2003 10/18 00:31
>   ($pid, $pnm, $pps, $pjb, $pig, $psp, $pbp, $ptw) = (split(/<>/, $line))[0, 1, 2, 3, 4, 5, 6, ???]; # ???は$ptwに相当するパラメータの番号(IDから順に数えていってください。)

付け足したパラメータが$twだけ(つまり$klの次が$tw)なら???は30です。
スレッド一覧


838● さらに追記[ moon ] 2003 10/18 00:35
> [0, 1, 2, 3, 4, 5, 6, ???]

これの表記方法は、[0 .. 6, ???]でもOKです。
スレッド一覧


835● Re:コンタクト後の探索エラー[ moon ] 2003 10/18 00:16
> どうやら、誰かと会った後に探索するとエラーが出るようになってしまったようなのです。
> 色々と弄ってみたのですが、どうにも原因が分からずにいます。
> 一度街移動の画面へ行って戻ると、エラーが出ないようです。
> 街フラグはやはり全て足されているようで、誰かとコンタクトした後のみに起きる現象のようですが…。
> ちなみに、誰かとコンタクトして戻ってくると、探索回数にポップアップは表示されず、体力が残っていても「0回」と表示されています。

$hpはどこで代入していますか?
if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }内で行っているのであれば問題無さそうですがここ以外だとやり方によっては正常に動作しないかもしれません。

とりあえずエラー内容の詳細と、normal_action(もしくはそこから呼び出しているサブルーチン)のどこで$hpを代入しているかとその周辺のスクリプトを書いてもらえると原因の判別材料になるかと思います。
スレッド一覧


842● Re[2]:コンタクト後の探索エラー[ 織江 ] 2003 10/18 20:49
>再配布を公開しているのでもない限り、ファイルそのままはリンクしないほうが良いと思いますよ。

すみません…。
混乱してもはや何処がどう悪いのかが分からなくなってしまったもので…。
思わず全て送ってしまいました…。


教えて頂いたnormal_actionの変更を行ったところ、エラーは出なくなりました。
(前は、誰かと会った後に探索しようとすると「Internal Sever Error」と出ました)

そして現在は、通常「体力:16/MAX20」のように表示される部分の、現時点体力が表示されず、探索回数指定も効かない状態です。
ご指摘頂いた、$hpの 代入がおかしいのだろうと思うのですが。

> とりあえずエラー内容の詳細と、normal_action(もしくはそこから呼び出しているサブルーチン)のどこで$hpを代入しているかとその周辺のスクリプトを書いてもらえると原因の判別材料になるかと思います。

ということでしたので、normal_actuionのスクリプトを。

>>>>ここから。

sub normal_action {
&get_file; &list_in;
print qq|<tr>|;
    &form('start');
print qq|<td valign=top>|;
    &input('radio','mode','find_partner',' checked',"他の生徒を探す<br>\n");
    &input('radio','mode','note_before','',"メールを送る<br>\n");
    print qq|<div align=center><select name=pd>\n|;
    foreach $line (@lstlines) {
($pid, $pnm, $pps, $pjb, $pig, $psp, $pbp, $ptw) = (split(/<>/, $line))[0, 1, 2, 3, 4, 5, 6,30];
    if($Fm{'id'} eq $pid){$mysp = $psp; $mybp = $pbp; $myjb = $pjb; $hp = $php; $tw = $ptw;}
        else { print qq|<option value="$pid">$pid:$pnm($pjb)\n| }
    }

    print qq|</select> ID:|;
&input('text','pd2','',' size=4','');
print qq|</div>\n|;
    &OKbuttoninform('n');
    &form('end');
    &form('start');
    
    my $num = $tw == 1 || $tw == 2 || $tw == 3 ? '1' : $tw == 4 || $tw == 5 ? '2' : $tw == 6 || $tw == 7 ? '3' : $tw == 8 ? '4' : $tw == 9 || $tw == 10 ? '5' : ''; # mode値に付く数字の計算
    
&input('radio', 'mode', "find_item$num", ' checked', ('新校舎', '旧校舎上階', '旧校舎', '深層部', '最深部')[$num eq '' ? 0 : $num - 1] . '探索  探索回数:'); # 探索場所の表示
        if ($mysp !~ /Nf/ && $hp > 1)
        {
print qq|<select name=t_max>\n|; $hpcheck = 2;
print qq|<option value="1" SELECTED>1回\n|;
while ($hpcheck < $hp) {print qq|<option value="$hpcheck">$hpcheck\回\n|; last if $t_max == $hpcheck; $hpcheck++;}
print qq|</select><BR>|;
}
else{print qq| 0回<BR>|;}
        
    &input('radio','mode','find_champ','',"覇王に挑戦<br>\n")if $mysp =~ /Tf/;
    &input('radio','mode','use_before','',"アイテムの脱着・使用<br>\n") if $mysp =~ /Tf/;
    &input('radio','mode','use_before','',"アイテムの使用<br>\n") if $mysp =~ /Tv/;

&input('radio','mode','yuugou_before','',"鏡融合<br>\n") if $mysp =~ /Yc/;
        &input('radio','mode','fusion_before','',"合成<br>\n") if $mysp =~ /Bp/;
&input('radio','mode','pet_before','',"小龍飼育<br>\n") if $mysp =~ /Cc/;
    &input('radio','mode','dump_before','',"アイテムを捨てる<br>\n");
    &input('radio','mode','stell_before','',"護符の設定<br>\n") if $mysp !~ /Nf/;
     require "soskit.pl";
&menu_dlstl;
    &input('radio','mode','poem_before','',"詩・日誌を書く<br>\n") if $mysp =~ /Wp/ || $mysp =~ /An/;
    &input('radio','mode','goods_before','',"商品の設定<br>\n") if $mysp =~ /Tv/ && $mysp !~ /Nf/;
    &input('radio','mode','goods_before',' checked',"商品の設定<br>\n") if $mysp =~ /Nf/;
    &input('radio','mode','fee_before','',"治療費の設定<br>\n") if $mysp =~ /Ad|Rv/;
    &input('radio','mode','com_before','',"コメント文の変更<br>\n");
    &input('radio','mode','judge_before','',"アイテム鑑定<br>\n") if $mysp =~ /Eo/;
    &input('radio','mode','name_before','',"銘入り品の名前を変更する<br>\n") if $mybp =~ /Na/;
    if ($mysp !~ /X/) {
        &input('radio','mode','reward','','賞金首に摩尼をかける ID:');
&input('text','pd','',' size=4',' 摩尼:');
&input('text','price','',' size=5','<br><br>');
    }
&input('radio','mode','change_menu','',"進路相談室へ<br>\n")if ($tw == 1);
    &input('radio','mode','norm_save','',"踊場で保存\n");
    &input('radio','mode','hide_save','',"身を隠して保存<br>\n");
    &input('radio','mode','levy','',"<font color=red>税の徴収をして保存(注意)</font><br>\n") if $mysp =~ /Lv/;
    &input('radio','mode','del_before','',"キャラを削除\n")if ($tw == 1);
    &input('radio','mode','back_up','',"バックアップ\n")if ($tw == 1);
    &OKbuttoninform('n');
print qq|</td>|;
    &form('end');
}

#略#

# Sub HitPoint Check #
sub hpcheck {
$_[0] += $_[2];
    $_[0] = 1 if $_[0] < 1;
    $_[0] = $_[1] if $_[0] > $_[1];
    return($_[0]);
}

#略#
# Sub Get User #
sub get_user {
return if $getuserflag;
    open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません");
    @_ = <IN>;
    close(IN);
if (!@_) { &error("ID $_[0] 読みこみエラー") }
    ($id,$nm,$ps,$jb,$ig,$sp,$bp,$bn,$ak,$dd,$hp,$xp,$ab,$db,
    $av,$wn,$lz,$dt,$mn,$bg,$xi,$tm,$lf,$fe,$cm,$is,$ht,$fg,$rw,$kl,$tw) = split(/<>/,$_[0]);
$userline = shift(@_);
$getuserflag = 1;
    return @_;
}

<<<<ここまで。
何度も何度も申し訳ありません…。
スレッド一覧


843● Re[3]:コンタクト後の探索エラー[ moon ] 2003 10/18 23:30
修正洩れがありました。
  ($pid, $pnm, $pps, $pjb, $pig, $psp, $pbp, $ptw) = (split(/<>/, $line))[0, 1, 2, 3, 4, 5, 6,30];
を、
  ($pid, $pnm, $pps, $pjb, $pig, $psp, $pbp, $php, $ptw) = (split(/<>/, $line))[0 .. 6, 10, 30];
にしてください。

あと、No.824では新校舎探索のmodeは'find_item'となっているのでわざわざ下記のようにしたのですが、
  my $num = $tw == 4 || $tw == 5 ? '2' : $tw == 6 || $tw == 7 ? '3' : $tw == 8 ? '4' : $tw == 9 || $tw == 10 ? '5' : ''; # mode値に付く数字の計算
  &input('radio', 'mode', "find_item$num", ' checked', ('新校舎', '旧校舎上階', '旧校舎', '深層部', '最深部')[$num eq '' ? 0 : $num - 1] . '探索  探索回数:'); # 探索場所の表示
リンクされたファイルを見ると'find_item'ではなく'find_item1'が正しいようなので、
  my $num = $tw == 4 || $tw == 5 ? '2' : $tw == 6 || $tw == 7 ? '3' : $tw == 8 ? '4' : $tw == 9 || $tw == 10 ? '5' : '1'; # mode値に付く数字の計算
  &input('radio', 'mode', "find_item$num", ' checked', ('新校舎', '旧校舎上階', '旧校舎', '深層部', '最深部')[$num - 1] . '探索  探索回数:'); # 探索場所の表示
と修正が必要だと思います。

ちなみに「Internal Server Error」の原因は後者で、対応するmodeが無いため&header;が実行されなかったためです。
これはどうやらオリジナルの不具合であり、アドレス直打ちなどでsos2.cgi?mode=xxxなどを実行すると再現できるかと思います。(&unlock;は実行されるので実害は無いと思いますが。)
スレッド一覧


844● 今度こそ。[ 織江 ] 2003 10/19 01:11
何度も本当にすみません。
今度こそ…今度こそ大丈夫だと思います!
入ったり来たり、探索したり人と会ったり分かれたりとテストをしてみましたが、エラーは出ませんでした。
現在体力も、探索回数指定も表示されます。

お手数をおかけして本当に申し訳ありませんでした…。
有難うございます!!
スレッド一覧

CGIROOM