Script of Saga III b1.4 修正点

戻る

b1.4の注意点
旧バージョンの「鍛冶用ハンマー」はデータにミスがあり作成に使用できません。



library/ornament.cgi: sub type_plus
武具のプラスが変化しない場合に表示されるメッセージの不具合。
修正前
            &change_status($Si,'pl',-1);
            $M = $Si->{pl} ? "$Si->{nm}のプラスが1下がりました。" : "$Si->{nm}のプラスに変化はありません。";
修正後
            $M = $Si->{pl} ? "$Si->{nm}のプラスが1下がりました。" : "$Si->{nm}のプラスに変化はありません。";
            &change_status($Si,'pl',-1);
library/transfer.cgi: sub transfer_after
移動した後に戻るボタン。
修正前
    &say("$I->{Pl}{nm}に移動しました",'CLOSE','Reload');
修正後
    &say("$I->{Pl}{nm}に移動しました",'transfer_before','Reload');
library/use.cgi: sub use
生の食材を食べれてしまう不具合の修正。
修正前
        elsif ($Si->{Ql}{Rf} && !$I->{Sk}{Wb}) { &M("$Ii->{nm}は生で食べられない食材です。") }
修正後
        elsif ($Ii->{Ql}{Rf} && !$I->{Sk}{Wb}) { &M("$Ii->{nm}は生で食べられない食材です。") }
library/use.cgi: sub type_expendable
アイテムの使用によってLIFが0以下になる不具合を修正。
追加
            if ($Si->{Ql}{Pm}) { $V = &roll_dice(2) == 1 ? $V : -$V }
            if ($K eq 'lf' && $I->{$K} + $V < 1) { $I->{$K} = abs($V) + 1 }

以上の修正情報はUchimata様よりご提供頂きました。






library/bag.cgi: sub bag
フォーム送信にflを追加。
追加
    <input type=hidden name=xx value="$I->{XX}">
    <input type=hidden name=fl value="bag">
