▼スレッド
│
└◇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
> 間違えました^^;スレッド一覧
> ↓こっちです
> http://m3voyage.hp.infoseek.co.jp/newpage.htm
>
原因はuseroutまたはpartneroutの連続実行のせいだと思います。
どんな行動をしたときにそうなるのか、を特定してその処理中のuserout関係をチェックしてみてください。(たぶん改造した箇所内またはそれに類する箇所)
怪しい箇所は分かったけれど問題の場所が分からないという場合は、そのあたりのスクリプトを載せてくれればある程度はチェックします。
[根本的な解決策ではないけれど最終手段]
本当にどうしても解決しない場合は以下のようにすれば問題が回避できます。
ただし、useroutまたはpartneroutが無駄に呼ばれていることには変わりが無いので余計な負荷がかかったままになります。
・sub useroutのwritedatの下にshift(@rcdlines);
・sub partneroutのwritedatの下にshift(@prclines);
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
すみません。
複数回探索を実現しようとして、オリジナルをループするのはまずいです。スレッド一覧
・&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;を追加。
何か問題があるかもしれないですが、とりあえず上記のような修正が必要です。
>・if ($Fm{'sp'} =~ /Ft/)はVer.1.9のように修正。スレッド一覧
Ver.1.9とは何でしょうか?(;;
よくわかりません。教えてください。
> >・if ($Fm{'sp'} =~ /Ft/)はVer.1.9のように修正。スレッド一覧
> Ver.1.9とは何でしょうか?(;;
> よくわかりません。教えてください。
SoS2の最新バージョンです。
ダウンロードをしなくても変更点が書かれたページがあるのでそれを参考に修正が必要です。
> SoS2の最新バージョンです。スレッド一覧
> ダウンロードをしなくても変更点が書かれたページがあるのでそれを参考に修正が必要です。
変更点自体はVer.1.8での変更点です。
$Fm{'sp'} → $sp
やっと治りました〜(感涙スレッド一覧
ありがとうございます〜〜!!
読みこみがが早い早い(笑
本当にありがとうございました〜!!