Script of Saga III b2.1 修正点

戻る

主な修正内容


数種類のファイル
銀行に指定個数取引/銀行自動整理機能追加。

数種類のファイル
アイテムの購入フォームを統一。

数種類のファイル
フレンドの現在地を地図に表示。

javascript/Reload.js
ステータスを変動させた後のバーの長さが正しくない不具合を修正。

library/castle.cgi
城で、クラスチェンジのボーナスで能力値の上限以上にステータスをアップできる不具合を修正。

library/compose.cgi
作成で、グレードの設定されている作成品のグレードが1になってしまう不具合を修正。

library/consumption.cgi
作成で、水瓶を使っても作成回数分減らない不具合を修正。

library/dungeon.cgi
ダンジョンで、荷物袋から「全てをパックする」を選択できるようにする。

library/fight.cgi
対戦相手の履歴に自分が載っていても時間経過していれば再戦可能にする。

library/fight.cgi
対人戦以外でどちらかが怪我をすると勝敗が決してしまう不具合を修正。

library/fight.cgi
戦闘時のメッセージを整形。

library/fight.cgi
戦闘時のメッセージを整形。

library/friends.cgi
武器がなくてもスキル「連続切り」が発生する不具合を修正。

library/levelup.cgi
レベルアップボーナスで、全体能力値の上限に達しているとボーナスポイントを換金できない不具合を修正。

library/levelup.cgi
レベルアップボーナスでの表示を修正。

library/main.cgi
死亡しているときはVITを回復しないよう修正。

library/orb.cgi
オーブの所持個数と足りないオーブを表示する。

library/sell.cgi
闇市で、在庫がないときに大量にアイテムを売ると在庫上限を超えてしまう不具合を修正。

library/trade.cgi
オーブのトレードで、トレード後のメッセージが表示されない不具合を修正。

library/transfer.cgi
他の地へ移動で、ドレスが壊れても荷物から消えない不具合を修正。

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





library/aboard.cgi: sub aboard_before
同じ港から出航する定期船が二隻以上ある場合、最初の船しか乗船予約に表示されない不具合の修正。
プレイヤーが航海設定した船が乗船予約に表示されない不具合の修正。
修正前
my ($V,@L);
修正後
my ($V,$L,@L);

修正前
    @L = (&get_oceanliner($I),&get_departure);
修正後
    @L = &get_oceanliner($I);
    $L = &get_departure;