library/base.cgi: sub change_status
病気になっていないにも関わらず、満タンに回復する度に「治りました」というメッセージが出る不具合の修正。
修正前
        $S->{$T} = $S->{"M$T"};
        if ($Y) {
修正後
        $S->{$T} = $S->{"M$T"};
        if ($Y && $S->{Cd}{$Y}) {
library/base.cgi: sub decorate_item
販売しているペットの必要スロット数が正しく表示されないエラーの修正。
闇市で販売しているアイテムは総重量ではなく一個単位の重量を表示するように修正。
修正前
my ($V,$W,$X);
修正後
my ($V,$W,$X,$Y,$Z);

追加
    $X = $I->{Ap} ? $I->{Ap} : 1;
    $W = $Si->{Qn} ne '' ? $Si->{Qn} : $Si->{qn};
    $Y = $Si->{Sp} ? $Si->{Sp} : $Si->{sp};
    $Z = $Si->{wt} if $T;
    $Z ||= $Si->{wt} * $W;
    $Z ||= $Si->{sl};
    $Z = 0 if $Si->{cl} eq 'Cu';

修正前
    $V .= " x $Si->{qn}" if $Si->{qn} > 1 && !$Si->{Qn} && !$T;
    $V .= " x $Si->{Qn}" if $Si->{Qn};
    $V .= " = " . int($Si->{sp} * $X) . " $set::mny" if $Si->{sp} && !$Si->{Sp};
    $V .= " = " . int($Si->{Sp} * $X) . " $set::mny" if $Si->{Sp};
    $V .= " (" . $Si->{wt} * $Si->{qn} . "$set::wgt)" if $Si->{cl} ne 'Cu';
    $V .= "・・・在庫 $Si->{qn}" if $T;
修正後
    $V .= " x $W" if $W > 1 && !$T;
    $V .= " = " . int($Y * $X) . " $set::mny" if $Y;
    $V .= " ($Z$set::wgt)" if $Z;
    $V .= "・・・在庫 $W" if $T;
library/base.cgi:
(Fd|Mt|Ig|Pi|Wd|Lt|Ct|Jw)が複数あって危険なのでサブルーチンにまとめる(応用も考慮したサブルーチンに)。
サブルーチンを新たに追加
# Sub Item Class Check #
sub item_class_check {
my  $Si = shift;

    return 'M' if $Si->{cl} =~ /(Fd|Mt|Ig|Pi|Wd|Lt|Ct|Jw)/;
}
library/blackmarket.cgi: sub blackmarket_before
「管理権」スキルがある者は闇市のアイテムを削除する事ができる。
追加
    $t1 .= qq|<p><input type=checkbox name=dl class=checkbox> 買わずに削除する</p>\n| if $I->{Sk}{Rm};

    &get_code;
library/blackmarket.cgi: sub blackmarket_after
同上。
追加
        if ($F{ui} eq "$Ui->{id}_$Ui->{gd}") {
            if ($F{dl}) { $Ui->{qn} = 0; last }
library/butcher.cgi: sub butcher_before
屠殺できないペットを選択した時は処理を中断する。
屠殺時に得られるアイテム量の表示がおかしい。0の場合は1にする。
修正前
        if (!$Ip->{hg}) {
            $t1 .= "$Ip->{Nm}は既に死んでいます。$Ip->{Nm}からは何も手に入りません。<hr>\n";
            next;
        }
        if (!$Ip->{sg} || !exists $FI{$Ip->{nm}}) {
            $t1 .= "$Ip->{Nm}からは何も手に入りません。<hr>\n";
            next;
        }
        $age = &get_passage($Ip->{bt},$set::pyt);
        $Ip->{Im} = &item_image($Ip);
修正後
        $Ip->{Im} = &item_image($Ip);
        &say("$Ip->{Im}$Ip->{Nm}は既に死んでいます。$Ip->{Nm}からは何も手に入りません。",'pet') if !$Ip->{hg};
        &say("$Ip->{Im}$Ip->{Nm}からは何も手に入りません。",'pet') if !$Ip->{sg} || !exists $FI{$Ip->{nm}};
        &say("$Ip->{Im}$Ip->{Nm}は騎乗中です。",'pet') if $Ip->{eq} eq 'rd';
        &say("$Ip->{Im}$Ip->{Nm}は冒険に同行中です。",'pet') if $Ip->{eq} eq 'co';
        $age = &get_passage($Ip->{bt},$set::pyt);

追加
            $Ui->{Qn} = int($age * $set::pcp * $Ui->{qn} * $Ip->{ft} / (80 - $I->{st}) * $I->{bonus});
            $Ui->{Qn} ||= 1;
library/butcher.cgi: sub butcher_after
屠殺時に得られるアイテム量の表示がおかしい。0の場合は1にする。
牛飼いは屠殺時に経験値を得られるようにする。
追加
    require "$set::itm_dir/corpse.cgi";
    require "$set::lib_dir/experience.cgi";

追加
            &error('Butcher Error') if $Ui->{Qn} > 100;
            $Ui->{Qn} ||= 1;

追加
            &M("$Ui->{Im}$Ui->{nm}を$Ui->{qn}つ手に入れました。");
            &experience($I,$Ui->{Qn} * 20) if $I->{Sk}{Bc};

追加
    &reload_data('ex') if $I->{Sk}{Bc};
    &reload_gage('hy','V') if !$I->{Sk}{Bc};
library/buy.cgi: sub buy_after
対人からのペット購入時に正しくMy Recordに記録されないエラーを修正。
対人にペットを売った後、ペットスロットから売ったペットが消えない不具合を修正。
修正前
        $M .= "$Ui->{Im}$I->{nm}は$Ui->{nm}を$Ui->{sp} $set::mnyで購入しました。<br>\n";
        &M("$Up->{Im}$Up->{nm}を購入しました。");
修正後
        $M .= "$Up->{Im}$I->{nm}は$Up->{nm}を$Up->{sp} $set::mnyで購入しました。<br>\n";
        &M("$Up->{Im}$Up->{nm}を購入しました。");

修正前
        $Up->{qn} = 0;
修正後
        $Up->{id} = '';
library/castle.cgi: sub castle_before
飼養許可証(ペット枠拡張)の販売を追加。
修正前
my ($L,$V1,$V2,$V3,$V4);
修正後
my ($L,$V1,$V2,$V3,$V4,$V5);

修正前
    $V3 = ($I->{pc} + 1) * $set::psp;
    $V4 = ($I->{bk} + 1) * $set::bkp;
修正後
    $V3 = ($I->{Mpx} + 1) * $set::pxp;
    $V4 = ($I->{pc} + 1) * $set::psp;
    $V5 = ($I->{bk} + 1) * $set::bkp;

修正前
    <input type=radio class=radio name=tp value=pc> パックスキルを習得する・・・$V3 $set::mny<br>
    <input type=radio class=radio name=tp value=bk> 銀行保管料を支払う・・・$V4 $set::mny<br>
修正後
    <input type=radio class=radio name=tp value=Dd3> 飼養許可証を購入する・・・$V3 $set::mny<br>
    <input type=radio class=radio name=tp value=pc> パックスキルを習得する・・・$V4 $set::mny<br>
    <input type=radio class=radio name=tp value=bk> 銀行保管料を支払う・・・$V5 $set::mny<br>
library/castle.cgi: sub castle_after
同上。
修正前
    if ($F{tp} eq 'Dd1' || $F{tp} eq 'Dd2') {
修正後
    if ($F{tp} eq 'Dd1' || $F{tp} eq 'Dd2' || $F{tp} eq 'Dd3') {

修正前
        else {
            $V = ($I->{bs} - $set::bbs + 1) * $set::bsp;
            $M = $I->{bs};
        }
修正後
        elsif ($F{tp} eq 'Dd2') {
            $V = ($I->{bs} - $set::bbs + 1) * $set::bsp;
            $M = $I->{bs};
        }
        else {
            $V = ($I->{Mpx} + 1) * $set::pxp;
            $M = $I->{px} + $set::mpx;
        }
library/companion.cgi: sub set_companion
騎乗・冒険に連れて行くペットは値段設定と予約品設定を解除する。
追加
    $Sp->{eq} = $V;
    $Sp->{sp} = '';
    $Sp->{rs} = '';
library/compose.cgi: sub compose
作成画面からでも「パックにする」「パックを分ける」「捨てる」を使用できるようにする。
修正前
    &header(CSS=>'sub');
修正後
    &header(CSS=>'sub',JavaScript=>'GetView');

修正前
    <select name=tp class=select>
修正前
    <select id=mode name=md class=select onChange="HideObject('type','mode','compose_before','normal');">
    <option value="compose_before">作成する</option>
    <option value="pack">パックにする</option>
    <option value="unpack_before">パックを分ける</option>
    <option value="dump">捨てる</option>
    </select>
    <select id=type style="visibility:visible" name=tp class=select>

修正前
    <input type=hidden name=md value="compose_before">
修正前
    <input type=hidden name=fl value="compose">
library/compose.cgi: sub compose_before
一度に複数作成できるようにする(作成できる個数はパックスキルに依存する)。
修正前
my  $t1;
修正後
my ($t1,$t2);

追加
    foreach (1 .. $I->{pc}) {
        $t2 .= qq|<option value="$_">$_</option>\n|;
    }

    &set_code;

修正前
    <select name=ci class=select>$t1</select> $set::but{'OK'}
修正後
    <select name=ci class=select>$t1</select> 数量:<select name=do class=select>$t2</select> $set::but{'OK'}
library/compose.cgi: sub compose_after
一度に複数作成できるようにする(作成できる個数はパックスキルに依存する)。
アイテム作成に金が必要な時に表示されるメッセージの不具合を修正。
食料生産しない職業の為にMtクラスのアイテムを作成した時に一定確率で量が二倍になるサブルーチンを追加する。
追加
    $Ui = $FI[$F{ci}-1];

    if ($F{do} > 1 && &item_class_check($Ui->{dt}) ne 'M') {
        &M("$Ui->{dt}{nm}は一つずつしか作成できません。");
        $F{do} = 1;
    }

    if ($F{do} > 1) {
        foreach $V (keys %{$Ui->{cl}}) {
            $Ui->{cl}{$V} *= $F{do};
        }
        foreach $V (keys %{$Ui->{id}}) {
            $Ui->{id}{$V} *= $F{do};
        }
        $Ui->{dt}{qn} *= $F{do};
        $Ui->{ex} *= $F{do};
        $Ui->{gl} *= $F{do};
    }

追加
        ($K,$V) = split(/=/);
        $V *= $F{do};

修正前
        &say("$set::lab{$K}が $V 必要です",'compose') if $I->{gl} < $Ui->{gl};
修正後
        &say("作成には $Ui->{gl} $set::mny必要です",'compose') if $I->{gl} < $Ui->{gl};

修正前
        &M("$Ui->{Im}$Ui->{dt}{nm}を作成しました。");
修正後
        &M("$Ui->{Im}$Ui->{dt}{nm} x $Ui->{dt}{qn}を作成しました。");

追加
        &deluxe_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} eq 'Fd';
        &double_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} eq 'Mt';
library/compose.cgi: sub reduce_item
耐久力があるものは耐久力を減らし無いものは個数を減らす。
修正前
my ($X,$Y,$Z);
修正後
my ($W,$X,$Y,$Z);

追加
    $W = $Si->{db} ? 'db' : 'qn';
    if ($Ui->{ss}{$Y}) { # 代替品

修正前
    if ($Si->{qn} >= $X->{$Y}) {
        $Z = $X->{$Y};
        $X->{$Y} = 0;
    }
    else {
        $Z = $Si->{qn};
        $X->{$Y} -= $Si->{qn};
    }
修正後
    if ($Si->{$W} >= $X->{$Y}) {
        $Z = $X->{$Y};
        $X->{$Y} = 0;
    }
    else {
        $Z = $Si->{$W};
        $X->{$Y} -= $Si->{$W};
    }
library/compose.cgi: sub unexpected_accident
生産と戦闘の基本負傷率は別にする(生産系の負傷確率は今までの1/3に変更)。
修正前
    if (&roll_dice(100 - $S->{Hl} + $V) <= $set::ibp) {
修正後
    if (&roll_dice(100 - $S->{Hl} + $V) <= $set::icp) {
library/compose.cgi:
Mtクラスのアイテムを作成した時に一定確率で量が二倍になるサブルーチンを追加する。
サブルーチンを新たに追加
# Sub Double Roll #
sub double_roll {
my  $S = shift;
my  $Si = shift;

    if (&roll_dice(100 + $S->{Hy}) <= $set::erb + $S->{st}) {
        $Si->{qn} *= 2;
        &M("いつもの二倍の量を作成する事に成功しました。");
    }
}
library/consumption.cgi: sub consumption_check
1ずつ減るアイテムは引数が無い場合のみ1ずつ減らす。
修正前
        $Si->{db}--;
        if ($Si->{db} <= 0) {
            &M("$Si->{nm}が壊れました。");
修正後
        $V ||= 1;
        $Si->{db} -= $V;
        if ($Si->{db} <= 0) {
            &M("$Si->{nm}を使い切りました。");
library/cure.cgi: sub cure_after
myrecord.cgiをrequireしてない為、治療後、My Record書き込み時にエラーになる。
追加
    require "$set::lib_dir/partner.cgi";
    require "$set::lib_dir/myrecord.cgi";
library/delete.cgi: sub delete_after
キャラクター削除後トップ画面に移動するよう修正。
修正前
    &say('削除完了','CLOSE');
修正後
    &header(CSS=>'sub',JavaScript=>'ReturnTop',Body=>qq| onLoad="ReturnTop('$set::cgi_url');"|);
    print <<"    END_OF_HTML";
    <div class=outbox>
    削除完了<br>
    <p class=r>$set::but{CLOSE}</p>
    </div>
    END_OF_HTML
    &footer;
library/dump.cgi: sub dump
作成画面からでも「捨てる」を使用できるようにする。
修正前
    &say($I->{M},'bag');
修正後
    &say($I->{M},$F{fl});
library/experience.cgi: sub experience
「強靭な肉体」がある者はレベルが上がる毎にLifeのMaxが+2(規定値)増える。
追加
        &reload_data('lv') if $S->{id} eq $F{id};
        if ($S->{Sk}{Tb}) {
            $S->{Mlf} += $set::clf;
            &reload_gage('lf','V') if $S->{id} eq $F{id};
        }
library/feed.cgi: sub feed_after
ペットに与える餌はLIFだけでなくHAPやHEAも参照する。
動物薬(Ad)を修正しより汎用的に。略字もクラスではなくクォリティ扱い。
調教系スキルの効果を大幅に上げる。
細かい修正。
削除
my  $tecbonus;

修正前
    $I->{bonus} = $Ip->{cl} eq 'Ls' || $Ip->{cl} eq 'Hr' ? 'Br':
                                       $Ip->{cl} eq 'Wa' ? 'At':
                                       $Ip->{cl} eq 'Dr' ? 'Dt':
                                                           'Bt';
    &get_bonus($I,$I->{bonus});

    $intbonus = (1 + $I->{in} / 10) * $I->{bonus};
    $tecbonus = (1 + $I->{tc} / 10) * $I->{bonus};
修正後
    $V = $Ip->{cl} eq 'Ls' || $Ip->{cl} eq 'Hr' ? 'Br':
                              $Ip->{cl} eq 'Wa' ? 'At':
                              $Ip->{cl} eq 'Dr' ? 'Dt':
                                                  'Bt';
    $I->{bonus} = $I->{Sk}{$V} ? 3 : 1;

    $intbonus = (1 + $I->{in} / 10) * $I->{bonus};

修正前
        if ($Ii->{cl} eq 'Ad') {
            &M("$Ip->{Nm}に$Ii->{nm}を投与しました。");
            &change_status($Ip,'lf',$Ii->{ef},1,$Ip->{lx});
        }
        else {
            &M("$Ip->{Nm}はこれ以上食べられません。") && next if $energy + $Ip->{hg} >= $Ip->{hx};
            foreach (split(/,/,$Ii->{ef})) {
                ($K,$V) = split(/=/);
                next if $K ne 'lf';
                $energy += int($V * $Ii->{qn} * $tecbonus);
                &M("$Ip->{Nm}に$Ii->{nm}をあげました。");
                &change_status($Ip,'lf',$V,1,$Ip->{lx}) if $Ip->{lf} < $Ip->{lx};
                $Ii->{qn} = 0;
                last;
            }
        }
修正後
        foreach (split(/,/,$Ii->{ef})) {
            ($K,$V) = split(/=/);
            $Ii->{Ef} += $V;
        }
        if (!$Ii->{Ql}{Ad}) {
            &M("$Ip->{Nm}はこれ以上食べられません。") && next if $energy + $Ip->{hg} >= $Ip->{hx};
            $energy += int($Ii->{Ef} * $Ii->{qn});
        }
        &M("$Ip->{Nm}に$Ii->{nm}をあげました。");
        &change_status($Ip,'lf',$Ii->{Ef},1,$Ip->{lx}) if $Ip->{lf} < $Ip->{lx};
        $Ii->{qn} = 0;
library/feed.cgi: sub favorite_check
動物薬(Ad)を修正しより汎用的に。略字もクラスではなくクォリティ扱い。
修正前
    foreach (@{$Sp->{Fd}},'Ad') {
修正後
    foreach (@{$Sp->{Fd}}) {
library/fight.cgi: sub fight_player
実行するサブルーチン順番を入れ替える(ペットを呼び寄せた時に自身の名前が正しく表示されない為)。
以下の部分を
    # 正体不明 #
    $V = $I->{Nm} = $I->{Sk}{Uk} ? '何者か' : $I->{nm};
    $U->{Nm} = $U->{nm};

以下の部分の上に移動
    # ペットの準備 #
    &prepare_companion($I);
    &prepare_companion($U);
library/fight.cgi: sub fight_creature
重複するVITの再表示を修正(探索・狩りの方でVITの再表示は行われるのでここでは不要)。
修正前
    &reload_gage([@set::gva],'V');
修正後
    &reload_gage(['lf','hl','ap','hy'],'V');
library/fight.cgi: sub skill_roll
ボーナスを固定で無くランダムに変動させることで、ステータスの高い者が100%スキルを成功してしまう事態を避ける処理。
修正前
    return 1 if &roll_dice(100 + $S->{Hy}) <= $X + $Y;
修正後
    return 1 if &roll_dice(100 + $S->{Hy}) <= $X + &roll_dice($Y);
library/fight.cgi: sub first_battle
スキル発動確率のボーナスをLevelからINTに変える(気功波、居合抜き)。
修正前
        if (&skill_roll($A,$set::sQg,$A->{lv} * 2)) {
修正後
        if (&skill_roll($A,$set::sQg,$A->{in} * 3)) {

修正前
        if (&skill_roll($A,$set::sQd,$A->{lv} * 2)) {
修正後
        if (&skill_roll($A,$set::sQd,$A->{in} * 3)) {
library/fight.cgi: sub concrete_battle
スキル発動確率のボーナスをLevelからINTに変える(狼の嗅覚、連続切り、誘惑、禁欲、道連れ)。
「迷彩」スキルがある者は一定確率で相手の攻撃をその回無効にする。
逃走成功時に靴の破壊チェックを行う。逃走のチェックは&skill_rollでは行わない。
逃走成功率にDEXを影響させる。
鉄壁の守りボーナスを&protector_checkに移動(処理を軽減する為)。
ペットが攻撃した時に経験値が入らないエラーを修正。
修正前
    if ($F && $D->{Sk}{Kn} && &skill_roll($D,$set::sKn,$D->{lv} * 2)) {
        &M("$D->{Nm}はそれを素早く察知し、$A->{Nm}の攻撃を阻止した。") && return;
    }
修正後
    if ($F && $D->{Sk}{Kn} && &skill_roll($D,$set::sKn,$D->{in} * 4)) {
        &M("$D->{Nm}はそれを素早く察知し、$A->{Nm}の攻撃を阻止した。") && return;
    }
    # 迷彩 #
    if ($D->{Sk}{Cf} && &skill_roll($D,$set::sCf,$D->{in} * 3)) {
        &M("だが$A->{Nm}は一瞬相手を見失ってしまった。") && return;
    }

修正前
    if ($D->{lf} <= $D->{sc} && &skill_roll($D,$D->{Lg}{ef},&equip_bonus($D,'Lg'))) {
        $battleisover = 2;
        &M("$D->{Nm}は逃走した。") && return;
    }
修正後
    if ($D->{lf} <= $D->{sc} && &roll_dice(100) <= $D->{BT} + $D->{DX} * 2) {
        $battleisover = 2;
        &M("$D->{Nm}は逃走した。");
        &destruction_check($D,'lg');
        return;
    }

修正前
        if ($A->{Sk}{Ss} && &skill_roll($A,$set::sSs,$A->{lv} * 3)) {
修正後
        if ($A->{Sk}{Ss} && &skill_roll($A,$set::sSs,$A->{in} * 4)) {

修正前
    # 盾による回避(槍系には無効) #
    $V = $D->{Sk}{Ip} ? $set::sIp : 1; # 鉄壁の守りボーナス
    if ($D->{SH} && !$A->{Rh}{cl} eq 'Sp' && &roll_dice(100) <= $D->{SH} * $V) {
修正後
    # 盾による回避(槍系には無効) #
    if ($D->{SH} && !$A->{Rh}{cl} eq 'Sp' && &roll_dice(100) <= $D->{SH}) {

修正前
    elsif ($D->{Sk}{Be} && $A->{sx} eq 'm' && &skill_roll($D,$set::sBe,$D->{lv} * 2) &&
          (!$A->{Sk}{As} || !&skill_roll($A,$set::sAs,$A->{lv}))) {
修正後
    elsif ($D->{Sk}{Be} && $A->{sx} eq 'm' && &skill_roll($D,$set::sBe,$D->{in} * 3) &&
          (!$A->{Sk}{As} || !&skill_roll($A,$set::sAs,$A->{in} * 2))) {

修正前
    if ($A->{Sk}{Kd} && $D->{sx} eq 'm' && &skill_roll($A,$set::sKd,$D->{lv} * 2) &&
       (!$D->{Sk}{As} || !&skill_roll($D,$set::sAs,$D->{lv}))) {
修正後
    if ($A->{Sk}{Kd} && $D->{sx} eq 'm' && &skill_roll($A,$set::sKd,$D->{lv} * 3) &&
       (!$D->{Sk}{As} || !&skill_roll($D,$set::sAs,$D->{in} * 2))) {

修正前
    if ($A->{Sk}{Ow} && $D->{sx} eq 'w' && &skill_roll($A,$set::sOw,$D->{lv} * 2) &&
       (!$D->{Sk}{Be} || !&skill_roll($D,$set::sBe,$D->{lv}))) {
修正後
    if ($A->{Sk}{Ow} && $D->{sx} eq 'w' && &skill_roll($A,$set::sOw,$D->{lv} * 3) &&
       (!$D->{Sk}{Be} || !&skill_roll($D,$set::sBe,$D->{in} * 2))) {

修正前
    if ($D->{da} eq 'Dd' && $D->{id} eq $U->{id} && $D->{Sk}{Dc} && &skill_roll($D,$set::sDc,$D->{lv} * 2)) {
修正後
    if ($D->{da} eq 'Dd' && $D->{id} eq $U->{id} && $D->{Sk}{Dc} && &skill_roll($D,$set::sDc,$D->{in} * 4)) {

修正前
        &pet_experience($A->{Co},$CDM);
修正後
        &pet_experience($A->{Co},$CADM);
library/fight.cgi: sub throw_weapon
スキル発動確率のボーナスをLevelからINTに変える(狼の嗅覚)。
修正前
    if ($D->{Sk}{Kn} && &skill_roll($D,$set::sKn,$D->{lv} * 2)) {
修正後
    if ($D->{Sk}{Kn} && &skill_roll($D,$set::sKn,$D->{in} * 4)) {
library/fight.cgi: sub shield_check;
サブルーチン名をshield_checkからprotector_checkに変更して以下の修正を加える。
変更
# Sub Protector Check #
sub protector_check {

追加
my  $S = shift;
my  $V;

追加
    # 盾チェック #
    $V = $D->{Sk}{Ip} ? $set::sIp : 1; # 鉄壁の守りボーナス
    $S->{SH} = $S->{Lh}{cl} eq 'Sh' ? $S->{Lh}{ef} + &equip_bonus($S,'Lh',$set::shb) : undef;
    $S->{SH} *= $V;

    # 兜チェック #
    $V = $S->{Sk}{Ne} ? $set::sNe : 1; # 九死に一生
    $S->{HM} = $S->{Hd}{cl} eq 'Hm' ? $S->{Hd}{ef} * $V + &equip_bonus($S,'Hd',$set::shb) : undef;

    # 靴チェック #
    $S->{BT} = $S->{Lg}{ef} + &equip_bonus($S,'Lg',$set::shb);

    # 盾装備時のDEX変化 #
    $S->{DX} += $S->{Lh}{cl} eq 'Sh' && $S->{dx} > $S->{st} ? $S->{st} : $S->{dx};

置換
    呼び出し元の&shield_checkを全て&protector_checkに置換。
library/fight.cgi: sub winner
スキル発動確率のボーナスをLevelからINTに変える(魅了)。
修正前
    if ($V && $O->{id} ne $F{id} && $O->{Sk}{Fc} && &skill_roll($O,$set::sFc,$O->{lv})) {
修正後
    if ($V && $O->{id} ne $F{id} && $O->{Sk}{Fc} && &skill_roll($O,$set::sFc,$O->{in} * 2)) {
library/fight.cgi: sub dead_or_alive
スキル発動確率のボーナスをLevelからINTに変える(必殺、成仏、禁欲、首狩り)。
殺害数と死亡数からMobを除外(相手がPCとNPCのみカウントする)。
致命傷回避にDEXを参照する。九死に一生の処理を&protector_checkに移動。
修正前
    if ($A->{Sk}{Da} && &skill_roll($A,$set::sDa,$A->{lv})) {
修正後
    if ($A->{Sk}{Da} && &skill_roll($A,$set::sDa,$A->{in} * 2)) {

修正前
    elsif ($A->{Sk}{Dh} && $D->{sx} eq 'm' && &skill_roll($A,$set::sDh,$A->{lv}) &&
          (!$D->{Sk}{As} || !&skill_roll($D,$set::sAs,$D->{lv}))) {
修正後
    elsif ($A->{Sk}{Dh} && $D->{sx} eq 'm' && &skill_roll($A,$set::sDh,$A->{in} * 2) &&
          (!$D->{Sk}{As} || !&skill_roll($D,$set::sAs,$D->{in} * 2))) {

修正前
    elsif ($A->{Sk}{Bh} && ($D->{Sk}{Da} || $D->{rw} >= $set::sps) &&
           &skill_roll($A,$set::sBh,$A->{lv})) {
修正後
    elsif ($A->{Sk}{Bh} && ($D->{Sk}{Da} || $D->{rw} >= $set::sps) &&
           &skill_roll($A,$set::sBh,$A->{in} * 3)) {

修正前
        # 九死に一生 #
        $V = $D->{Sk}{Ne} ? $set::sNe : 1;
        if ($D->{Hd}{ef} && !$A->{Sk}{Fd} &&
            &roll_dice(100) <= $D->{Hd}{ef} * $V + &equip_bonus($D,'Hd',1.5)) {
修正後
        if ($D->{HM} && !$A->{Sk}{Fd} && &roll_dice(100) <= $D->{HM} + $D->{DX} * 2) {

修正前
    $D->{dt}++;
    $A->{kl}++;
修正後
    if ($U->{id} ne '') {
        $D->{dt}++;
        $A->{kl}++;
    }
library/fight.cgi: sub avoid_death
スキル発動確率のボーナスをLevelからINTに変える(相殺)。
修正前
    return 0 if !&skill_roll($S,$set::sAd,$S->{lv} * 2);
修正後
    return 0 if !&skill_roll($S,$set::sAd,$S->{in} * 3);
library/fight.cgi: sub destruction_check
盾が壊れるとDEXボーナスによって防御力が上昇してしまう為、&shield_checkは行わない。
兜が壊れた時の条件を追加。
修正前
        elsif ($e eq 'lh' && $S->{$E}{cl} eq 'Sh') {
            &shield_check($S);
            &dex_bonus;
        }
修正後
        elsif ($e eq 'lh' && $S->{$E}{cl} eq 'Sh') {
            undef $S->{SH};
        }
        elsif ($e eq 'hd' && $S->{$E}{cl} eq 'Hm') {
            undef $S->{HM};
        }
library/fight.cgi: sub steal_check
スキル発動確率のボーナスをLevelからINTに変える(奪取)。
修正前
    return if !&skill_roll($S,$set::sSt,$S->{lv});
修正後
    return if !&skill_roll($S,$set::sSt,$S->{in} * 2);
library/find.cgi: sub find
探索しただけではLIFは減らないので、LIF再表示は不要。
修正前
    &reload_gage(['vt','lf'],'V');
修正後
    &reload_gage(['vt'],'V');
library/forest.cgi: sub forest
選択肢に「罠を仕掛ける」を追加する。
フォーム送信にflを追加。
修正前
my  $do;
修正後
my ($do,$t1);

修正前
    &header(CSS=>'sub');
修正後
    &header(CSS=>'sub',JavaScript=>'GetView');

追加
    for (1..$set::wdo) { $do .= qq|| }

    $t1 = '罠を仕掛ける'; # 文字エラー対策
    $t1 = qq|<option value="capture_before">$t1</option>\n| if $I->{Sk}{Cc};

修正前
    <select name=do class=select>$do</select>
    <select name=md class=select>
修正後
    <select id=do style="visibility:visible" name=do class=select>$do</select>
    <select id=mode name=md class=select onChange="HideObject('do','mode','capture_before','reverse');">

追加
    <option value="hunting">狩りをする</option>
    $t1

追加
    <input type=hidden name=xx value="$I->{XX}">
    <input type=hidden name=fl value="forest">
library/hunting.cgi: sub hunting
獲物が見つからなかった時に消費している分のVITの再表示が行われないバグを修正。
追加
    &found($I,'ht',$set::wvt,'狩り','つ手に入れました',0,'hunting');

    &reload_gage(['vt'],'V');
library/look.cgi: sub look
メモ系(Mm)アイテムは使用しても無くならないので、耐久力に関する情報を表示しない。
宝珠系(Gm)罠系(Tp)アイテムは効果を別の用途に使用しているので効果の情報を表示しない。
修正前
        if (!$Ii->{Ql}{El}) {
修正後
        if (!$Ii->{Ql}{El} && $Ii->{cl} ne 'Mm') {

修正前
        if ($Ii->{ef} && $Ii->{cl} ne 'Gd') {
修正後
        if ($Ii->{ef} && $Ii->{cl} !~ /(Gd|Gm|Tp)/) {
library/new.cgi: sub new_before
job.htmlをmanualディレクトリ下に移動したことによるリンク切れを修正。
修正前
イメージ   <select name=im class=select onChange="Image('$F{sx}')"></select> <tt>【<a href=image.html target=_blank>画像リスト</a>】</tt>

職業       <select name=jb class=select>$t1</select> <tt>【<a href=job.html target=_blank>職業リスト</a>】</tt>

開始国     <select name=kg class=select>$t2</select> <tt>【<a href=kingdom.html target=_blank>国リスト</a>】</tt>
修正後
イメージ   <select name=im class=select onChange="Image('$F{sx}')"></select> <tt>【<a href=$set::htm_dir/image.html target=_blank>画像リスト</a>】</tt>

職業       <select name=jb class=select>$t1</select> <tt>【<a href=$set::htm_dir/manual/job.html target=_blank>職業リスト</a>】</tt>

開始国     <select name=kg class=select>$t2</select> <tt>【<a href=$set::htm_dir/kingdom.html target=_blank>国リスト</a>】</tt>

library/pack.cgi: sub pack
作成画面からでも「パックにする」を使用できるようにする。
耐久力があるアイテムはパックできないようにする。
ノーマル品とデラックス品をパックできてしまうエラーを修正。
修正前
my ($id,$gd);
修正後
my ($id,$gd,$ql);

修正前
        &say("パックできるのは食料か素材のみです",'bag') if $Ii->{cl} !~ /(Fd|Mt|Ig|Pi|Wd|Lt|Ct|Jw)/;
        if ($id) {
            &say("同じものしかパックできません",'bag') if $id ne $Ii->{id};
修正後
        &say("パックできるのは食料か素材のみです",$F{fl}) if &item_class_check($Ii) ne 'M';
        &say("耐久力があるアイテムはパックできません",$F{fl}) if $Ii->{db};
        if ($id) {
            &say("同じものしかパックできません",$F{fl}) if $id ne $Ii->{id} || $ql ne $Ii->{ql};

追加
            $id = $Ii->{id};
            $gd = $Ii->{gd};
            $ql = $Ii->{ql};

修正
    全ての&sayへの第二引数を'bag'から$F{fl}へ変更する。
library/pet.cgi: sub pet
tp→flに変更。
修正前
    <input type=hidden name=tp value="pet">
修正後
    <input type=hidden name=fl value="pet">
library/playerlist.cgi: sub playerlist
「生産系」「戦闘系」に販売中のペットも載せる。
修正前
        &get_item($U);
        undef @T;
        foreach $Ui (@{$U->{Bg}}) {
修正後
        &get_item($U);
        &get_pet($U);
        undef @T;
        foreach $Ui (@{$U->{Bg}},@{$U->{Pt}}) {
library/playerlist.cgi: sub sales_information
販売情報にペットも追加する。
修正前
        &get_item($U);
        foreach $Ui (@{$U->{Bg}}) {
修正後
        &get_item($U);
        &get_pet($U);
        foreach $Ui (@{$U->{Bg}},@{$U->{Pt}}) {
library/price.cgi:
tp→flに変更。
置換
    全ての「tp」を「fl」に置換。
library/price.cgi: sub price_before
ペットを冒険に同行させていても「騎乗中」とメッセージが表示される不具合を修正。
ペットの値段設定画面で最低販売価格が正しく表示されないエラーを修正。
ペットの値段設定画面で戻るボタンを押したときにペット画面に戻らず荷物画面に戻ってしまうエラーを修正。
修正前
        $t2 = '騎乗';
修正後
        &get_companion($I);
        $t2 = $I->{Co}{tp} eq 'rd' ?'騎乗': '冒険に同行';

追加
            $Ii->{qn} = 1 if $F{fl} eq 'pet';
            $Ii->{Sp} = $Ii->{bp} * $Ii->{qn} + $set::lip;

修正前
    &back_close('bag');
修正後
    &back_close($F{fl});
library/price.cgi: sub price_after
ペットの値段設定画面で最低販売価格が正しく計算されないエラーを修正。
ソースを整理。
追加
        if (exists $F{$i}) {
            $Ii->{qn} = 1 if $F{fl} eq 'pet';

修正前
    if ($F{fl} eq 'pet') {
        &set_pet($I);
        &say($I->{M},'pet');
    }
    else {
        &set_item($I);
        &say($I->{M},'bag');
    }
修正後
    if ($F{fl} eq 'pet') {
        &set_pet($I);
    }
    else {
        &set_item($I);
    }
    &say($I->{M},$F{fl});
library/reserve.cgi:
tp→flに変更。
置換
    全ての「tp」を「fl」に置換。
library/reserve.cgi: sub reserve_before
ペットの予約設定画面で戻るボタンを押したときにペット画面に戻らず荷物画面に戻ってしまうエラーを修正。
修正前
    &back_close('bag');
修正後
    &back_close($F{fl});
library/reserve.cgi: sub reserve_after
ソースを整理。
修正前
    if ($F{fl} eq 'pet') {
        &set_pet($I);
        &say($I->{M},'pet');
    }
    else {
        &set_item($I);
        &say($I->{M},'bag');
    }
修正後
    if ($F{fl} eq 'pet') {
        &set_pet($I);
    }
    else {
        &set_item($I);
    }
    &say($I->{M},$F{fl});
library/sell.cgi: sub sell_after
買い取った皮を販売しない不具合を修正。
修正前
        if ($Ii->{cl} !~ /(Fd|Mt|Ig|Pi|Wd|Ct|Jw)/) {}
修正後
        if (&item_class_check($Ii) ne 'M') {}
library/top.cgi: sub top
トップ画面にマニュアルと人口統計のリンクを追加。
追加
    </form>
    <div class=words>
    <a class=back href=$set::htm_dir/manual/ target=_blank>マニュアル</a><br>
    <a class=back href=$set::htm_dir/statistics.html target=_blank>参加者の統計</a>
    </div>
library/transfer.cgi: sub transfer_before
「飛翔」スキルがある者は海上も陸上と同じように移動できる。主に管理用。
修正前
my  $V;
修正後
my ($V,@L);

修正前
    foreach (@{$I->{Pl}{tf}}) {
修正後
    @L = @{$I->{Pl}{tf}};
    push(@L,split(/,/,$I->{Pl}{lt}),split(/,/,$I->{Pl}{lh})) if $I->{Sk}{Fy}; # 飛翔

    foreach (@L) {
library/unpack.cgi: sub unpack_before
作成画面からでも「パックを分ける」を使用できるようにする。
修正前
    &say("荷物スロットに空きがありません",'bag') if @{$I->{Bg}} >= $I->{bs};
修正後
    &say("荷物スロットに空きがありません",$F{fl}) if @{$I->{Bg}} >= $I->{bs};

追加
    <input type=hidden name=ps value="$F{ps}">
    <input type=hidden name=fl value="$F{fl}">

修正前
    &back_close('bag');
修正後
    &back_close($F{fl});
library/unpack.cgi: sub unpack_after
日本語的に誤りのある表現の修正。
作成画面からでも「パックを分ける」を使用できるようにする。
修正前
        &M("$Ii->{nm}を$F{$i}個を分けました。");
修正後
        &M("$Ii->{nm}を$F{$i}個分けました。");

修正前
    &say($I->{M},'bag');
修正後
    &say($I->{M},$F{fl});
library/use.cgi: sub use
飼養許可証を使う。
追加
        elsif ($Ii->{id} eq 'Deed02') { &extend_bag($I,$Ii) }
        elsif ($Ii->{id} eq 'Deed03') { &extend_kennel($I,$Ii) }
library/use.cgi: sub use
同上。
サブルーチンを新たに追加
# Sub Extend Kennel #
sub extend_kennel {
my  $S = shift;
my  $Si = shift;
my ($F,$Ui);

    &M("これ以上$set::lab{pt}スロットを増やすことはできません。") && return if $I->{Mpx} + $set::mpx >= $set::mbs;

    foreach $Ui (@{$S->{Bg}}) {
        next if !$Ui;
        next if $Ui->{cl} ne 'Kn';
        &change_status($S,'bg',-$Ui->{wt});
        $Ui->{qn}--;
        $F = 1;
        last;
    }

    &M("$set::lab{pt}スロットを増やすには飼育小屋か檻が必要です。") && return if !$F;

    &change_status($S,'bg',-$Si->{wt});
    $Si->{qn}--;
    $S->{Mpx}++;

    &M("$set::lab{pt}スロットを増やしました。");
}
set.cgi
修正(今後変更する可能性あり。取り敢えず5時間で100回復)
# 時間 Time ########################################## #
$rcv = 18;                    # VITが0.1回復するのに必要な秒数

修正(HEAの減少が回復に追いつかない為)
# プレイヤーデータ設定 Player's Data ################# #
$lgh = 3;                    # Loginに消費するHEAの量

修正
# プレイヤーデータ設定 Player's Data ################# #
$lip = 0;                    # 最低販売額の設定(yes=市場買取額に上乗せする額)

# プレイヤーデータ設定 Player's Data ################# #
$ibp = 15;                   # 戦闘での基本負傷率(%)

修正
# 城 Castle ########################################### #
$bsp = 3000;                 # 財産権利書価格(現在の荷物スロット - 初期荷物スロット + 1) * n

追加
# プレイヤーデータ設定 Player's Data ################# #
$mpx = 10;                   # 拡張可能なペットスロットの上限(拡張可能な荷物スロットの上限 - n)

追加(負傷率は戦闘と作成で分ける)
# プレイヤーデータ設定 Player's Data ################# #
$icp = 5;                    # 作成での基本負傷率(%)

追加
# 城 Castle ########################################### #
$pxp = 600;                  # 飼養許可証価格(現在のペットスロット + 1) * n

追加
# スキル Skill ####################################### #
$sCf = 10;                   # 迷彩の基本発動率(%)
manualファイルの差し替え
manual/armor.html
manual/beginner.html
manual/job.html
manual/menu.html
manual/item01.html
manual/item02.html
manual/item03.html
manual/skill.html
manual/status.html
manual/weapon.html
manualファイルの追加
manual/nutrition.html
JavaScriptファイルの差し替え
javascript/GetView.js
JavaScriptファイルの追加
javascript/ReturnTop.js
libraryファイルの追加
library/capture.cgi
データファイルの差し替え
data/classchange.cgi
  格闘家に「Tb(強靭な肉体)」を追加。
  ガーディアンから「Cc(捕獲)」を外し「Ct(迷彩)」を代わりに追加。
data/itemdictionary.cgi
data/job.cgi
  農民のペット上限(px) 4 → 2
  牛飼いのペット上限(px) 3 → 4
  狩人に「Cc(捕獲)」を追加。
data/memo.cgi
data/sort.cgi
item/arms.cgi
item/bread.cgi
item/clothes.cgi
item/corpse.cgi
item/crops.cgi
item/dairyproduct.cgi
item/dish_other.cgi
item/dish_sandwich.cgi
item/dish_soup.cgi
item/dish_sweets.cgi
item/driedfood.cgi
item/farm_livestock_all.cgi
item/farm_sale_all.cgi
item/farm_sale_all2.cgi
item/find_item_all.cgi
item/find_item_all2.cgi
item/forest_berry_all.cgi
item/forest_herb_all.cgi
item/forest_hunting_all.cgi
item/leathercraft.cgi
item/liquor.cgi
item/market_sale_bat.cgi
item/market_sale_fir.cgi
item/market_sale_lyn.cgi
item/market_sale_mil.cgi
item/market_sale_qui.cgi
item/market_sale_thi.cgi
item/market_sale_uls.cgi
item/otheritem.cgi
item/product.cgi
item/river_fish_all.cgi
item/roastedfood.cgi
item/woodwork.cgi
データファイルを追加
place/ein.cgi
place/pir.cgi
item/creature.cgi
アイテム画像を差し替え(itemimage/)
haft.cgi
hammerhead.gif
ironplate.gif
アイテム画像を追加(itemimage/)
brownsauce.gif
cage.gif
cassis.gif
cowskin.gif
croissant.gif
ironpipe.gif
irontrap.gif
kennel.gif
redsauce.gif
saladdressing.gif
spiceblend.gif
stew.gif
woodentrap.gif



Copyright 2000-2007 Missing Link All Rights Reserved.