トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

NPC遭遇

  • 青色は、改造箇所を示します。ファイル名: ルーチン名: 行番号 を示します。
  • 黒色文字は、「改造前の状態」を示します。
  • テキストボックスの中のプログラムを、該当の場所に上書きして下さい。

NPC遭遇 Ver 3.01 ★★★★★☆☆☆

探索時にNPCが出現する様になります。出会い頭に戦闘を発生させる事も可能ですので、 モンスターの出現ルーチンとして利用できます。
この 改造を取り入れる際には、併せて 【 改造者表示 】 の改造を取り入れて頂けると嬉しいです。(非強制)
&getuser の二度読みを行いますので、併せて【 改造時データ保存 】の改造をお奨めします。
また、併せて【 NPC強化 】の改造をお奨めします。
モンスターと遭遇Ver2.05 以前を既に採用済みの場合、これをアンインストールする必要があります。
【 モンスターと遭遇 Vertion2.05 】を参考に、アンインストールして下さい。

履歴
2007/02/17 Wikiにて公開
2003/09/03 Version 3.01 細かなバグ修正。
2003/08/29 Version 3.00 ufs2.cgiのバグ修正(本体sos2修正はありません)。
2003/08/18 Version 3.00 NPCの出現に対応。モンスターデータ形式を廃止し、NPCデータをそのまま利用。
2003/07/22 Version 2.05 モンスター体力回復関連の修正
2003/07/21 Version 2.04 Version 2.03の致命的バグ修正:人形版、又は【 改造時データ保存 】の改造済みであれば不要 
2003/07/18 Version 2.03 複数回探索を取り入れている時の致命的バグ修正
2003/07/16 Version 2.02 マイナーバージョンアップ
2003/07/13 Version 2.01 遭遇時には残り体力に関わらず戦闘となるよう修正 
2003/07/10 Version 2.00 モンスターデータを別ファイルに。/公開 
2003/05/11 Version 1.00 完成:当時はアイテムデータにモンスターデータを詰め込んでいた。 

注意事項


