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入手出来る。
いずれも、ゲーム内の所持金流通量を増加させるため、ゲームバランスの調整が難しくお奨めではありません。
最低限、乱用はさけ、また入手できる金額も抑えましょう。