私設SoS2オーナー応援BBS

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

スレッド

└◇209:
Re[2]:Myrecordについて [moon] 12/22 21:46

 └◇210:Re[3]:Myrecordについて [masaki] 12/22 22:23
  └◇211:Re[4]:Myrecordについて [moon] 12/22 22:47
   └◇212:Re[5]:Myrecordについて [masaki] 12/23 07:09
    └◇213:Re[6]:Myrecordについて [moon] 12/23 13:18
     └◇214:Re[7]:Myrecordについて [moon] 12/23 13:26
      └◇215:Re[8]:Myrecordについて [masaki] 12/23 22:36<-last


209● Re[2]:Myrecordについて[ moon ] 2002 12/22 21:46
> 間違えました^^;
> ↓こっちです
> http://m3voyage.hp.infoseek.co.jp/newpage.htm
>

原因はuseroutまたはpartneroutの連続実行のせいだと思います。
どんな行動をしたときにそうなるのか、を特定してその処理中のuserout関係をチェックしてみてください。(たぶん改造した箇所内またはそれに類する箇所)
怪しい箇所は分かったけれど問題の場所が分からないという場合は、そのあたりのスクリプトを載せてくれればある程度はチェックします。

[根本的な解決策ではないけれど最終手段]
本当にどうしても解決しない場合は以下のようにすれば問題が回避できます。
ただし、useroutまたはpartneroutが無駄に呼ばれていることには変わりが無いので余計な負荷がかかったままになります。
・sub useroutのwritedatの下にshift(@rcdlines);
・sub partneroutのwritedatの下にshift(@prclines);
スレッド一覧


210● Re[3]:Myrecordについて[ masaki ] 2002 12/22 22:23
for($rt=0;$rt<$Fm{'rt'};$rt++){    
if ($av eq 'dead') { push (@msg,'死んでいます');return }
    if ($hp <= 1) { push (@msg,'ヒットポイントが足りません');return }

    &splititem('i');
    if (@items >= $xi) { push (@msg,'これ以上は持てません');return }

    @itemlines = &opendat($itmdat);
    if (!@itemlines) { &error('アイテムデータ読みこみエラー') }

    sleep(1); srand(time | $$);
$poison = int(rand(100)) + 1;
$stellatio = int(rand(100)) + 1;
$rnd = int(rand(100)) + 1;

    # 探索の特殊能力
    if ($Fm{'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 ($def_xs && length($is) > $def_xs) { 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]のステラツィオを発見しました");
        &userout; return;
    }
    
    if ($idt !~ /Gl/) { push(@items,"$inm△$idt"); &joinitem('i') }
    else { $mn += substr($idt,0,4) }
    &userout;

    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をみつけました");
}
}
↑ここだと思うのですが(^^;
長いです(TT
すみません。
スレッド一覧


211● Re[4]:Myrecordについて[ moon ] 2002 12/22 22:47
複数回探索を実現しようとして、オリジナルをループするのはまずいです。

・&splititem('i');はループ(for)の前。
・@itemlines = &opendat($itmdat);とif (!@itemlines) { &error('アイテムデータ読みこみエラー') }もループの前。
・sleep(1); srand(time | $$);は削除。
・foreach $item (@itemlines)の上に@founditems = ();を追加。
・if ($Fm{'sp'} =~ /Ft/)はVer.1.9のように修正。
・「死んでいます」「ヒットポイントが足りません」「これ以上は持てません」のreturnをlast;に、それ以外のreturnをnext;に変更。
・joinitemと2つあるuseroutを削除し、forの{}の後に&joinitem('i'); &userout;を追加。

何か問題があるかもしれないですが、とりあえず上記のような修正が必要です。
スレッド一覧


212● Re[5]:Myrecordについて[ masaki ] 2002 12/23 07:09
>・if ($Fm{'sp'} =~ /Ft/)はVer.1.9のように修正。
Ver.1.9とは何でしょうか?(;;
よくわかりません。教えてください。
スレッド一覧


213● Re[6]:Myrecordについて[ moon ] 2002 12/23 13:18
> >・if ($Fm{'sp'} =~ /Ft/)はVer.1.9のように修正。
> Ver.1.9とは何でしょうか?(;;
> よくわかりません。教えてください。

SoS2の最新バージョンです。
ダウンロードをしなくても変更点が書かれたページがあるのでそれを参考に修正が必要です。
スレッド一覧


214● Re[7]:Myrecordについて[ moon ] 2002 12/23 13:26
> SoS2の最新バージョンです。
> ダウンロードをしなくても変更点が書かれたページがあるのでそれを参考に修正が必要です。

変更点自体はVer.1.8での変更点です。
$Fm{'sp'} → $sp
スレッド一覧


215● Re[8]:Myrecordについて[ masaki ] 2002 12/23 22:36
やっと治りました〜(感涙
ありがとうございます〜〜!!
読みこみがが早い早い(笑
本当にありがとうございました〜!!
スレッド一覧

CGIROOM