私設SoS2オーナー応援BBS

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

スレッド

└◇1010:
Re:分割のコツ [moon] 04/16 19:56

 └◇1011:Re[2]:分割のコツ [まいる] 04/16 21:20
  └◇1012:Re[3]:分割のコツ [moon] 04/17 00:31
   └◇1013:Re[4]:分割のコツ [まいる] 04/17 01:56<-last


1010● Re:分割のコツ[ moon ] 2004 04/16 19:56
> またお邪魔いたします
>
> 非常に抽象的で申し訳ないのですが、本体を分割してplファイルにする際にどうしても上手くいかないのです
>
> サブルーチンをplファイルに移す→playformでplファイルを指定する
>
> でやり方は合ってますよね?
> plファイルに保存する際、最後に1;もつけています
>
> 試しにアイテム探索を分割してみたところ、複数回探索が機能せず、常にアイテムが何も発見されませんでしたとなってしまいました
>
> 何かコツってあるんでしょうか?

requireする箇所はsub play_formと限ったわけではないですが、探索の場合でしたらそれで合っています。
複数回探索はおそらく分割前は正常に動作していたのでしょうから、そうするとアイテムデータの受け渡しに失敗しているとか一定の値でsrandを実行しているとか、などが原因として考えられると思います。
なんにしろ、複数回探索でどんな処理をしているのかわからないので何とも言えません。
スレッド一覧


1011● Re[2]:分割のコツ[ まいる ] 2004 04/16 21:20
#Sub Play Form
&find_item_sub if $Fm{'mode'} eq 'find_item'; を以下の文に
if ($Fm{'mode'} eq 'find_item'){require './find_item.pl';&find_item; }

plファイルには
# Sub Find Item #
sub find_item {
    $poison = int(rand(100)) + 1;
    $stellatio = int(rand(100)) + 1;
    $rnd = int(rand(100)) + 0.5;
    @founditems = ();

    # 探索の特殊能力
    if ($sp =~ /Ft/) { $rnd -= 2; $rnd = 1 if $rnd < 1 }

    foreach $item (@itemlines) {
        ($inm,$idt,$idc) = split(/<>/,$item);
        if ($rnd <= $idc) { push(@founditems,$item) }
    }

    $rnd = int(rand(@founditems));
    ($inm,$idt,$idc) = split(/<>/,$founditems[$rnd]);
    if (!$inm) { push (@msg,'何もみつかりませんでした');return }
    $hp--;

    if ($poison <= $def_pd && $av eq 'poison') {
        $hp--; if ($hp < 1) { $hp = 1 }
        push (@msg,'毒によるダメージのため体力が1減りました');
    }

    if ($stellatio <= $def_zd) {
        if ($sp !~/Ag/){
        if ($def_xs && length($is) > $def_xs - 1) { push (@msg,'ステラツィオを発見しましたが、所持オーバーの為捨てました');return }
        }
        $itsrnd = int(rand(12));
        $is .= "$iti[$itsrnd]";
        push (@msg,"<img src=$imgdir$itsrnd$def_jg width=$st_wd height=$st_ht> $itn[$itsrnd]のステラツィオを発見しました");
#-ADD- thanksストロベリージャム様
    $is = &stell_sort($is);
#-END of ADD- SION0006v2.01-3-4/4
        return;
    }
    
#-ADD-
#-------- モンスタ出現 ---------------------------------------------------
    if ($idt =~ /Ms/) {
        $mid = substr($idt,0,2);
        $run = substr($idt,2,2);
        if ($run > rand(100)) {
            push (@msg,"$inm が現れましたが、うまくやり過ごしました。");
# ↓経験値:レベルシステムを導入している時には行頭の#を消す。
#            $exp =+ int(rand(2));
        } else {
            push (@msg,"$inm が現れ、戦闘となりました。");
            &joinitem('i'); &userout;
            $getuserflag = 0;
            $find = 'find'; &fight;
            last;
        }
        return;
    }
#-END of ADD- SAIL0002v2.04-5-4/6
    if ($idt !~ /Gl/) { push(@items,"$inm△$idt"); &joinitem('i') }
    else { $mn += substr($idt,0,4) }

    if ($idt =~ /Li/) {
        foreach (0 .. $#itemlines) {
            ($lnm,$ldt,$ldc) = split(/<>/,$itemlines[$_]);
            if ($inm eq $lnm) { splice (@itemlines,$_,1); last }
        }
        &writedat($itmdat,@itemlines);
    }
    push (@msg,"$inmをみつけました");
}

1;

とそのままコピーしたのですが、どこかおかしいところありますでしょうか?
分割前は正常に動作していたので、Sub Play Formでの指定方法が悪いのでしょうか・・・
スレッド一覧


1012● Re[3]:分割のコツ[ moon ] 2004 04/17 00:31
> #Sub Play Form
> &find_item_sub if $Fm{'mode'} eq 'find_item'; を以下の文に
> if ($Fm{'mode'} eq 'find_item'){require './find_item.pl';&find_item; }
〜 略 〜
> とそのままコピーしたのですが、どこかおかしいところありますでしょうか?
> 分割前は正常に動作していたので、Sub Play Formでの指定方法が悪いのでしょうか・・・


sub find_itemは複数回探索ではないですね。
&find_item;ではなく&find_item_sub;の間違いだと思います。

# そうするとsub find_item_subもfind_item.plに移動しておいたほうが分割する意味がアップします。
スレッド一覧


1013● Re[4]:分割のコツ[ まいる ] 2004 04/17 01:56
> sub find_itemは複数回探索ではないですね。
> &find_item;ではなく&find_item_sub;の間違いだと思います。
>
> # そうするとsub find_item_subもfind_item.plに移動しておいたほうが分割する意味がアップします。

有難うございました
無事、正常に動作していることを確認できました
初歩的なミスでお恥ずかしい限りです

今後とも宜しくお願い致します
スレッド一覧

CGIROOM