修正前
    foreach $V (@L) {
修正後
    foreach $V (@L,@$L) {
library/aboard.cgi: sub aboard_after
船に乗り遅れた時に予約をキャンセルできない不具合を修正。
修正前
    &say('船に乗り遅れました。','aboard_before') if !$I->{Si}{go};
修正後
    &say('船に乗り遅れました。','aboard_before') if !$I->{Si}{go} && !$I->{ab};

修正前
    &say('既に予約がいっぱいです。','aboard_before') if $I->{Si}{pg} >= $I->{Si}{ct};
修正後
    &say('既に予約がいっぱいです。','aboard_before') if $I->{Si}{pg} >= $I->{Si}{ct} && !$I->{ab};
library/aboard.cgi: sub get_oceanliner
同じ港から出航する定期船が二隻以上ある場合、最初の船しか乗船予約に表示されない不具合の修正。
プレイヤーが航海設定した船が乗船予約に表示されない不具合の修正。
修正前
my  ($L,%L,$K,$V);
修正後
my  (@L,%L,$K,$V);

修正前
        push(@$L,$K) if $V->{nw} eq $S->{pl};
修正後
        push(@L,[$K]) if $V->{nw} eq $S->{pl};

修正前
    return $L;
修正後
    return @L;
library/bag.cgi: sub bag
値段の表示形式の違いは&decorate_item内で処理する。
修正前
        if ($set::mif{Xx}) {
            $Ii->{Sp} = $set::uop ? $Ii->{sp} : int($Ii->{sp} / $Ii->{qn});
           $t1 .= &decorate_item($Ii);
        }
        else {
            $Ii->{Sp} = $set::uop ? $Ii->{sp} * $Ii->{qn} : $Ii->{sp};
            $t1 .= &decorate_item($Ii,2);
        }
修正後
        $t1 .= &decorate_item($Ii,'',1);
library/bank.cgi: sub bank_before
銀行でも荷物画面と同じように設定によって値段設定したアイテムの表示方法を変える修正。
修正前
        $t2 .= &decorate_item($Ii);
修正後
        $t2 .= &decorate_item($Ii,'',1);
library/base.cgi: sub item_class_check
戦闘補助アイテムと宝珠もパックの対象に。
修正前
    return 'M' if $Si->{cl} =~ /(Fd|Mt|Ig|Pi|Wd|Lt|Ct|Jw)/;
修正後
    return 'M' if $Si->{cl} =~ /(Fd|Mt|Ig|Pi|Wd|Lt|Ct|Jw|Op|Gm)/;
library/base.cgi: sub get_item
アイテムの耐久力を現在の耐久力と最大耐久力に変更した為、"/"を分割して個々のデータを取り出す。
装備品の現在の耐久力はuserdataの装備中のデータから毎回取得する。
追加
        map { $K[$i]{Ql}{$_} = 1 } split(/,/,$K[$i]{ql});
        if ($K[$i]{db}) {
            ($K[$i]{db},$K[$i]{Mdb}) = split(/\//,$K[$i]{db});
            $K[$i]{Mdb} ||= $K[$i]{db};
            $K[$i]{db} = &get_durability($S,$K[$i]{eq}) if $K[$i]{eq};
        }
library/base.cgi: sub set_item
アイテムの耐久力を現在の耐久力と最大耐久力に変更した為、"/"で両方のデータを繋ぐ。
追加
        next if !$S->{Bg}[$i]{qn};
        $S->{Bg}[$i]{db} = join ('/',$S->{Bg}[$i]{db},$S->{Bg}[$i]{Mdb}) if $S->{Bg}[$i]{Mdb};
library/base.cgi: sub sort_item
装備中のアイテムを上位にソートする改造。
修正前
    @{$S->{Bg}} = sort { $SO{$a->{cl}} <=> $SO{$b->{cl}} || $a->{id} cmp $b->{id} || $b->{qn} <=> $a->{qn} } @{$S->{Bg}};
修正後
    @{$S->{Bg}} = sort { length($b->{eq}) <=> length($a->{eq}) || $SO{$a->{cl}} <=> $SO{$b->{cl}} || $a->{id} cmp $b->{id} || $b->{qn} <=> $a->{qn} } @{$S->{Bg}};
library/base.cgi: sub decorate_item
アイテムの耐久力も表示する改造。
追加
    $V = "<span class=reserve>予\約された</span>".$V if $Si->{rs};
    $V .= " [$Si->{db}]" if $Si->{db};
library/base.cgi: sub decorate_item
設定によって値段設定したアイテムの表示方法を変えるプログラムをサブルーチン内に移動し、作成画面や銀行でも使用できるようにする。
追加
my  $T = shift; # Buy, Blackmarket = 1, Market = 2
my  $F = shift; # Change the sales price indication method = 1

追加
    $Z = 0 if $Si->{cl} eq 'Cu';

    if ($F && $Y) {
        $T = 2 if !$set::mif{Xx};
        $F = $set::uop <=> $set::mif{Xx};
        $Y = int($Y / $W) if $F == -1;
        $Y *= $W if $F == 1;
    }
library/base.cgi: sub set_equipment
新しいサブルーチンset_equipmentに関連する改造。
set_equipmentで保存しなおす時の為に分割前のクオリティのデータを取得しておく。
追加
    $S->{$E}{ql} = $L[2]; # Quality
    map { $S->{$E}{ql}{$_} = 1 } split(/,/,$L[2]); # Quality
library/base.cgi:
装備品の耐久力を一つずつ減らすためのサブルーチンを追加。
broken_itemは、三箇所(fight,consumption,break)で似たようなサブルーチンを使用していたので統一。
used_itemは、中古品の最低販売価格を算出する為のサブルーチン。
サブルーチンを追加
# Sub Set Equipment #
sub set_equipment {
my  $S = shift;
my  $Si = shift;
my  $e;

    $e = ref $Si ? $Si->{eq} : $Si;
    $Si = $S->{ucfirst $Si} if !ref $Si;
    $S->{$e} = join('/',@{$Si}{nm,cl,ql,ef,db,im,gd,pl,cr});
}

# Sub Broken Item #
sub broken_item {
my  $S = shift;
my  $Si = shift;
my  $F = shift; # Message Flag
my ($e,$E,$M);

    $M = $S->{id} eq $I->{id} ? 1 : 0;

    &M("$Si->{nm}が破損しました。")   if $F == 1 ||  $Si->{Ql}{Rp};
    &M("$Si->{nm}を使い切りました。") if $F == 2 && !$Si->{Ql}{Rp};

    $e = $Si->{eq};
    $E = ucfirst $e;

    if ($Si->{Ql}{Rp}) {
        &M("$Si->{nm}は修理が必要です。") if $F;
        $Si->{ql} .= ',Br';
        $Si->{eq} = '';
        $Si->{db} = 0;
    }
    else {
        &change_status($S,'bg',-$Si->{wt});
        $Si->{qn} = 0;
    }
    return 1 if !$e;
    $S->{$e} = '';
    undef %{$S->{$E}};
    &reload_data($e) if $M;
    return 1;
}

# Sub Used Item #
sub used_item {
my  $Si = shift;
my  $K = shift;

        $K ||= 'bp';
        return if !$Si->{Mdb};
        return if $Si->{Ql}{Vs};
        $Si->{$K} = int($Si->{bp} * $Si->{db} / $Si->{Mdb});
}

# Sub Get Durability #
sub get_durability {
my  $S = shift;
my  $E = shift;

    return (split(/\//,$S->{$E}))[4]; # Durability
}
library/berry.cgi: sub berry
森での採取に必要なVITを伐採・狩りと分ける改造。
置換
全ての$set::wvtを$set::pvtに置換する。
library/butcher.cgi: sub butcher_after
道具の耐久力を1つずつ減らす改造。
追加
    require "$set::itm_dir/corpse.cgi";
    require "$set::lib_dir/experience.cgi";
    require "$set::lib_dir/break.cgi";

追加
        &change_status($I,'hy',-2,1) if !$I->{Sk}{Bc};
        $Ip->{id} = '';
        last if &break_check($I,'rh',1,'Cp');

削除
    require "$set::lib_dir/break.cgi";

    $I->{Rh}{ql}{Cp} ? &break_check($I,'rh') : &break_check($I,'sb');

    &reload_data('ex') if $I->{Sk}{Bc};
library/buy.cgi: sub buy_before
スキル「自動販売機」を統一された購入フォームに対応させる。
修正前
        $Ui->{sp} ||= $Ui->{bp} * $Ui->{qn} + $set::lip if $U->{Sk}{Vm};
修正後
        if ($U->{Sk}{Vm}) {
            $Ui->{sp} ||= $Ui->{bp};
            $Ui->{sp} *= $Ui->{qn} if !$set::uop;
            $Ui->{sp} += $set::lip;
        }
library/buy.cgi: sub buy_before
値段の表示形式の違いは&decorate_item内で処理する。
修正前
        if ($set::mif{Xx}) {
            $Ui->{Sp} = $set::uop ? $Ui->{sp} : int($Ui->{sp} / $Ui->{qn});
            $t1 .= &decorate_item($Ui,1);
            $t1 .= qq|</td>\n<td class=r>|;
            $t1 .= qq|<input type=textbox name=t-$i-$Ui->{id}-$Ui->{sp} class=textbox size=5 value=1>|;
        }
        else {
            $Ui->{Sp} = $set::uop ? $Ui->{sp} * $Ui->{qn} : $Ui->{sp};
            $t1 .= &decorate_item($Ui,2);
        }
修正後
        $t1 .= &decorate_item($Ui,1,1);
        if ($set::mif{Xx}) {
            $t1 .= qq|</td>\n<td class=r>|;
            $t1 .= qq|<input type=textbox name=t-$i-$Ui->{id}-$Ui->{sp} class=textbox size=5 value=1>|;
        }
library/capture.cgi: sub capture_after
消費した罠の数は1つずつ減らす。
修正前
    $Ii->{qn} = 0;
修正後
    $Ii->{qn} -= 1;
library/church.cgi: sub church_before
教会に「ペット墓地」ボタンを追加。
修正前
    &header(CSS=>'sub');
修正後
    &header(CSS=>'sub',JavaScript=>'OpenWindow');

追加
    <tt>蘇生するには $V2 $set::mny 必要です。</tt><br>$set::but{OK} $set::but{CLOSE}</div>
    <input type=button class=button onClick="OpenWindow('$set::cem_htm','cemetery',1024,768)" value="$set::lab{pt}墓地">
library/church.cgi: sub church_before
教会で怪我の治療を可能にする修正。
修正前
my ($V1,$V2);
修正後
my ($V1,$V2,$V3,$t1,$t2);

追加
    $V2 = $set::rvm * $I->{lv};
    $V3 = $set::ccu * (int($I->{lv} / $set::gde) + 1);
    $t1 = "<input type=radio class=radio name=tp value=Ij> 怪我を治療する<br>\n" if $set::ccu;
    $t2 = "<tt>怪我を治療するには $V3 $set::mny 必要です。</tt><br>\n" if $set::ccu;

追加
    <input type=radio class=radio name=tp value=Cs checked> 呪いを解く<br>
    $t1
    <input type=radio class=radio name=tp value=Dd> キャラクターを蘇生する<br>
    <br>
    <div class=r><tt>呪いを解くには $V1 $set::mny 必要です。</tt><br>
    $t2
    <tt>蘇生するには $V2 $set::mny 必要です。</tt><br>$set::but{OK} $set::but{CLOSE}</div>
library/church.cgi: sub church_after
同上。
追加
    if ($F{tp} eq 'Dd') {
        &say("$set::cnd{'Dd'}[1]していません",'church_before') if $I->{da} ne 'Dd';
        $V = $set::rvm * $I->{lv};
        &M("$Ui->{Im}生還しました。");
        &change_condition($I,'da');
        &reload_data('revive',' ');
    }
    elsif ($F{tp} eq 'Ij') {
        &say("負傷していません",'church_before') if !$I->{ij};
        $V = $set::ccu * (int($I->{lv} / $set::gde) + 1);
        &M("悲鳴をあげる程の荒療治によって$I->{Ij}が治りました。");
        &change_status($I,'hy',-3,1);
        &reload_data('hy');
        &change_condition($I,'ij');
    }
library/compose.cgi: sub compose
選択リストの順番を入れ替え。
修正前
    if ($I->{Sk}{Cu}) { $t2 .= qq|<option value="preparation=Cu">治療の準備をする</option>\n| }
    if ($I->{Sk}{Ph}) { $t2 .= qq|<option value="drug=Ph">調剤する</option>\n| }
修正後
    if ($I->{Sk}{Ph}) { $t2 .= qq|<option value="drug=Ph">調剤する</option>\n| }
    if ($I->{Sk}{Cu}) { $t2 .= qq|<option value="preparation=Cu">治療の準備をする</option>\n| }
library/compose.cgi: sub compose
作成画面でも荷物画面と同じように設定によって値段設定したアイテムの表示方法を変える修正。
修正前
        $t1 .= &decorate_item($Ii);
修正後
        $t1 .= &decorate_item($Ii,'',1);
library/compose.cgi: sub compose
燻製を追加。
修正前
    if ($I->{Sk}{By}) { $t2 .= qq|<option value="bread=By">パンを焼く</option>\n| }
    if ($I->{Sk}{Sm}) { $t2 .= qq|<option value="smokedfood=Sm">燻製を作る</option>\n| }
library/compose.cgi: sub compose_before
必要なTECをサブルーチン&creativity_checkから取得するよう修正。
修正前
        next unless &creativity_check($I,$Ii);
        $Ii->{gf} =~ s/tc=/T/;
        $t1 .= qq|
library/compose.cgi: sub compose_after
耐久力をクラス毎に一括して設定するプログラムを導入する。
追加
        &M("$Ui->{Im}$Ui->{dt}{nm}を作成しました。");
        &add_durability($Ui->{dt});
library/compose.cgi: sub compose_after
作成失敗時のHAPの減少量をset.cgiで設定可能にする。
修正前
        &change_status($I,'hy',-1,1);
修正後
        &change_status($I,'hy',-$set::cph,1);
library/compose.cgi: sub creativity_check
呼び出し元に必要TEC値を返すよう修正する。
追加
my ($K,$V,$T);

追加
                    ($S->{$K} < $V);
        $T = $V if $K eq 'tc';

追加
    return $T if $T;
    return 1;
library/compose.cgi:
耐久力をクラス毎に一括して設定するプログラムを導入する。
サブルーチンを追加
# Sub Add Durability #
sub add_durability {
my  $Si = shift;

    require "$set::dat_dir/durability.cgi";

    return if $Si->{db} || !$DB{$Si->{cl}};

    map { $Si->{Ql}{$_} = 1 } split(/,/,$Si->{ql});

    $Si->{db} = $Si->{Ql}{Th} ? $DB{Th}:
                $Si->{Ql}{Dh} && $Si->{cl} eq 'Sw' ? $DB{Ts}:
                $DB{$Si->{cl}};
    $Si->{db} = join('/',($Si->{db}) x 2);
}
library/consumption.cgi: sub consumption_check
空になった水瓶の画像、その他データが一部反映されないエラーの修正。
装備中のアイテムは耐久力を1ずつ減らす改造。
細かい修正。
追加
my  $V = shift;

    $V ||= 1;

削除
    if (!$Si->{db}) {
        $V ||= 1;

削除
    elsif ($Si->{Ql}{Vs}) {
        $V ||= 1;

移動
                $Si->{nm} = $FI{$Si->{id}}{nm};
                $Si->{cl} = $FI{$Si->{id}}{cl};
                $Si->{id} = $FI{$Si->{id}}{id};
                $Si->{im} = $FI{$Si->{id}}{im};
                $Si->{bp} = $FI{$Si->{id}}{bp};
                $Si->{db} = $FI{$Si->{id}}{db};
                $Si->{id} = $FI{$Si->{id}}{id};

削除
                $Si->{bp} = $FI{$Si->{id}}{bp};

修正前
                $Si->{db} = $FI{$Si->{id}}{db};
修正後
                $Si->{db} = 0;

修正前
    # Case:装備中の物:ダイスにより判定 #
    elsif ($Si->{eq}) {
        if (&roll_dice($Si->{db}) == 1) {
            &M("$Si->{nm}が壊れました。");
            if ($Si->{Ql}{Rp}) {
                $Si->{ql} .= ',Br';
                &M("$Si->{nm}は修理が必要です。");
            }
            else {
                &change_status($I,'bg',-$Si->{wt});
                $Si->{qn} = 0;
            }
            $I->{$Si->{eq}} = '';
            &reload_data($Si->{eq});
        }
    }
修正後
    # Case:装備中の物:耐久力を1ずつ減らす #
    elsif ($Si->{eq}) {
        $Si->{db} -= $V;
        if ($Si->{db} <= 0) {
            &broken_item($I,$Si,1);
        }
        else {
            &set_equipment($I,$Si);
        }
    }

削除
    # Case:ダイスによって壊れるか判定する物 #
    elsif (index($Si->{db},'D') >= 0) {
        if (&roll_dice($Si->{db}) == 1) {
            &M("$Si->{nm}が壊れました。");
            &change_status($I,'bg',-$Si->{wt});
            $Si->{qn}--;
        }
    }

修正前
    # Case:耐久力が1ずつ減少する物 #
    else {
        $V ||= 1;
        $Si->{db} -= $V;
        if ($Si->{db} <= 0) {
            &M("$Si->{nm}を使い切りました。");
            &change_status($I,'bg',-$Si->{wt});
            $Si->{qn}--;
        }
    }
修正後
    # Case:耐久力が1ずつ減少する物 #
    else {
        $Si->{db} -= $V;
        if ($Si->{db} <= 0) {
            &broken_item($I,$Si,2);
        }
    }
library/contact.cgi: sub contact_before
賞金首は'▼'で表示。
修正前
        $U->{Li} = &login_check($U,1) ? '○' : $U->{vp} ? '▲' : '●';
修正後
        $U->{Li} = &login_check($U,1) ? '○':
                $U->{rw} >= $set::sps ? '▼':
                             $U->{vp} ? '▲':
                                        '●';
library/contact.cgi: sub contact_before
生産系戦闘系で色分けし、職業別にソートする改造。
修正前
my  $t1;
修正後
my  ($t1,$t2,@L);

追加
    &say("$I->{Pl}{nm}には誰もいません・・・。",'CLOSE') if !$#{$I->{Pp}};

    @L = sort { $b->{Sk}{Cz} cmp $a->{Sk}{Cz} || $a->{jb} cmp $b->{jb} }
         map  { &get_user('U',$_,'unlocked') } @{$I->{Pp}};

修正前
    foreach (@{$I->{Pp}}) {
        next if $_ eq $I->{id};
        $U = &get_user('A',$_,'unlocked');
        next if !$U;
修正後
    foreach $U (@L) {
        next if $U->{id} eq $I->{id};
        next if !$U;

追加
        $t2 = $U->{Sk}{Cz} ? ' class=citizen' : '';
        &condition_initial($U,'da');

追加
        $t1 .= qq|<option value="$U->{id}"$t2>$U->{Li} $U->{Id}: $U->{nm}($U->{jb})【$U->{Da}{in}】 R:$U->{rt}</option>\n|;

b2.1用に修正したsub.cssを転送する
library/date.cgi:
年月日だけ表示するサブルーチンを新たに追加する。
サブルーチンを追加
# Get Day #
sub get_day {
my  $V = shift;

my ($dy,$mt,$yr) = (localtime($V))[3,4,5];

    $ENV{'TZ'} = "JST-9";
    $yr += 1900;
    return sprintf("%04d/%02d/%02d",$yr,$mt+1,$dy);
}
library/dungeon.cgi: dungeon_before
ダンジョン内で戦闘する度にVITを3消費するよう変更。
修正前
    <div class=r><tt>$set::lab{vt}を $set::dvt 消費します。</tt></div>
修正後
    <div class=r><tt>探索に$set::lab{vt}を $set::dvt 消費します。</tt></div>
    <div class=r><tt>戦闘する度に$set::lab{vt}を $set::dfv 消費します。</tt></div>
library/dungeon.cgi: dungeon_fight
ダンジョン内で戦闘する度にVITを3消費するよう変更。
追加
my ($F,$i);

    if ($I->{vt} < $set::dfv) {
        &say("戦闘するだけの$set::lab{vt}が残っていません。<br>$DD{nm}を脱出しました・・・。",'CLOSE');
    }

追加
    &dungeon_data('set');

    &change_status($I,'vt',-$set::dfv);

修正前
    &reload_gage(['lf','hl','ap','hy'],'V');
修正後
    &reload_gage([@set::gva],'V');
library/dungeon.cgi: enter_check
灯りの耐久力を1ずつ減らす改造 + 変数名を修正 + 細かい修正。
修正前
my ($V,$W,$X);
修正後
my ($e,$E,$F);

追加
    return if !$DD{Li};
    return if $I->{Sk}{Nv}; # 暗視スキル

修正前
    # 灯りチェック #
    foreach $V ('rh','sb','lh') {
        &get_equipment($I,$V);
        $X = ucfirst $V;
        $W = 1 if $I->{$X}{ql}{Li};
    }
修正後
    # 灯りチェック #
    foreach $e ('rh','sb','lh') {
        &get_equipment($I,$e);
        $E = ucfirst $e;
        $F = 1 if $I->{$E}{ql}{Li};
    }

削除
    $W = 1 if $I->{Sk}{Nv}; # 暗視スキル

修正前
    &say("明かりを灯すアイテムを装備していません",'CLOSE') if !$W;
修正後
    &say("明かりを灯すアイテムを装備していません",'CLOSE') if !$F;

修正前
    &break_check($I,'lh');

    &set_item($I);
修正後
    &set_item($I) if &break_check($I,'lh');
library/dye.cgi: sub dye
森での採取に必要なVITを伐採・狩りと分ける改造。
置換
全ての$set::wvtを$set::pvtに置換する。
library/equip.cgi: sub equip_check
両手装備のアイテムを補助装備している時に左手にアイテムを装備できてしまう不具合を修正。
削除
    &get_equipment($I,$E) if $E eq 'rh';

修正前
    # 両手用装備チェック
    elsif ($T eq 'D' && $I->{$E}) {
修正後
    # 両手用装備チェック
    elsif ($T eq 'D' && ($I->{rh} || $I->{sb})) {

修正前
    # 両手用装備をしている
        if ($I->{Rh}{ql}{Dh})     { return 1 }
修正後
        &get_equipment($I,'rh');
        &get_equipment($I,'sb');
    # 両手用装備をしている(右手)
        if ($I->{Rh}{ql}{Dh})     { return 1 }
    # 両手用装備をしている(補助)
        elsif ($I->{Sb}{ql}{Dh})  { return 1 }
library/equip.cgi: sub fitting_room
サブルーチンset_equipmentに合わせて修正。
修正前
    $I->{$E} = "$Si->{nm}/$Si->{cl}/$Si->{ql}/$Si->{ef}/$Si->{db}/$Si->{im}/$Si->{gd}/$Si->{pl}/$Si->{cr}";
    $Si->{sp} = $Si->{rs} = '';
    $Si->{eq} = $E;
修正後
    $Si->{sp} = $Si->{rs} = '';
    $Si->{eq} = $E;
    &set_equipment($I,$Si);
library/feed.cgi: sub feed_after
ペットに餌を上げた時に、アイテム総重量が減らない不具合を修正。
細かい修正。
修正前
    $Ip = $I->{Pt}->[$F{pt}];
修正後
    $Ip = $I->{Pt}[$F{pt}];

追加
        &change_status($Ip,'lf',$Ii->{Ef},1,$Ip->{lx}) if $Ip->{lf} < $Ip->{lx};
        &change_status($I,'bg',-($Ii->{wt} * $Ii->{qn}));

追加
    &set_pet($I);
    &set_user($I);
library/feed.cgi: sub favorite_check
動物薬「Ad」であればペットの好みに関わらず与えることができるよう修正。
追加
    return 1 if $Si->{Ql}{Ad};

    foreach (@{$Sp->{Fd}}) {
library/fight.cgi: sub fight_player
執行猶予が付かないプレイヤーは強制的に戦闘させられる改造。
戦闘終了後、破壊チェック(装備品毎に耐久力を1減らす)を双方行う。
修正前
    &partner('',"<img src=$set::mim_dir/envGd.gif><br><br>$I->{Pl}{nm}での戦闘は禁止されています") if $I->{Pl}{ev}{Gd} && !$U->{vp};
修正後
    &partner('',"<img src=$set::mim_dir/envGd.gif><br><br>$I->{Pl}{nm}での戦闘は禁止されています") if $I->{Pl}{ev}{Gd} && !$U->{vp} && $U->{rw} < $set::sps;

修正前
    &change_status($U,'vp',-1) if $I->{Pl}{ev}{Gd};
修正後
    &change_status($U,'vp',-1) if $I->{Pl}{ev}{Gd} && $U->{rw} < $set::sps;

追加
    # 装備品の耐久力減少 #
    &destruction_check($I);
    &destruction_check($U);

    # 荷物チェック + 奪取 #
library/fight.cgi: sub fight_creature
モンスターとの戦闘でペットを呼び寄せる時に自分の名前が表示されない不具合を修正。
戦闘終了時に装備品の耐久力を1減少させる。
モンスター戦闘時にペットのデータが保存されない不具合を修正。
移動
    $I->{Nm} = $I->{nm};
    $U->{Nm} = $U->{nm};

    &prepare_companion($I);

    &protector_check($I);
    &dex_bonus;

    $I->{Nm} = $I->{nm};
    $U->{Nm} = $U->{nm};

追加
    &destruction_check($I);
    &baggage_check($I) if ref $I->{BI};

追加
    &set_pet($I) if $I->{Co};

    return $I->{da} eq 'Dd' ? 0 : 1;
library/fight.cgi: sub fight_creature
以下の行を削除し、&findの方に移す。
削除
    &M("$set::lab{lf}が低下している為、探索を中断しました。") && return 0 if $I->{lf} <= 10 && !$F{dg};
library/fight.cgi: sub fight_creature
低レベルで貰える経験値を高くし、レベルが上がる毎に経験値の減っていく量を多くする。
修正前
        &experience($I,$U->{ex} - ($I->{lv} - 1) * 2);
修正後
        &experience($I,$U->{ex} - ($I->{lv} - $U->{lv}) * 5);
library/fight.cgi: sub first_battle
投擲武器での先制攻撃を通常の先制攻撃と同じように処理する。
修正前
        &throw_weapon($A,$D,"は$A->{Rh}{nm}を投げた!",1);
修正後
        &concrete_battle($A,$D,"は$A->{Rh}{nm}を投げた!",2);
library/fight.cgi: sub concrete_battle
投擲武器での先制攻撃を通常の先制攻撃と同じように処理する。
追加
        $ADM += &roll_dice($A->{WP}) + $A->{AB};
        $ADM += $A->{tc} if $F == 2;
        &M("$A->{Nm}$M",1);

追加
         $ADM < 1 && $F == 2 ? "$D->{Nm}は素早く身をかわした。":
         $ADM < 1            ? "$D->{Nm}は攻撃を回避した!":
library/fight.cgi: sub concrete_battle
魔法使い系の戦闘時の魔法の詠唱回数を制限しない。
追加
        $A->{Mg} = [split(/,/,$A->{mg})] if !@{$A->{Mg}};
        $A->{MG} = shift @{$A->{Mg}};
library/fight.cgi: sub concrete_battle
投擲武器での先制攻撃時に付加されるTECボーナスを廃止。
削除
        $ADM += $A->{tc} if $F == 2;
library/fight.cgi: sub concrete_battle
脚部、左手、胴体、右手の破壊判定を行わない。
削除
        &destruction_check($D,'lg');

削除
    &destruction_check($D,'lh') if $D->{SH};
    &destruction_check($D,'bd') if !$MSG;
    &destruction_check($A,'rh') if $ADM >= $set::wbd;
library/fight.cgi: sub concrete_battle
水の魔法で相手にダメージを与えてしまうバグの修正。
修正前
    $ADM = $D->{Me}{dt} ? int($D->{lf} / 2):
修正後
    $ADM = $A->{Me}{hl} ? 0:
           $D->{Me}{dt} ? int($D->{lf} / 2):

修正前
    $M = $D->{Me}{dt}        ? "$D->{Nm}の$set::lab{lf}が半減した!":
修正後
    $M = $A->{Me}{hl}        ? "":
         $D->{Me}{dt}        ? "$D->{Nm}の$set::lab{lf}が半減した!":

修正前
    &M($M);
修正後
    &M($M) if $M;
library/fight.cgi: sub weapon_check
今まで投擲武器スキルボーナスがプレイヤーの攻撃力に付加されていなかった不具合を修正。
修正前
    if (($S->{Sk}{Nj} || $S->{Sk}{Jg}) && $S->{Rh}{cl} eq 'Th') { $S->{AB} = $set::skb }
修正後
    if (($S->{Sk}{Nj} || $S->{Sk}{Jg}) && $S->{Rh}{ql} eq 'Th') { $S->{AB} = $set::skb }
library/fight.cgi: sub magic_effect
水の魔法で相手にダメージを与えてしまうバグの修正。
追加
        &M("$A->{Nm}のLIFが$A->{in}回復した!");
        $A->{Me}{hl} = 1;
library/fight.cgi: sub winner
対人戦の勝者は相手とのRate差の1/4が報奨金として自動的に加算される。
追加
        $O->{Nm} = $O->{nm};
        $S->{Rw} = int(($S->{rt} - $O->{rt}) / 4);
        if ($S->{Rw} > 0) {
            &change_status($S,'rw',$S->{Rw});
            &reload_data('rw') if $S->{id} eq $F{id};
        }
library/fight.cgi: sub fight_money
レベルの上昇による戦闘金の高騰を抑える。
修正前
	$V = $V * (1 + ($O->{lv} - 1) / 1.5);
修正後
	$V = $V * (1 + ($O->{lv} - 1) / 10);
library/fight.cgi: sub helmet_roll
頭部の破壊判定を行わない。
削除
    &destruction_check($D,'hd');
library/fight.cgi: sub destruction_check
新しいソースに差し替え。
丸ごと差し替え
sub destruction_check {
my  $S = shift;
my ($e,$E);

    &get_equipment($S,'rh'); # 右手装備を戻す

    return if $S->{Op}{Ub};

    foreach $e (keys %set::eqp) {
        $E = ucfirst($e);
        next if $S->{$e} eq '';
        next if $e eq 'sb' && $S->{WO} < 5;
        next if $e eq 'rh' && $S->{$E}{nm} eq '';
        next if $e eq 'lh' && $S->{$E}{cl} ne 'Sh';
        next if $e eq 'hd' && $S->{$E}{cl} ne 'Hm';
        next if $e eq 'bd' && $S->{$E}{cl} ne 'Ar';
        next if $e eq 'fg' && $S->{$E}{cl} ne 'Rg';
        next if $e eq 'nk' && $S->{$E}{cl} ne 'Ac';
        if (--$S->{$E}{db} <= 0) {
            &M("$S->{Nm}の$S->{$E}{nm}が壊れた!");
            $S->{BI}{$e} = 1;
        }
        else {
            &set_equipment($S,$e);
        }
    }
}
library/fight.cgi: sub knock_weapon
戦闘補助アイテム「Nk」のGradeを有効にする。
修正前
    return if $D->{Op}{Nk};
修正後
    return if $D->{Op}{Nk} && $D->{Op}{gd} * $set::gde >= $D->{lv};
library/fight.cgi: sub knock_weapon
スキル「剣の舞」が機能していない不具合の修正。
修正前
    $A->{bonus} += $A->{Ak}{Sd} ? $set::sSd : 0;
修正後
    $A->{bonus} += $A->{Sk}{Sd} ? $set::sSd : 0;
library/fight.cgi: sub baggage_check
新しいソースに差し替え。
丸ごと差し替え
# Sub Baggage Check #
sub baggage_check {
my  $S = shift;
my  $Si;
my  $i;

    $I->{ST} &&= @{$S->{Bg}};
    $I->{ST} &&= &roll_dice($I->{ST});

    if ($S->{SI}) {
        push (@{$S->{Bg}},$S->{SI});
        &change_status($S,'bg',$S->{SI}{wt});
        &M("$S->{Nm}は$S->{SI}{nm}を盗んだ!<br>");
    }

    foreach $Si (@{$S->{Bg}}) {
        $i++;
        next if !$Si->{eq} && $I->{ST} != $i;
        # 盗む対象が盗難防止になっておらず、壊れていない場合
        if ($I->{ST} == $i && !$Si->{Ql}{Sc} && !$S->{BI}{$Si->{eq}}) {
            # アイテムを盗む
            $S->{$Si->{eq}} = '';
            $Si->{eq} = ''; 
            $I->{SI} = {%$Si};
            &change_status($S,'bg',-$Si->{wt});
            &change_status($S,'hy',-$set::shy);
            $I->{ST} = $Si->{qn} = 0;
            next;
        }
        # 壊れた装備品
        &broken_item($S,$Si) if $S->{BI}{$Si->{eq}};
    }
}
library/fight.cgi: sub throw_weapon
投擲武器での先制攻撃を通常の先制攻撃と同じように処理する。
削除
        サブルーチンを丸ごと削除
library/find.cgi: sub found
モンスター出現場所でLIFが10以下の時に探索中断されるにも関わらずVITが減ってしまう不具合を修正。
追加
        last if $S->{vt} < $V1;

        &M("$set::lab{lf}が低下している為、探索を中断しました。") && last if $S->{lf} <= 10 && $V5;
library/forest.cgi: sub forest
森での採取に必要なVITを伐採・狩りと分ける改造。
修正前
    <div class=r><tt>$set::lab{vt}を $set::wvt 消費します。</tt></div>
修正後
    <div class=r><tt>採取は$set::lab{vt}を $set::pvt 消費します。</tt></div>
    <div class=r><tt>それ以外は$set::lab{vt}を $set::wvt 消費します。</tt></div>
library/friends.cgi: sub friends_before
「現在地通知設定」導入時のソース不足を補完。
修正前
    foreach (split(/,/,$I->{fr})) {
修正後
    foreach (@FR) {
library/friends.cgi: sub friends_after
同じIDを複数登録できてしまう不具合を修正。
追加
    @FR = map  { $_->[0] }
          grep { $F{ud} ne $_->[1] }
          grep { $F{$_->[1]} }
          map  { [$_,(split(/\//))] } @FR;
library/look.cgi: sub look
戦闘補助アイテム用に改造。
宝の地図は効果を表示しない。
修正前
        if ($Ii->{ef} && $Ii->{cl} !~ /(Gd|Gm|Tp)/) {
            if ($Ii->{cl} eq 'Fd') {
                &nutritive_value($Ii);
            }
            else {
                &get_effect($Ii);
            }
            &M("効果は$Ii->{Ef}です。",1);
修正後
        if ($Ii->{ef} && $Ii->{cl} !~ /(Gd|Gm|Tp|Tm)/) {
            $Ii->{cl} eq 'Fd' ? &nutritive_value($Ii):
            $Ii->{cl} eq 'Op' ? &option_info($Ii):
                                &get_effect($Ii);
            &M("効果は$Ii->{Ef}です。",1) if $Ii->{cl} ne 'Op';
library/look.cgi:
同上。
サブルーチンを追加
# Sub Option Info #
sub option_info {
my  $Si = shift;
my ($K,$V);

    foreach (split(/,/,$Si->{ef})) {
        ($K,$V) = split(/=/);
        $Si->{Ef} .= $OPT{$K};
    }
    &M($Si->{Ef},1);
}
library/lumberjacking.cgi: sub lumberjacking
道具の耐久力を1つずつ減らす改造。
追加
my  $Y;

修正前
    &say("伐採道具を装備していません",'forest') if !$I->{Rh}{ql}{Lj} && !$I->{Sb}{ql}{Lj};
修正後
    $Y = $I->{Rh}{ql}{Lj} ? 'Rh' : $I->{Sb}{ql}{Lj} ? 'Sb' : 0;
    &say("伐採道具を装備していません",'forest') if !$Y;
    &say("$I->{$Y}{Im}$I->{$Y}{nm}の耐久力は残り$I->{$Y}{db}です",'forest') if $I->{$Y}{db} < $F{do};

修正前
    $I->{Rh}{ql}{Lj} ? &break_check($I,'rh') : &break_check($I,'sb');
修正後
    &break_check($I,'rh',$F{do},'Lj');
library/main.cgi: sub main
転職コマンドを追加する。
追加
    <option value="backup_before">データのバックアップ</option>
    <option value="jobchange_before">転職する</option>
library/main.cgi: sub oceanliner_monitor
定期船に二人以上予約した時に出航されない不具合。
修正前
        foreach $D (split(/<>/,$V)) {
修正後
        foreach $D (split(/,/,$V)) {
library/map.cgi: sub map
フレンドは色違いで表示する。
修正前
        push(@{$V{$U->{pl}}},[$U->{id},$U->{nm},$U->{sx}]) if $Z eq 'on' || $Z eq 'only' && grep { (split /\//)[0] eq $U->{id} } @FR;
修正後
        push(@{$V{$U->{pl}}},[$U->{id},$U->{nm},$U->{sx}.'f']) if $Z eq 'on' || $Z eq 'only' && grep { (split /\//)[0] eq $U->{id} } @FR;
library/market.cgi: sub market
選択肢に「職人街」を追加。
修正前
my $t1;
修正後
my ($t1,$t2);

追加
    if ($I->{Pl}{bm}) {
        $t1  = qq|<input type=radio name=md class=radio value="blackmarket_before">\n|;
        $t1 .= qq|闇市で買物をする<br>\n|;
        $t1 .= qq|<input type=radio name=md class=radio value="sell_before">\n|;
        $t1 .= qq|闇市でアイテムを売る<br>\n|;
    }
    if (!$I->{Pl}{nc}) {
        $t2  = qq|<div class=words><input type=checkbox name=cu class=radio> 職人街で買物をする</div>\n|;
    }

追加
    $t2
    $t1
library/mine.cgi: sub mine_after
道具の耐久力を1つずつ減らす改造。
修正前
my  $V;
修正後
my  ($V,$Y);

修正前
    &say("採掘できる道具を装備していません",'CLOSE') if !$I->{Rh}{ql}{Mn} && !$I->{Sb}{ql}{Mn};
    &say("明かりを灯すアイテムを装備していません",'CLOSE') if !$I->{Lh}{ql}{Li};
修正後
    $Y = $I->{Rh}{ql}{Mn} ? 'Rh' : $I->{Sb}{ql}{Mn} ? 'Sb' : 0;
    &say("採掘できる道具を装備していません",'CLOSE') if !$Y;
    &say("$I->{$Y}{Im}$I->{$Y}{nm}の耐久力は残り$I->{$Y}{db}です",'mine_before') if $I->{$Y}{db} < $F{do};
    &say("明かりを灯すアイテムを装備していません",'CLOSE') if !$I->{Lh}{ql}{Li};
    &say("$I->{Lh}{Im}$I->{Lh}{nm}の耐久力は残り$I->{Lh}{db}です",'mine_before') if $I->{Lh}{db} < $F{do};

修正前
    $I->{Rh}{ql}{Mn} ? &break_check($I,'rh') : &break_check($I,'sb');
    &break_check($I,'lh');
修正後
    &break_check($I,'rh',$F{do},'Mn');
    &break_check($I,'lh',$F{do});
library/new.cgi: sub new_after
パック技能の初期値を設置者が設定可能にする。
NPCを新規作成した際、パーミッションがset.cgiで設定した値に変更されない不具合を修正。
修正前
    $I->{pc} = 2;                            # パック技能
修正後
    $I->{pc} = $set::bpc;                    # パック技能

修正前
    chmod($set::pms,"$set::Udt_dir/$I->{id}.cgi");
修正後
    index($I->{id},'_') ? chmod($set::pms,"$set::Udt_dir/$I->{id}.cgi"):
                          chmod($set::pms,"$set::npc_dir/$I->{id}.cgi");
library/option.cgi: sub option_before
戦闘補助アイテムのグレードがプレイヤーのレベルより低い場合装備できないようにする。
「野生児」スキルの無いプレイヤーは加熱しないと食べられない食品や家畜の餌は装備できないように変更。
追加
        next if $Ii->{cl} ne 'Fd' && $Ii->{cl} ne 'Op';
        next if $Ii->{cl} eq 'Fd' && $Ii->{Ql}{Rf} && !$I->{Sk}{Wb};
        next if $Ii->{cl} eq 'Fd' && $Ii->{Ql}{Fe} && !$I->{Sk}{Wb};
        next if $Ii->{cl} eq 'Op' && $Ii->{gd} * $set::gde < $I->{lv};
library/pet.cgi: sub pet
「ls」は死後も使用するので、「hx」を代用する改造。
「埋葬する」コマンドを追加。
修正前
                # 腹の具合が0なら死亡
                if (!$Ip->{hg}) { $Ip->{ls} = 0; last }
修正後
                # 腹の具合が0なら死亡
                if (!$Ip->{hg}) { $Ip->{hx} = 0; last }

修正前
                $Ip->{hg} = 0;
                $Ip->{ls} = -1;
                $saveflag = 1;
                $confidence = $stomach = $Ip->{ls};
修正後
                $Ip->{hg} = 0;
                $Ip->{hx} = -1;
                $saveflag = 1;
                $confidence = $stomach = $Ip->{hx};

修正前
            $age  = '死後' . &get_passage($Ip->{up},$set::pyt) . '年';
            $confidence = $stomach = $Ip->{ls};
修正後
            $age  = '死後' . &get_passage($Ip->{up},$set::pyt) . '年';
            $confidence = $stomach = $Ip->{hx};

追加
    <option value="companion">冒険に連れて行く</option>
    <option value="burial_before">埋葬する</option>
library/playerlist.cgi: sub playerlist
賞金首は'▼'で表示。
修正前
        $U->{Li} = &login_check($U,1) ? '○' : $U->{vp} ? '▲' : '●';
修正後
        $U->{Li} = &login_check($U,1) ? '○':
                $U->{rw} >= $set::sps ? '▼':
                             $U->{vp} ? '▲':
                                        '●';
library/playerlist.cgi: sub playerlist
単価入力+個数指定不可の場合、合計額と単価を両方表示させる。
修正前
my ($t1,$t2,@T);
修正後
my ($t1,$t2,$F,@T);

追加
    &get_resident($I);

    $F = $set::uop <=> $set::mif{Xx};

追加
            $t2 .= "=$Ui->{sp}$set::mny" if $F == 1 && $Ui->{qn} > 1;
            $Ui->{sp} *= $Ui->{qn} if $F == 1 && $Ui->{qn} > 1;
            $t2  = "[$t2=$Ui->{sp}$set::mny]" if $set::mif{Xx};

library/playerlist.cgi: sub sales_information
NPCの販売品も販売情報に載せる。
追加
my (@N,@L,@T,$T);

追加
    @N = &get_allusersID(1);
    @L = &get_allusersID();

追加
    foreach (@N,@L) {

修正前
            $Ui->{Id} = $U->{id};
修正後
            $Ui->{Id} = index($U->{id},'_') ? $U->{id} : 'NPC';
library/playerlist.cgi: sub sales_information
単価入力+個数指定不可の場合、単価を別に表示させる改造。
修正前
my ($t1,$t2);
修正後
my ($t1,$t2,$t3,$F);

追加
    $F = $set::uop <=> $set::mif{Xx};

    foreach $T (@T) {

修正前
        $T->{sp} = $set::mif{Xx} && !$set::uop ? int($T->{sp} / $T->{qn}) :
                   !$set::mif{Xx} && $set::uop ? $T->{sp} * $T->{qn} : $T->{sp};
修正後
        $T->{Sp} = $T->{sp} * $T->{qn} if $F == 1;
        $T->{sp} = int($T->{sp} / $T->{qn}) if $F == -1;

修正前
        $t1 .= "<tr><td nowrap>$T->{nm}</td><td>$T->{gd}</td><td nowrap align=right>$T->{sp} $set::mny</td><td nowrap>$T->{Id}</td><td nowrap>$T->{Nm}</td><td width=100%>$T->{Pl}</td></tr>\n";<tt>修正後</tt>
修正後
        $t3 = "<td nowrap align=right>$T->{Sp} $set::mny</td>" if $F == 1;
        $t1 .= "<tr><td nowrap>$T->{nm}</td><td>$T->{gd}</td><td nowrap align=right>$T->{sp} $set::mny</td>$t3<td nowrap>$T->{Id}</td><td nowrap>$T->{Nm}</td><td width=100%>$T->{Pl}</td></tr>\n";

追加
    $t3  = $F == 1 ? "<th nowrap>単価</th>" : '';
    $t2  = &header(CSS=>'list',GetTag=>1);

修正前
    <tr><th nowrap>商品名</th><th>G</th><th nowrap>金額</th><th nowrap>ID</th><th nowrap>販売者</th><th width=100%>所在地</th></tr>
修正後
    <tr><th nowrap>商品名</th><th>G</th>$t3<th nowrap>金額</th><th nowrap>ID</th><th nowrap>販売者</th><th width=100%>所在地</th></tr>
library/price.cgi: sub price_before
中古品はその分最低販売価格を下げる。
追加
                &used_item($Ii);
                $Ii->{Sp} = $Ii->{bp} + $set::lip;
追加
                &used_item($Ii);
                $Ii->{Sp} = $Ii->{bp} * $Ii->{qn} + $set::lip;
library/price.cgi: sub price_after
中古品はその分最低販売価格を下げる。
修正前
            $Ii->{Bp} = $set::uop ? $Ii->{bp} : $Ii->{bp} * $Ii->{qn};
修正後
            $Ii->{Bp} = $Ii->{bp};
            &used_item($Ii,'Bp');
            $Ii->{Bp} = $set::uop ? $Ii->{Bp} : $Ii->{Bp} * $Ii->{qn};
library/purchase.cgi: sub purchase_item
スキル「自動販売機」を統一された購入フォームに対応させる。
追加
        if ($U->{Sk}{Vm}) {
            $Ui->{sp} ||= $Ui->{bp};
            $Ui->{sp} *= $Ui->{qn} if !$set::uop;
            $Ui->{sp} += $set::lip;
        }

        $keychck = $T == 2 ?   "$i-$Ui->{id}-$Ui->{sp}" :   "$Ui->{id}_$Ui->{gd}";
library/purchase.cgi: sub purchase_pet
ペット購入の時に、数値以外の文字を個数に入力すると、エラー表示画面で商品名が表示されない表示上の問題を修正。
修正前
        if ($F{$keytext} =~ /\D/) {
            $T == 2 && &M("$Ui->{nm}:数値以外は使用出来ません") && next;
            &say("$Ui->{nm}:数値以外は使用出来ません",$R);
        }
修正後
        if ($F{$keytext} =~ /\D/) {
            $T == 2 && &M("$Up->{nm}:数値以外は使用出来ません") && next;
            &say("$Up->{nm}:数値以外は使用出来ません",$R);
        }
library/release.cgi: sub release
死骸を山に捨てるとHAPペナルティ。
修正前
            if (!$Ip->{hg}) { &M("$Ip->{Nm}の死骸を山に捨てました。") }
            else            { &M("$Ip->{Nm}を野に放しました。") }
修正後
            if (!$Ip->{hg}) {
                &M("$Ip->{Nm}の死骸を山に捨てました。");
                # 屠殺も捕獲も持っていない
                if (!$I->{Sk}{Bc} && !$I->{Sk}{Cc}) {
                    &change_status($I,'hy',-($Ip->{ls} * 2),1);
                    &reload_gage('hy','V');
                }
            }
            else { &M("$Ip->{Nm}を野に放しました。") }

修正前
    &say($I->{M},'pet');
修正後
    &inner_HTML;
    &say($I->{M},'pet','Reload');
library/river.cgi: sub river
水を汲めるアイテムをFvやEvではなくクォリティのVs(容器)を参照するよう変更。
修正前
        elsif ($Ii->{cl} eq 'Ev' || $Ii->{cl} eq 'Fv') {
修正後
        elsif ($Ii->{Ql}{Vs}) {
library/sell.cgi: sub sell_before
中古品は売値が安くなる。
追加
        &used_item($Ii);
        $Ii->{Sp} = $Ii->{bp} * $Ii->{qn};
library/sell.cgi: sub sell_after
中古品は売値が安くなる。
追加
        next if !$F{$i};
        &used_item($Ii);
library/sell.cgi: sub sell_after
「Dk」(Don't Keep)が付いているアイテムを売った場合は、闇市はクラスに関係なく在庫に抱えなくなる改造。
修正前
        if (&item_class_check($Ii) ne 'M') {}
修正後
        if ($Ii->{Ql}{Dk} || &item_class_check($Ii) ne 'M') {}
library/shopping.cgi:
職人街で買い物できるようにする。
修正前
    require "$set::dat_dir/market_item_catalog.cgi";
    require "$set::itm_dir/market_sale_item.cgi";
修正後
if ($F{cu}) {
    require "$set::dat_dir/craftunion_item_catalog.cgi";
    require "$set::itm_dir/craftunion_sale_item.cgi";
}
else {
    require "$set::dat_dir/market_item_catalog.cgi";
    require "$set::itm_dir/market_sale_item.cgi";
}
library/shopping.cgi: sub shopping_before
職人街で買い物できるようにする。
追加
    &spot_check($I,'Mk');

    $IC{$I->{pl}} = $IC{all} if exists $IC{all};
    $I->{Sp}{Mk}{nm} = '職人街' if $F{cu};

追加
    <input type=hidden name=ps value="$F{ps}">
    <input type=hidden name=cu value="$F{cu}">
library/shopping.cgi: sub shopping_after
職人街で買い物できるようにする。
追加
    &set_code;

    $IC{$I->{pl}} = $IC{all} if exists $IC{all};

修正前
    &say($I->{M},'shopping_before','Reload');
修正後
    &say($I->{M},'shopping_before','Reload','cu');
library/top.cgi: sub top
レイアウトの変更。
修正前
my  $t1;
修正後
my ($t1,$t2);

追加
    $t1 = &login_players if $set::now;
    $t2 = $set::rcv * 1000 / 60 / 60;

修正前
    <td width=50%>
修正後
    <td width=25%>

修正前
    <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>
    </td>
    <td>
修正後
    </td>
    <td width=25%>
    <div class=label>設定</div>
    <div class=words>
    <span class=monospace>
    最大人数:$set::mxp人<br>
    自動削除:$set::ddy日<br>
    自然蘇生:$set::rvv時間<br>
    $set::lab{vt} 回復:$t2時間/MAX<br>
    $set::lab{hl} 減少:$set::lgh/LOGIN
    </span>
    </div>
    <br>
    <div class=label>リンク</div>
    <div class=words>
    <a class=back href=$set::rtn>ホーム</a><br>
    <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>
    </td>
    <td rowspan=2>
library/use.cgi: sub use
薬(Md)の使用を可能にする。
追加
        elsif ($Ii->{cl} eq 'Tm') { &unearth_treasure($I,$Ii) }
        elsif ($Ii->{cl} eq 'Md') { &medicine($I,$Ii) }
library/use.cgi: sub type_expendable
条件を満たさないと使用できないようなアイテムを導入する。
追加
    if ($Si->{cp}) { &compulsory_check($I,$Si,'消費') or return }

    if ($Si->{ql} =~ /R\d/ && !&fresh_check($Si)) {
library/water.cgi: sub water
水を汲んだ時に、全てではなく一部のデータのみを取得する改造。
修正前
        $I->{Bg}[$F{wt}]{db} = $FI{$FI{$Ii->{id}}{id}}{db};
修正後
        $Ii->{db} = $FI{$FI{$Ii->{id}}{id}}{db};

修正前
        $V = $I->{Bg}[$F{wt}]{wt};
        $I->{Bg}[$F{wt}] = $FI{$Ii->{id}};
        $I->{Bg}[$F{wt}]{wt} = $V;
修正後
        foreach ('cl','nm','im','db','id') {
            $Ii->{$_} = $FI{$Ii->{id}}{$_};
        }
set.cgi
修正
# 時間 Time ########################################## #
$rcv = 9;                    # VITが0.1回復するのに必要な秒数
$rvv = 12;                   # 死亡回復に必要な時間

追加
# プレイヤーデータ設定 Player's Data ################# #
$bpc = 2;                    # 初期パック技能
$fcp = 500;                  # イメージ画像変更料金
$jcm = 500;                  # 転職料金
$jcr = 0;                    # 転職した時にLEVELと経験値をリセットする(yes=1,no=0)
$jcl = 3;                    # 転職可能な最高LEVEL

追加
# ペット Pet ######################################### #
$pcx = 100;                  # ペット墓地最大登録数

修正
# 手紙 Mail ########################################## #
$mmn = 2;                    # 郵便料金(近)
$mmf = 5;                    # 郵便料金(遠)

修正
# 森 Forest ########################################## #
$wvt = 5;                    # 森での活動で消費するVIT(狩り・伐採)

追加
# 森 Forest ########################################## #
$pvt = 3;                    # 森での活動で消費するVIT(採取)

追加
# 教会 Church ######################################## #
$ccu = 200;                  # 教会での治療費(n * Grade) 使用しない場合n=0

修正 [Missing Link版仕様]
# 市場 Market ######################################## #
%mpc = (Mk=>1,Fm=>1,         # 市場,農場,闇市,対人での購入でパックスキルを超えてのパックを許可する(yes=1,no=0)
        Bm=>1,Xx=>1);
%mif = (Mk=>1,Fm=>1,         # 市場,農場,闇市,対人での購入で購入個数を指定出来るようにする(yes=1,no=0)
        Bm=>1,Xx=>0);

追加
# ダンジョン Dungeon ################################# #
$dfv = 3;                    # ダンジョンの戦闘で消費するVIT

修正
# 作成 Compose ####################################### #

追加
# 作成 Compose ####################################### #
$cph = 10;                   # 作成失敗時のHAP低下値

追加
# 戦闘 Fight ######################################### #
$elt = 24;                   # 戦闘相手の履歴にあってもn時間経過していれば戦闘可能にする(yes=時間,no=0)

修正
# 戦闘 Fight ######################################### #
$skb = 2;                    # 武器スキルによる攻撃力ボーナス
$fam = 4;                    # 攻撃者戦闘金制度{yes=n倍,no=0}
$fdm = 4;                    # 迎撃者戦闘金制度{yes=n倍,no=0}
$fbg = 1;                    # 勝敗に関係なく双方とも戦闘金を受け取る(yes=1,no=0)
$lhy = 5;                    # 敗戦時のHAP低下値
$dhy = 25;                   # 死亡時のHAP低下値

削除
# 戦闘 Fight ######################################### #
$far = 4;                    # 自動で賞金首に懸賞金が付くようにする(yes=金額,no=0)
$wbd = 7;                    # ダメージn以上で武器が壊れるかチェックする


修正
# グレードデータ Grade Data ############################## #
@grd = (0,0,1,2,3,4,5,6,7);

修正
# プラスデータ Plus Data ############################## #
@pls = (0,1,2,3,4,5,6,7,8,9);

修正
# ラベルデータ Label Data ############################ #
        'wm' => '戦闘金',

追加
# ラベルデータ Label Data ############################ #
        'lb' => 'レベルアップボーナス',

追加
# パス Path ########################################## #
$cem_htm = './cemetery.html';   # cemetery.html

追加
# パス Path ########################################## #
$mtn = 0;                       # メンテナンス中にする(yes=1,no=0)
sos3.cgi
修正
    $version = 'b2.1';

追加
require "$set::dat_dir/skill.cgi";
if ($set::mtn)      { &error('ただいまメンテナンス中につきしばらくお待ちください。') }
ダミー用のhtmlファイルを追加
cemetery.html
メインファイルの差し替え
master.cgi
sos3.cgi
set.cgi
javascriptファイルの差し替え
javascript/GetCookie.js
javascript/MapInformation.js
javascript/MapProgram.js
javascript/Reload.js
CSSファイルの差し替え
sub.css
マニュアルファイルの差し替え
manual/animal.html
manual/armor.html
manual/item01.html
manual/item02.html
manual/item03.html
manual/job.html
manual/menu.html
manual/skill.html
manual/status.html
manual/weapon.html
ライブラリファイルの追加
library/bruial.cgi
library/jobchange.cgi
library/purchase.cgi
データファイルの追加
data/craftunion_item_catalog.cgi
data/durability.cgi
data/pet_cemetery.cgi
item/craftunion_sale_item.cgi
item/monster_isl.cgi
item/smokedfood.cgi
place/isl.cgi
データファイルの差し替え
data/classchange.cgi
data/find_monster_catalog.cgi
data/farm_livestock_catalog.cgi
data/forest_berry_catalog.cgi
data/itemdata.cgi
data/itemdictionary.cgi
data/market_item_catalog.cgi
data/place.cgi
data/sort.cgi
item/arms.cgi
item/bread.cgi
item/clothes.cgi
item/crops.cgi
item/dish_other.cgi
item/dish_sandwich.cgi
item/dish_soup.cgi
item/dish_sweets.cgi
item/drug.cgi
item/farm_sale_item.cgi
item/farm_sale_livestock.cgi
item/forest_berry.cgi
item/leathercraft.cgi
item/market_sale_item.cgi
item/monster_gho.cgi
item/preparation.cgi
item/product.cgi
item/roastedfood.cgi
item/vessel.cgi
item/woodwork.cgi
メイン画像の追加
mainimage/mf.gif
mainimage/place16.gif
mainimage/wf.gif
アイテム画像の追加
itemimage/abrasive.gif
itemimage/acerola.gif
itemimage/brokenarmor.gif
itemimage/cat.gif
itemimage/charcoal.gif
itemimage/ham.gif
itemimage/mask.gif
itemimage/resin.gif
itemimage/turtleback.gif
itemimage/turtlearmor.gif
itemimage/turtleboots.gif
itemimage/turtlehelmet.gif
itemimage/waterbottle.gif
itemimage/watertank_empty.gif
itemimage/watertank_full.gif
itemimage/whetstone.gif
アイテム画像名の変更
itemimage/basterdsword.gif → itemimage/bastardsword.gif
itemimage/kniteshield.gif → itemimage/knightsword.gif
パーミッション
data/pet_cemetery.cgi → 606 (もしくは600か666)
place/isl.cgi → 606 (もしくは600か666)
sos3.cgi → 705 (もしくは700か755)
master.cgi → 705 (もしくは700か755)

その他のcgiファイルは604 (もしくは644)

画像とhtmlとcssとjsは変更不要


Copyright 2000-2007 Missing Link All Rights Reserved.