masimaro さんの配布されております、[ 装備使用回数制限 ] と併用する場合には、下記修正を必ず実施して下さい。
[ 装備使用回数制限 ] は、非戦闘系の戦闘を想定していない為、この修正が必要となります。
# sub fight # if ($pc > 0) {の行を、if ($break == 0 || $pc > 0) {として下さい。
ねる部屋 さんの配布されておりました、[ 戦闘に解説を付ける ] と併用する場合には、下記修正を必ず実施して下さい。
[ 戦闘に解説を付ける ] の該当部分は、問題を孕んでいます。
battle.pl  sub bmsg 
foreach $item (@items) {

($item,$sts,$price) = split(/△/,$item);
の所を、
foreach $temp (@items) {
($item,$sts,$price) = split(/△/,$temp);
として下さい。

共通改造ポイント

◆改造ポイント01 NPCデータの入力時にデータ修正を行うルーチンを追加します。


sos2.cgi # Sub Get Partner # Line:2164
perl/subsos.cgi # Sub Get Partner # Line:83

shift(@_);

※ 街移動システム/エリア移動システムが未導入の場合、特に必要ありません。
※【 NPC強化 】改造を併せてお奨めします。

◆改造ポイント02 NPCとの遭遇戦闘に対応させます。


sos2.cgi # Sub Fight # Line:1550
if ($plf eq $id) { push (@msg,"$pnmとは暫く戦えません"); return }



sos2.cgi # Sub Fight # Line:1572
$uatk = $ak + $ab + $uw + $uo; $patk = $pak + $pab + $def_ab + $pw + $po;



sos2.cgi # Sub Fight # Line:1626
if (!$Bidice) {



sos2.cgi # Sub Fight # Line:1649-1661
if ($itemchance && $pitems[$Sidice]) {
&splititem('i');
($item,$sts,$price) = split(/△/,$pitems[$Sidice]);
if ($sts !~ /Ns/) {
if ($sts =~ s/Q[swat]//g) { $pab -= substr($sts,4,2); $pdb -= substr($sts,6,2) }
splice(@pitems,$Sidice,1); push(@items,"$item△$sts");
$psp =~ s/Qb//g if $sts =~ /Bw/;
$psp =~ s/Qk//g if $sts =~ /Kt/;
$psp =~ s/Qx//g if $sts =~ /Ax/;
$psp =~ s/Qm//g if $sts =~ /Sw/;
&joinitem('iI'); &fmsg('奪');
}
}




sos2.cgi # Fight Message # Line:1727
'奪',"$pnmから$itemを奪いました",

◆改造ポイント03 NPCファイルのファイル名追加接頭子を設定します。


sos2.cgi # ---------- USER DIRECTORY Line34
$usrdir = 'userdata/'; # ユーザデータを格納するフォルダ

※ 'NPC' の部分は任意に変更して下さい。
ファイル名を変更せず、デフォルト(ID4桁のみ)を使う場合は Null('')にして下さい。

◆改造ポイント04 遭遇ルーチンを追加します。


sos2.cgi # Sub Find Item # Line792
if ($idt !~ /Gl/) { push(@items,"$inm△$idt"); &joinitem('i') }

※ 出会いやすくしたり出会い難くするスキルを追加する場合は、
$runrd = int(rand(100) + 1); の行を改造します。
※ 複数回探索を取り入れている場合には、1つ目の return を last に書き換えて下さい。
また、foreach のループの外にある &userout; は、if (!$find) { &userout; }として下さい。

◆改造ポイント05 探索ルーチンをNPC出現に対応させます。


sos2.cgi # Sub Play Form # Line299
&find_item if $Fm{'mode'} eq 'find_item';



sos2.cgi # Sub Contact Form # Line329
sub contact_form {



sos2.cgi # Main Program # Line229
if ($Fm{'mode'} eq 'find_item') { &play_form }

◆改造ポイント06 遭遇ルーチンをNPC出現に対応させます。


sos2.cgi # Sub Contact Action # Line685
if ($psp =~ /(V[a-z])/) {
$vflag = $1;
&splititem('i');
foreach (@items) {
$right = 1 if (split(/△/))[1] =~ /$vflag/;
}
if (!$right) {
&error("$pnmに会うためにはあるアイテムが必要です");
}
}


※ $method をGETに変更していると動作しなくなります。POST の設定に戻してください。
何らかの事情で GET にせざるを得ない場合は、if (!$post) { return } の行を削除すれば
動作はしますが、不正行為が行われやすくなります。



sos2.cgi # Sub Contact Action # Line685
&OKbuttoninform('on');

共通改造ポイントへ進む :改造ポイント7以降を実施

dollEx版改造ポイント

◆改造ポイント01 NPCデータの入力時にデータ修正を行うルーチンを追加します。


sos2.cgi # Sub Get Partner # Line:2164
perl/subsos.cgi # Sub Get Partner # Line:83

shift(@_);

※ 街移動システム/エリア移動システムが未導入の場合、特に必要ありません。
※【 NPC強化 】改造を併せてお奨めします。

◆改造ポイント02 NPCとの遭遇戦闘に対応させます。


perl/fight.cgi # Sub Fight # Line:9
my($afgt_chk,$afck_msg) = &fight_check;



perl/fight.cgi # Sub Fight # Line:33
$uatk = $ak + $ab + $def_ab + $uw + $uo; $patk = $pak + $pab + $pw + $po;



perl/fight.cgi # Sub Fight # Line:128
unless ($Bidice) {



perl/fight.cgi # Sub Fight # Line:155-171
if ($itemchance && $pitems[$Sidice]) {
&splititem('i');
($item,$sts,$price) = split(/△/,$pitems[$Sidice]);
if ($sts !~ /Ns/) {
if ($sts =~ s/Q[swat]//g) { $pab -= substr($sts,4,2); $pdb -= substr($sts,6,2) }
splice(@pitems,$Sidice,1); push(@items,"$item△$sts");
$psp =~ s/Qb//g if $sts =~ /Bw/;
$psp =~ s/Qk//g if $sts =~ /Kt/;
$psp =~ s/Qx//g if $sts =~ /Ax/;
$psp =~ s/Qm//g if $sts =~ /Sw/;
$psp =~ s/Of// if $sts =~ /Of/; # 釣り竿の盗み処理
#属性
foreach (@element_ak) { if($sts =~ /$_/) { $psp =~ s/$_// } }
foreach (@element_df) { if($sts =~ /$_/) { $psp =~ s/$_// } }
&joinitem('iI'); &fmsg('奪');
}
}




perl/fight.cgi # Fight Message # Line:237
'奪',"$pnmから$itemを奪いました",

◆改造ポイント03 NPCファイルのファイル名追加接頭子を設定します。


ini/filepath.cgi # ---------- USER DIRECTORY Line:19
$usrdir = 'userdata/'; # ユーザデータを格納するフォルダ

※ 'NPC' の部分は任意に変更して下さい。
ファイル名を変更せず、デフォルト(ID4桁のみ)を使う場合は Null('')にして下さい。

◆改造ポイント04 遭遇ルーチンを追加します。


perl/find.cgi # Sub Find Item # Line:45
require $itemcreatorpl; ($inm,$idt) = &item_ceator($inm,$idt);

※ 出会いやすくしたり出会い難くするスキルを追加する場合は、
$runrd = int(rand(100) + 1);
の行を改造します。

◆改造ポイント05 探索ルーチンをNPC出現に対応させます。


perl/form.cgi # Sub Play Form # Line:14-19
if ( $Fm{'mode'} eq 'find_item' ) {
require $findpl; srand(time | $$);
foreach(0 .. ($Fm{'it'} -1)) { undef @founditems; &find_item; }
}
#鍛冶
elsif ( $Fm{'mode'} eq 'smith_after' ) { require $smithpl; &smith_after; }




perl/form.cgi # Sub Contact Form # Line:61
if ( $Fm{'mode'} eq 'find_partner' ) { require $anypl; &contact_check }



sos2.cgi # Main Program # Line:36
elsif ($Fm{'mode'} eq 'find_item') { require $formpl; &play_form }

◆改造ポイント06 遭遇ルーチンをNPC出現に対応させます。


perl/action.cgi # Sub Contact Action # Line:69
if ($psp =~ /(V[a-z])/ && $bg !~ /$1/) { &error("$pnmに会うためにはあるアイテムが必要です") }



perl/action.cgi # Sub Contact Action # Line:85
&OKbuttoninform('on');

共通改造ポイントへ進む :改造ポイント7以降を実施

共通改造ポイント

◆改造ポイント07 UFSをNPCに対応させます。


ufs2.cgi # ------------ USER DIRECTORY Line39
dollEx 版は不要

$usrdir = 'userdata/'; # ユーザデータを格納しているフォルダ

※ 改造ポイント03に併せて下さい。


ufs2.cgi # Sub Make From # Line576
ufs/make.cgi # Sub Make From # Line:6
print qq|<tr><td>名前</td><td><input type=text name=name></td></tr>\n|;



ufs2.cgi # Sub Made From # Line605
ufs/make.cgi # Sub Made From # Line:33
while (-e "$usrdir$id\.dat") { $id++; $id = sprintf("%04d",$id) }

※ 必要に応じ、.dat を .cgi に修正して下さい(3箇所)


ufs2.cgi # Sub Make Free # Line620
ufs/make.cgi # Sub Make Free # Line:46
print qq|<tr><td>名前</td><td><input type=text name=name></td></tr>\n|;



ufs2.cgi # Sub Made Free # Line647
ufs/make.cgi # Sub Made Free # Line:73
while (-e "$usrdir$id\.dat") { $id++; $id = sprintf("%04d",$id) }

※ 必要に応じ、.dat を .cgi に修正して下さい(3箇所)

◆改造ポイント08 NPCとの遭遇データを設定します。

NPCとの遭遇データを設定します。

itm.dat 任意の場所に追加 ( dollEx ver の場合は、dat/itm.cgi )

NPC名<>8桁のステータス+Ng<>出現割合<> として、NPCを設置するか、または
NPC名<>8桁のステータス+Ms<>出現割合<> として、モンスタを設置します。

NPC
例えば「キメラ」の場合、「キメラ」と設定しても構いませんが、「鳥の様なモンスター」と設定しても面白いでしょう。

ステータス(1〜4桁目)
 NPCのIDの数値部分4桁を設定します。
 実際のNPC-IDは、改造ポイント3で設定した $nghead+このID4桁 となります。

ステータス(5〜6桁目)
 戦闘系キャラ(Tf)の場合の、逃げる(またはNPCに逢い損ねる)確率を設定します。

ステータス(7〜8桁目)
 非戦闘系キャラ(Tfが無い)の場合の、逃げる(またはNPCに逢い損ねる)確率を設定します。

Ms
 遭遇した場合、強制的に戦闘を開始します。Ng より優先されます。

Ng
 Ms が設定されていない場合には、そのNPCとの遭遇画面となります。

出現割合には、そのNPCに出会う確率値を入れます。通常のアイテムと同様に設定して下さい。

ufs2.cgi を使用して設定する事も可能です。

この場合、次の様に設定して下さい。

アイテム名 ⇒ NPC名
買取価格  ⇒ ステータス 1〜4桁目
属性    ⇒ Ms 又は Ng
攻撃値   ⇒ ステータス 5〜6桁目
防御値   ⇒ ステータス 7〜8桁目
発見確率  ⇒ 出現割合


◆改造ポイント09 NPCデータを作成します。

NPCデータを作成します。

通常の「キャラクタを作る手順」で作成して構いません。

ufs2.cgi を使用して作成する場合には、NPCのチェックボックスをONにして作成して下さい。
この場合、自動的に キャラスキルフラグに Ng が追加されます。


◆改造ポイント10 おまけの改造。


sos2.cgi # Sub fight # Line:1662
perl/fight.cgi # Sub fight # Line:172
$bp = $bn = $pbp = $pbn = ''; $plf = $id;

KIL0000 フラグを追加したNPCを「殺害」すると 0000 G入手出来る。
MNY0000 フラグを追加したNPCに「勝利」すると 0000 G入手出来る。
いずれも、ゲーム内の所持金流通量を増加させるため、ゲームバランスの調整が難しくお奨めではありません。
最低限、乱用はさけ、また入手できる金額も抑えましょう。