#MASTER BARで質問しているΣのルーチン。NPCと遭遇することができずエラーに(泣 # Sub Find Item # sub find_item { if (!$post) { return } @rcdlines = &get_user("$Fm{'id'}"); 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 ($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 - 1) { push (@msg,'ステラツィオを発見しましたが、所持オーバーの為捨てました');return } $itsrnd = int(rand(12)); $is .= "$iti[$itsrnd]"; push (@msg," $itn[$itsrnd]のステラツィオを発見しました"); &userout; return; } #-ADD- #-------- NPC出現 ------------------- if ($idt =~ /Ng/ || $idt =~ /Ms/) { $ngid = substr($idt,0,4); $Fm{'pd'} = $nghead . $ngid; $runtf = substr($idt,4,2); $runtv = substr($idt,6,2); if ($sp =~ /Tf/) { $run = $runtf } else { $run = $runtv } $runrd = int(rand(100) + 1); if ($run >= $runrd ) { # if ($idt =~ /Ms/) { if ($idt =~ /Ms/ && $idt =~ /M3/) { require "$set::lib_dir/fight.cgi"; require "$set::lib_dir/sos3_routine.pl"; require "$mondat"; # &joinitem('i'); # 複数回探索を取り入れていて、&joinitemされていない場合はコメントを外す $I = &SOS2toSOS3; &get_item($I); $U = {%{ $FI{$inm} }}; unless (&fight_creature($set::ffx)) { &SOS3toSOS2($I); $result = -1; $breakitem = 0; &break_item; $bp = $bn = ''; &userout; $getuserflag = 0; # 複数回探索を取り入れている場合は &splititem('i'); に変更する return; # 複数回探索を取り入れている場合は、last; に変更する。 } if (&roll_dice(1000) > $U->{gi} + $S->{bonus}) { &SOS3toSOS2($I); $result = !$U->{lf} ? 1 : 0; $breakitem = 0; &break_item; $bp = $bn = ''; &userout; $getuserflag = 0; # 複数回探索を取り入れている場合は &splititem('i'); に変更する return; # 複数回探索を取り入れている場合は、next; に変更する。 } if (!$U->{lf}) { $Ii = &select_acquisition($U); push (@{$I->{Bg}},$Ii); &M("$Ii->{nm}を手に入れました"); } &SOS3toSOS2($I); $result = 1; $breakitem = 0; &break_item; $bp = $bn = ''; &userout; $getuserflag = 0; # 複数回探索を取り入れている場合は &splititem('i'); に変更する return; # 複数回探索を取り入れている場合は、next; に変更する。 } elsif ($idt =~ /Ms/) { push (@msg,"何かが近づく気配に気付いたので、うまくやり過ごしました。"); $exp += int(rand(5)); } else { push (@msg,"何物かが草陰から走り去って行きました。"); } } else { $find = 'find'; &joinitem('i'); &userout; $getuserflag = 0; if ($idt =~ /Ms/) { push (@msg,"
$inm が現れ、戦闘となりました。
"); &fight; } else { push (@msg,"
$inm に出会いました。"); $notfound = 0; } return; } # 複数回探索を取り入れている場合は、last; に変更する。 return; } #-END of ADD- SION0002v3.01-4-8/18 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をみつけました"); } 1; *おかしな箇所があったら指摘して下さい - Σ (2007年05月21日 10時28分35秒)