sos3.cgi: sub action追加 &{$md}; &unlock('unlock');master.cgi追加 &unlock('unlock'); exit;library/base.cgi: sub get_user
アレンジ追加 &lock($id) if $F ne 'unlocked'; ($L) = &open_dat("$dir/$id.cgi");library/base.cgi: sub set_user追加 &write_dat("$V/$S->{id}.cgi",join('<>',@L)); &unlock($S->{id});library/base.cgi: sub lock修正前 $I->{lock} = $V; 修正後 $lock::table{$V} = 1;library/base.cgi: sub unlock差し替え sub unlock { my $V = shift; my @L; return if !$V; @L = $V eq 'unlock' ? keys %lock::table : ($V); foreach (@L) { $V = "$set::loc_dir/$_"; if ($set::lky == 1) { rmdir($V) } elsif ($set::lky == 2) { unlink($V) } delete $lock::table{$_}; } }library/base.cgi: sub error修正前 &unlock($I->{lock}); 修正後 &unlock('unlock');library/base.cgi: sub say修正前 $V ||= $I->{lock}; 修正後 $V ||= 'unlock';library/bounty.cgi: sub bounty_after削除 &lock($F{ud}); 削除 &unlock($F{ud});library/buy.cgi: sub buy_after削除 &lock($F{ud}); 削除 &unlock($F{ud});library/cure.cgi: sub cure_after削除 &lock($F{ud}); 削除 &unlock($F{ud});library/destone.cgi: sub destone削除 &lock($F{ud}); 削除 &unlock($F{ud});library/fight.cgi: sub fight_player削除 &lock($F{ud}); 削除 &unlock($F{ud}); 修正前 &set_user($I); &set_user($U); &set_pet($I) if $I->{Co}; &set_pet($U) if $U->{Co}; 修正後 &set_pet($I) if $I->{Co}; &set_pet($U) if $U->{Co}; &set_user($I); &set_user($U);library/mail.cgi: sub mail_after削除 &lock($U->{id}); 削除 &unlock($U->{id});library/main.cgi: sub main削除 &lock($F{id}); 削除 &unlock($F{id});library/main.cgi: sub departure_monitor削除 &lock($D->[0]); 削除 &lock($_); 削除 &unlock($_); 削除 &unlock($D->[0]);library/message.cgi: sub message_after
アレンジ修正前 $U = &get_user('U'); 修正後 $U = &get_user('U',,'unlocked');library/new.cgi: sub new_after追加 &lock($F{id}); ®ist_check;library/partner.cgi: sub partner修正前 &unlock($I->{lock}); 修正後 &unlock('unlock');library/trade.cgi: sub trade_after削除 &lock($F{id}); 削除 &unlock($U->{id});
追加
<tt>荷物スロット:$I->{Bs}/$I->{bs}</tt>
追加
<option value="pack">パックにする</option>
<option value="pack_all">全てをパックにする</option>
library/bank.cgi: sub bank_before
修正前
$t2 .= qq|<input type=checkbox name=i$i class=checkbox> |;
修正後
$t2 .= qq|<input type=checkbox name=$i class=checkbox> |;
修正前
&header(CSS=>'sub');
修正後
&header(CSS=>'sub',JavaScript=>'GetView');
修正前
<tt>$I->{Sp}{Bk}{nm}スロット:$I->{bk} $set::wgt</tt><br>
修正後
<tt>$I->{Sp}{Bk}{nm}スロット:$I->{Bk}/$I->{bk}</tt><br>
追加
<tt>荷物スロット:$I->{Bs}/$I->{bs}</tt>
修正前
<br>
<div class=r>$set::but{OK} $set::but{CLOSE}</div>
修正後
<div class=r>
<select id=mode name=md class=select onChange="DisableObject('input','o','mode','bank_after','normal');">
<option value="bank_after">銀行を利用する</option>
<option value="pack">パックにする</option>
<option value="pack_all">全てをパックにする</option>
<option value="unpack_before">パックを分ける</option>
<option value="dump">捨てる</option>
</select>
$set::but{OK}<br>
<br>
$set::but{CLOSE}
</div>
修正前
<input type=hidden name=md value="bank_after">
<input type=hidden name=xx value="$I->{XX}">
修正後
<input type=hidden name=xx value="$I->{XX}">
<input type=hidden name=fl value="bank_before">
library/bank.cgi: sub bank_after
追加
$U->{id} = $I->{id};
&get_place($I);
修正前
next if !$F{"i$i"};
修正後
next if !$F{$i};
追加
$U->{Sl}++;
$I->{bg} -= $Ii->{qn} * $Ii->{wt};
$Ii->{sp} = $Ii->{rs} = '';
追加
&say("$I->{Sp}{Bk}{nm}スロットがいっぱいです。",'bank_before') if $U->{Sl} > $I->{bk};
&say("荷物スロットがいっぱいです。",'bank_before') if grep($_,@{$I->{Bg}}) > $I->{bs};
library/base.cgi: sub set_user
追加
$V = index($S->{id},'_') ? $set::Udt_dir
: $set::npc_dir;
$S->{bg} = abs sprintf "%.2f",$S->{bg} if $S->{bg} =~ /\.\d\d\d/;
library/base.cgi: sub login_check
修正前
my $T = shift; # value = 'noerror'
修正後
my $T = shift; # true -> return true, false -> error
修正前
if ($T eq 'noerror') { return 1 }
修正後
if ($T) { return 1 }
library/base.cgi: sub condition_initial
追加
delete $S->{Cd}{in};
while (($K,$V) = each %{$S->{Cd}}) {
library/base.cgi: sub get_item
追加
$S->{Bs} = @K if $T == 0;
$S->{Bk} = @K if $T == 3;
$S->{Bg} = [@K];
library/blackmarket.cgi: sub blackmarket_before
修正前
&say("めぼしい商品はないようです・・・",'market') if !$U->{Bg};
修正後
&say("めぼしい商品はないようです・・・",'market') if !@{$U->{Bg}};
library/buy.cgi: sub buy_before
追加
next if !$Up->{sp};
$Up->{hg} = 0 if &get_passage($Up->{bt},$set::pyt) > $Up->{ls};
library/castle.cgi: sub castle_after
追加
my ($L,$V,$Y,$M);
修正前
$V = $set::clf * $L->{cn};
$I->{Mlf} += $V;
&reload_gage('lf','V');
&M("$set::lab{lf}の上限が$V増加しました。");
修正後
$Y = $set::clf * $L->{cn};
$I->{Mlf} += $Y;
&reload_gage('lf','V');
&M("$set::lab{lf}の上限が$Y増加しました。");
library/compose.cgi: sub compose
追加
<option value="pack">パックにする</option>
<option value="pack_all">全てをパックにする</option>
library/compose.cgi: sub compose_before
追加
&error('未実装') if ! -e "$set::itm_dir/$K.cgi";
require "$set::itm_dir/$K.cgi";
library/compose.cgi: sub compose_after
修正前
&excellent_roll($I,$Ui->{dt}) if $Ui->{db};
修正後
&excellent_roll($I,$Ui->{dt}) if $Ui->{dt}{db};
library/dry.cgi: sub dried_food
修正前
$Si = $FI{$Si->{nm}};
修正後
$Si = {%{$FI{$Si->{nm}}}};
library/experience.cgi: sub experience
移動
&reload_data('ex') if $S->{id} eq $F{id};
if ($S->{ex} >= $S->{lv} * $set::exl) {
<中略>
}
&reload_data('ex') if $S->{id} eq $F{id};
修正前
if ($S->{ex} >= $S->{lv} * $set::exl) {
<中略>
}
修正後
&levelup_check($S);
library/experience.cgi:
サブルーチンを追加。
# Sub Level Up Check #
sub levelup_check {
my $S = shift;
if ($S->{ex} >= $S->{lv} * $set::exl) {
$S->{ex} -= $S->{lv} * $set::exl;
$S->{lv}++ if $S->{lv} < $set::lvx;
$S->{lb}+= $set::lub;
&M("<span class=levelup>$S->{nm}の$set::lab{lv}がUP!</span>");
&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/fight.cgi: sub baggage_check
追加
else {
&reload_data($Ii->{eq});
&reload_data('of') if $Ii->{eq} eq 'rh';
}
library/find.cgi: sub found
追加
&M("これ以上は持てません。") && last if $S->{bg} == $S->{Mbg};
}
last if $V5 eq 'hunting' && $S->{Rh}{cl} ne 'Bo';
library/logout.cgi: sub logout
追加
&set_code('on');
utime(time, time - $set::lgi, "$set::Ucd_dir/$I->{id}.cgi");
library/main.cgi: sub main
追加
$precode = (stat("$set::Ucd_dir/$I->{id}.cgi"))[9];
$precode += $I->{li} eq 'out' ? $set::lgi : 0;
library/new.cgi: sub make_code
追加
chmod($set::pms,"$set::Ucd_dir/$I->{id}.cgi");
utime(time, time - $set::lgi, "$set::Ucd_dir/$I->{id}.cgi");
library/orb.cgi: sub orb_before
修正前
my $checked;
修正後
my ($count,$tcount);
修正前
foreach (@{$I->{Ob}}) {
$i++;
$checked = /[a-z]/ ? ' checked' : '';
$_ = lc $_;
$t1 .= "<input type=checkbox name=$i class=checkbox$checked> ";
$t1 .= &orb_image($_);
$t1 .= "$set::orb{$_}$set::orb{x}<br>\n";
}
修正後
foreach ('a' .. 'l') {
$count = $tcount = 0;
$count++ while $I->{ob} =~ /$_/ig;
$tcount++ while $I->{ob} =~ /$_/g ;
if ($count) {
$t1 .= qq|<input type=text size=2 name=$_ class=textbox value="$tcount"> |;
$t1 .= &orb_image($_);
$t1 .= "$set::orb{$_}$set::orb{x} x $count<br>\n";
}
}
修正前
<tt>トレードに出す$set::orb{x}にチェックを入れてください。</tt><br>
修正後
<tt>トレードに出す$set::orb{x}の個数を入力してください。</tt><br>
library/orb.cgi: sub orb_after
追加
my %unique;
修正前
@{$I->{Ob}} = split(//,$I->{ob});
修正後
@{$I->{Ob}} = split(//,lc $I->{ob});
修正前
$i++;
$_ = $F{$i} ? lc $_ : uc $_;
修正後
$F{$_} = 1 if $F{ta};
$F{$_} = 0 if $F{ta} && !$unique{$_}++;
$F{$_} = 0 if $F{tn};
&say("数値以外使用できません",'orb_before') if $F{$_} =~ /[^\d]/;
$_ = $F{$_} ? ($F{$_}--, $_) : uc $_;
library/pack.cgi: sub pack
サブルーチンを新たに追加
# Sub Pack All #
sub pack_all {
$I = &get_user('I');
&say("パックスキルがありません",$F{fl}) if $I->{pc} < 2;
&get_item($I);
&auto_pack($I,$I->{Bg});
&set_code;
&sort_item($I);
&set_item($I);
&say("可能\なアイテムを全てパックにしました。",$F{fl});
}
# Sub Auto Pack #
sub auto_pack {
my $S = shift;
my $V = shift; # Bag
my $T = shift; # Bank Slot
my ($Ii,$i,$X,%P);
foreach $Ii (@{$V}) {
next if !$Ii;
next if &item_class_check($Ii) ne 'M';
next if $Ii->{qn} >= $S->{pc};
$X = "$Ii->{id}:$Ii->{ql}:$Ii->{gd}:$Ii->{ef}";
if ($P{$X}) {
foreach $i (0 .. $Ii->{qn}) {
$Ii->{Qn} = $i;
last if $P{$X}{qn} + $i >= $S->{pc};
}
$Ii->{qn} -= $Ii->{Qn};
$P{$X}{qn} += $Ii->{Qn};
$P{$X}{sp} = $Ii->{sp} = '' if $Ii->{Qn};
$P{$X}{rs} = $Ii->{rs} = '' if $Ii->{Qn};
if (!$Ii->{qn}) {
$T->{Sl}-- if $T;
undef $Ii;
next;
}
}
$P{$X} = $Ii;
}
}
library/pet.cgi: sub pet
追加
if ($age > $Ip->{ls}) {
<中略>
$saveflag = 1;
$confidence = $stomach = $Ip->{ls};
}
library/price.cgi: sub price_before
追加
$I->{Vx} = 0;
foreach $Ii (@{$I->{Bg}}) {
$i++;
next if !$Ii;
$I->{Vx}++ if $Ii->{sp} && $Ii->{cl} ne 'Cu';
追加
<div class=r><tt>販売スロット:$I->{Vx}/$I->{vx}</tt></div>
library/trade.cgi: sub trade_before
削除
my %unique;
修正前
@{$I->{Ob}} = grep { !$unique{$_}++ }
map { $_ = lc $_ } split(//,$I->{ob});
$checked = ' checked';
foreach (@{$I->{Ob}}) {
$t1 .= qq|<input type=radio name=Iob class=radio value="$_"$checked> |;
$t1 .= &orb_image($_);
$t1 .= "$set::orb{$_}$set::orb{x}<br>\n";
$checked = '';
}
@{$U->{Ob}} = grep { /[a-z]/ } split(//,$U->{ob});
$checked = ' checked';
foreach (@{$U->{Ob}}) {
$t2 .= qq|<input type=radio name=Uob class=radio value="$_"$checked> |;
$t2 .= &orb_image($_);
$t2 .= "$set::orb{$_}$set::orb{x}<br>\n";
$checked = '';
}
修正後
$checked = ' checked';
foreach ('a' .. 'l') {
$count = 0;
$count++ while $I->{ob} =~ /$_/ig;
if ($count) {
$t1 .= qq|<input type=radio name=Iob class=radio value="$_"$checked> |;
$t1 .= &orb_image($_);
$t1 .= "$set::orb{$_}$set::orb{x} x $count<br>\n";
$checked = '';
}
}
$checked = ' checked';
foreach ('a' .. 'l') {
$count = 0;
$count++ while $U->{ob} =~ /$_/g;
if ($count) {
$t2 .= qq|<input type=radio name=Uob class=radio value="$_"$checked> |;
$t2 .= &orb_image($_);
$t2 .= "$set::orb{$_}$set::orb{x} x $count<br>\n";
$checked = '';
}
}
library/unpack.cgi: sub unpack_before
追加
<div class=r><tt>荷物スロット:$I->{Bs}/$I->{bs}</tt></div>
library/use.cgi: sub use
追加
&dead_check($I,'CLOSE');
require "$set::lib_dir/experience.cgi";
library/use.cgi: sub type_expendable
追加
&change_status($I,$K,$V,1);
if ($K eq 'ex') { &levelup_check($I) }
library/water.cgi: sub water
修正前
&M("$Ii->{nm}がいっぱいになりました。");
修正後
if (&roll_dice(100) <= $set::wbp) {
&M("$Ii->{nm}が壊れました。");
&change_status($I,'bg',-$Ii->{wt});
$Ii->{qn} = 0;
}
else {
&M("$Ii->{nm}がいっぱいになりました。");
}
sos3.css
追加
/* 全ての要素 */
* {
-moz-box-sizing: border-box ;
box-sizing: border-box ;
}
javascript/GetView.js
追加
function DisableObject(tag,hid,cid,keyvalue,flag) {
try {
var val1 = flag == 'reverse' ? true : false;
var val2 = flag == 'reverse' ? false : true;
target1 = document.getElementsByTagName(tag);
target2 = GetObject(cid,self);
for (var i in target1) {
if (target1[i].name && target1[i].name.indexOf(hid) == 0) {
target1[i].disabled = target2.value == keyvalue ? val1 : val2;
}
}
}
catch (err) {}
}
以上の修正情報はUchimata様よりご提供頂きました。
修正前
$S->{$T} = 0;
if ($Y) {
修正後
$S->{$T} = 0;
if ($Y && !$S->{Cd}{$Y}) {
以上の修正情報はmomochi様よりご提供頂きました。
修正前
my $L;
修正後
my ($V,@L);
修正前
$L = &get_departure;
修正後
@L = (&get_oceanliner($I),&get_departure);
修正前
$L = &get_departure;
修正後
@L = (&get_oceanliner($I),&get_departure);
修正前
foreach (@$L) {
&get_ship($I,$_->[0],'checked');
修正後
foreach $V (@L) {
&check_oceanliner($I,$V->[0]) || &get_ship($I,$V->[0],'checked');
修正前
$t1 .= qq|<td rowspan=2 align=center><img src=$set::iim_dir/$I->{Si}{im}><br><input type=radio name=ud class=radio value="$_->[0]"$I->{Si}{Go}></td>|;
修正後
$t1 .= qq|<td rowspan=2 align=center><img src=$set::iim_dir/$I->{Si}{im}><br><input type=radio name=ud class=radio value="$V->[0]"$I->{Si}{Go}></td>|;
library/aboard.cgi: sub aboard_after
追加 my ($V,$X,$L,$N); 修正前 &set_ship($I,$V); 修正後 &get_oceanliner($I); if (!&check_oceanliner($I,$V)) { &get_ship($I,$V); $N = "\n" } 修正前 @{$I->{Si}{Pg}} = grep { $_ ne "$I->{id}\n" } @{$I->{Si}{Pg}}; 修正後 @{$I->{Si}{Pg}} = grep { $_ ne "$I->{id}$N" } @{$I->{Si}{Pg}}; 追加 $F{ud} = $I->{ab}; $I->{ab} = ''; 修正前 push(@{$I->{Si}{Pg}},"$I->{id}\n"); 修正後 push(@{$I->{Si}{Pg}},"$I->{id}$N"); 追加 &set_oceanliner($I) || &set_ship($I,$V);library/aboard.cgi
サブルーチンを新たに追加
# Sub Check Ocean Liner #
sub check_oceanliner {
my $S = shift;
my $V = shift;
if ($V =~ /^[a-z]{3}_[a-z]{3}$/) {
$S->{Si} = $S->{Ol}{$V};
return 1;
}
return 0;
}
# Sub Get Ocean Liner #
sub get_oceanliner {
my $S = shift;
my ($L,%L,$K,$V);
require "$set::dat_dir/oceanliner_ship.cgi";
%{$S->{Pg}} = map { $_->[0] => $_->[1] }
map { [split(/<>/)] } &open_dat("$set::dat_dir/oceanliner_passenger.cgi");
$S->{Ol} = {%OL};
foreach $K (keys %OL) {
$V = $S->{Ol}{$K};
($V->{nw},$V->{go}) = split(/_/,$K);
$V->{pg} = @{$V->{Pg}} = split(/,/,$S->{Pg}{$K});
$V->{Go} = ' checked' if $S->{ab} eq $K;
push(@$L,$K) if $V->{nw} eq $S->{pl};
}
return $L;
}
# Sub Set Ocean Liner #
sub set_oceanliner {
my $S = shift;
my $V = shift;
my (@L,$K);
return 0 if $V !~ /^[a-z]{3}_[a-z]{3}$/;
$S->{Pg}{$V} = join(',',@{$S->{Si}{Pg}});
while (($K,$V) = each %{$S->{Pg}}) {
push(@L,join('<>',$K,$V,"\n")) if $V;
}
&write_dat("$set::dat_dir/oceanliner_passenger.cgi",@L);
return 1;
}
library/aboard.cgi:
削除
sub find_ship
library/attune.cgi:
全置換
'bag' を $F{fl} に全て置換
追加
$t1 .= "$Ii->{nm}は専用化できません。<br>\n"
}
elsif ($Ii->{Ql}{Ns} && $Ii->{Ql}{Sc}) {
$t1 .= "$Ii->{nm}は専用化できません。<br>\n"
}
追加
<input type=hidden name=ps value="$F{ps}">
<input type=hidden name=fl value="$F{fl}">
library/bag.cgi: sub bag
修正前
<div class=label>アイテム</div>
修正後
<div class=label>荷物</div>
追加
<option value="takeoff_all">装備を全て外す</option>
<option value="roast">焼く</option>
library/base.cgi: sub get_user
削除
return $S if $W eq 'B';
library/base.cgi: sub change_status
追加
$V += 1 if $T eq 'vt' && $S->{Cd}{En} && $V < 0;
$S->{$T} += $V;
library/base.cgi: sub get_effect
修正前
$Si->{cl} eq 'Dr' ? " $set::lab{ap} +$Si->{ef}":
修正後
$Si->{cl} eq 'Fr' ? " $Si->{ef}%":
$Si->{cl} eq 'Ht' ? " $Si->{ef}%":
$Si->{cl} eq 'Dr' ? " $set::lab{ap} +$Si->{ef}":
library/base.cgi: sub decorate_item
削除
$V = "<span class=Dx>Dx</span>".$V if $Si->{Ql}{Dx};
library/base.cgi:
削除
sub get_quality
library/berry.cgi: sub berry
追加
require "$set::lib_dir/find.cgi";
require "$set::dat_dir/forest_berry_catalog.cgi";
修正前
&say("環境保護区域です",'forest') if !$I->{Pl}{br};
&say("環境保護区域です",'forest') unless -e "$set::itm_dir/$I->{Pl}{br}";
修正後
&say("環境保護区域です",'forest') unless $CA{$I->{pl}};
修正前
&found($I,'br',$set::wvt,'採取','つ手に入れました');
修正後
&found($I,'forest_berry',$set::wvt,'採取','つ手に入れました');
修正前
&reload_gage(['vt','lf'],'V');
修正後
&reload_gage('vt','V');
library/break.cgi: sub break_check
削除
&get_equipment($I,$E);
修正前
&M("$S->{$E}{nm}が壊れました。");
修正後
&M("$S->{$E}{nm}が破損しました。");
修正前
foreach $Ii (@{$I->{Bg}}) {
if ($Ii->{eq} eq $E) {
修正後
foreach $Ii (@{$S->{Bg}}) {
if ($Ii->{eq} eq $e) {
修正前
$I->{bg} -= $Ii->{wt};
修正後
$S->{bg} -= $Ii->{wt};
追加
undef $S->{$E};
&reload_data($e);
library/butcher.cgi: sub butcher_after
修正前
foreach $Ui (@{$FI{$Ip->{nm}}}) {
修正後
foreach $Ii (@{$FI{$Ip->{nm}}}) {
$Ui = {%$Ii};
修正前
&experience($I,$Ui->{Qn} * 20) if $I->{Sk}{Bc};
修正後
&experience($I,$Ui->{qn} * 15) if $I->{Sk}{Bc};
修正前
if ($I->{Rh}{ql}{Cp}) {
&reload_data('rh') if &break_check('rh');
}
else {
&reload_data('sb') if &break_check('sb');
}
修正後
$I->{Rh}{ql}{Cp} ? &break_check($I,'rh') : &break_check($I,'sb');
library/buy.cgi: sub buy_before
追加
$Ui->{sp} ||= $Ui->{bp} * $Ui->{qn} + $set::lip if $U->{Sk}{Vm};
next unless $Ui->{sp} && $Ui->{cl} ne 'Cu';
library/buy.cgi: sub buy_after
追加
$Ui->{sp} ||= $Ui->{bp} * $Ui->{qn} + $set::lip if $U->{Sk}{Vm};
next if !$F{"$i-$Ui->{id}-$Ui->{sp}"};
library/capture.cgi: sub capture_after
修正前
$Up->{ch} = &roll_dice(4) - 1;
修正後
$Up->{ch} = &roll_dice(5) - 1;
library/compose.cgi: sub compose
追加
if ($I->{Sk}{Tl}) { $t2 .= qq|<option value="hat=Tl">帽子を作る</option>\n| }
if ($I->{Sk}{Tl}) { $t2 .= qq|<option value="clothes=Tl">服を作る</option>\n| }
修正前
if ($I->{Sk}{Bg}) { $t2 .= qq|<option value="liquor=Bg">酒を作る</option>\n| }
修正後
if ($I->{Sk}{Bg}) { $t2 .= qq|<option value="liquor=Bg">飲物を作る</option>\n| }
修正前
if ($I->{Sk}{Pl}) { $t2 .= qq|<option value="crops=Pl">種を蒔く</option>\n| }
修正後
if ($I->{Sk}{Pl}) { $t2 .= qq|<option value="crops=Pl">農作物を作る</option>\n| }
追加
<option value="compose_before">作成する</option>
<option value="look">調べる</option>
<option value="price_before">値段を設定する</option>
library/compose.cgi: sub compose_before
修正前
my ($K,$V,$L,@L);
修正後
my ($K,$V,$X,$L,@L);
修正前
$t1 .= qq|
library/compose.cgi: sub compose_after
追加
$Ui = $FI[$F{ci}-1];
$Ui->{dt}{qn} ||= 1;
追加
require "$set::lib_dir/status.cgi";
require "$set::lib_dir/item.cgi";
require "$set::dat_dir/itemdata.cgi";
修正前
if (&roll_dice($V) < $Ui->{rl} + $I->{dx} * 3 - ($I->{Gd} - 1) * 10) {
修正後
if (&roll_dice($V) < $Ui->{rl} + $I->{dx} * 3 + &hat_bonus($I) - ($I->{Gd} - 1) * 10) {
修正前
&M("$Ui->{Im}$Ui->{dt}{nm} x $Ui->{dt}{qn}を作成しました。");
修正後
&M("$Ui->{Im}$Ui->{dt}{nm}を作成しました。");
&set_item_data($Ui->{dt});
修正前
&deluxe_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} eq 'Fd';
&double_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} eq 'Mt';
修正後
&double_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} =~ /(Fd|Mt)/;
library/compose.cgi: sub reduce_item
追加
&grade_check($S,$Si) if $Si->{gd} && $Ui->{ki} && $Ui->{ki} eq $Y;
&add_item_data($Si,$Ui->{dt},$V,$Z);
library/compose.cgi: sub double_roll
修正前
$Si->{qn} *= 2;
&M("いつもの二倍の量を作成する事に成功しました。");
修正後
$Si->{qn} *= $set::ddu;
&M("いつもの$set::ddu倍の量を作成する事に成功しました。");
library/compose.cgi
サブルーチンを新たに追加
# Sub Add Item data #
sub add_item_data {
my $Si = shift;
my $Ui = shift;
my $Y = shift; # cl or id
my $Z = shift; # quantity
my $X = $Si->{$Y};
my ($K,$V);
return if exists $FD{$Ui->{id}};
# データに無い #
if (!exists $FD{$X}) {
$FD{$X}{bp} = $Si->{bp};
$FD{$X}{wt} = $Si->{wt};
if ($Si->{cl} eq 'Fd') {
foreach (split(/,/,$Si->{ef})) {
($K,$V) = split(/=/);
$FD{$X}{$K} = $V;
}
}
}
elsif ($FD{$X}{tp}) {
$X = $FD{$X}{tp};
}
$Ui->{bp} += $FD{$X}{bp} * $Z;
$Ui->{wt} += $FD{$X}{wt} * $Z;
return if $Ui->{cl} ne 'Fd';
foreach $K ('lf','hl','hy') {
next if !$FD{$X}{$K};
$Ui->{$K} += $FD{$X}{$K} * $Z;
}
}
サブルーチンを新たに追加
# Sub Hat Bonus #
sub hat_bonus {
my $S = shift;
&get_equipment($S,'hd');
return 0 if $S->{Hd}{cl} ne 'Ht';
require "$set::lib_dir/break.cgi";
&break_check($S,'hd');
return $S->{Hd}{ef} + $set::grd[$S->{Hd}{gd}];
}
library/compose.cgi
サブルーチンを削除
sub deluxe_roll
library/contact.cgi: sub contact_before
修正前
$U = &get_user('A',$_);
修正後
$U = &get_user('A',$_,'unlocked');
追加
$U->{Id} = index($U->{id},'_') ? $U->{id} : 'NPC';
$U->{Li} = &login_check($U,1) ? '○' : $U->{vp} ? '▲' : '●';
追加
$t1 .= qq|<option value="$U->{id}">$U->{Li} $U->{Id}: $U->{nm}($U->{jb})【$U->{Da}{in}】 R:$U->{rt}</option>\n|;
library/cure.cgi: sub cure_after
修正前
# &set_item($U);
# &set_user($I);
# &set_user($U);
修正後
&set_item($U);
&set_user($I);
&set_user($U);
library/date.cgi: sub departure_time
追加
$ENV{'TZ'} = "JST-9";
return sprintf("%02d:%02d",$set::scm) if !$V;
library/delete.cgi: sub delete_check
修正前
$U = &get_user('A',$_);
修正後
$U = &get_user('A',$_,'unlocked');
library/delete.cgi: sub delete_file
追加
if (-e "$set::sip_dir/$id.cgi") { unlink "$set::sip_dir/$id.cgi" }
&unlock($id);
library/dry.cgi: sub dry
全置換
'bag' を $F{fl} に全て置換
library/equip.cgi: sub equip
修正前
&say($I->{M},'bag','Set,Reload');
修正後
&say($I->{M},$F{fl},'Set,Reload');
library/farm.cgi:
サブルーチンの前に追加
require "$set::dat_dir/farm_item_catalog.cgi";
require "$set::dat_dir/farm_livestock_catalog.cgi";
require "$set::itm_dir/farm_sale_item.cgi";
require "$set::itm_dir/farm_sale_livestock.cgi";
library/farm.cgi: sub farm_before
修正前
&say("$I->{Sp}{Fm}{nm}は閉まっています",'CLOSE') unless -e "$set::itm_dir/$I->{Pl}{fm}";
&say("$I->{Sp}{Fm}{nm}は閉まっています",'CLOSE') unless -e "$set::itm_dir/$I->{Pl}{ls}";
修正後
&say("$I->{Sp}{Fm}{nm}は閉まっています",'CLOSE') unless exists $IC{$I->{pl}};
&say("$I->{Sp}{Fm}{nm}は閉まっています",'CLOSE') unless exists $LC{$I->{pl}};
削除
require "$set::itm_dir/$I->{Pl}{fm}";
修正前
foreach $Ui (@FI) {
修正後
foreach $Ui (@{$IC{$I->{pl}}}) {
$Ui = $FI{$Ui};
修正前
$Ui->{Sp} = int($Ui->{bp} * $set::mtp + $set::mpp) * $Ui->{qn};
修正後
$Ui->{Sp} = $Ui->{bp} * $Ui->{qn};
削除
require "$set::itm_dir/$I->{Pl}{ls}";
修正前
foreach $Up (@FI) {
修正後
foreach $Up (@{$LC{$I->{pl}}}) {
$Up = $FL{$Up};
修正前
$Up->{Sp} = int($Up->{bp} * $set::mtp + $set::mpp);
修正後
$Up->{Sp} = $Up->{bp};
library/farm.cgi: sub farm_after
削除
&get_place($I);
削除
require "$set::itm_dir/$I->{Pl}{fm}";
修正前
foreach $Ui (@FI) {
修正後
foreach $Ui (@{$IC{$I->{pl}}}) {
$Ui = $FI{$Ui};
修正前
$Ui->{Sp} = int($Ui->{bp} * $set::mtp + $set::mpp) * $Ui->{qn};
修正後
$Ui->{Sp} = $Ui->{bp} * $Ui->{qn};
削除
require "$set::itm_dir/$I->{Pl}{ls}";
修正前
foreach $Up (@FI) {
修正後
foreach $Up (@{$LC{$I->{pl}}}) {
$Up = $FL{$Up};
修正前
$Up->{Sp} = int($Up->{bp} * $set::mtp + $set::mpp);
修正後
$Up->{Sp} = $Up->{bp};
修正前
$Up->{ch} = &roll_dice(4) - 1;
修正後
$Up->{ch} = &roll_dice(5) - 1;
library/fight.cgi: sub fight_player
追加
&partner('',"<img src=$set::mim_dir/envGd.gif><br><br>$I->{Pl}{nm}での戦闘は禁止されています") if $I->{Pl}{ev}{Gd} && !$U->{vp};
追加
&partner('',"$U->{nm}とは暫く戦えません・・・") if @Den;
# 対戦受付回数 #
&change_status($U,'vp',-1) if $I->{Pl}{ev}{Gd};
library/fight.cgi: sub fight_creature
追加 local $battleisover; undef $I->{DX}; undef $I->{BI}; undef $I->{WO} if !$F{dg}; 修正前 my $i; 修正後 my ($i,$counter); 修正前 &M("$set::lab{lf}が低下している為、探索を中断しました。") && return 0 if $I->{lf} <= 10; $U->{Im} = "<img src=$set::iim_dir/$U->{im}><br><br>"; 修正後 &M("$set::lab{lf}が低下している為、探索を中断しました。") && return 0 if $I->{lf} <= 10 && !$F{dg}; $U->{Im} = "<img src=$set::iim_dir/$U->{im}><br><br>" if $set::mim && $U->{im}; $U->{nm} = $Dg->{mn} if $F{dg}; 修正前 &first_battle; 修正後 $counter = &first_battle($I,$U); 追加 while ($I->{lf} && $U->{lf}) { <中略> } if ($counter && !$battleisover) { &initiative($counter); &M("<tt>カウンター攻撃</tt>"); &concrete_battle($A,$D,'のカウンター!'); } 追加 &M("$U->{nm}は逃走した!</span><br>") && last if $i++ >= $V; last if $battleisover; &initiative(0); &concrete_battle($A,$D,'の攻撃。'); &concrete_battle($D,$A,'の攻撃。'); &M(); $U->{lf} = 0 if $F{dg} && $i == $V; 削除 &reload_gage(['lf','hl','ap','hy'],'V');library/fight.cgi: sub concrete_battle
追加 # 先制攻撃失敗 # if ($F && $A->{NZ}) { &M("だが$D->{Nm}は事前に物音に気付き攻撃を回避した。") && return; } # 狼の嗅覚 # if ($F && $D->{Sk}{Kn} && &skill_roll($D,$set::sKn,$D->{in} * 4)) { &M("$D->{Nm}はそれを素早く察知し、$A->{Nm}の攻撃を阻止した。") && return; } # 逃走 # if (!$F{dg} && $D->{Sk}{Rn} && $D->{lf} <= $D->{Mlf} * $set::sRn) { $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 (!$F{dg} && $D->{lf} <= $D->{sc}) { if (&roll_dice(100) <= $D->{BT} + $D->{DX} * 2) { &M("$D->{Nm}は逃走した!"); $battleisover = 2; } else { &M("$D->{Nm}は逃走を試みたが失敗した!"); } &destruction_check($D,'lg'); return if $battleisover; } 修正前 &destruction_check($D,'lh') if $MSG == 1; &destruction_check($D,'bd') if $ADM && !$MSG; 修正後 &destruction_check($D,'lh') if $D->{SH}; &destruction_check($D,'bd') if !$MSG; 追加 &M("$D->{Nm}は$A->{Nm}を道連れに・・・。"); return if &avoid_death($A); return if &helmet_roll($A,$D);library/fight.cgi: sub injury_check
修正前
$battleisover = 1;
修正後
$battleisover = 1 if !$F{dg};
library/fight.cgi: sub protector_check
追加
$S->{HM} = $S->{Hd}{cl} eq 'Hm' ? $S->{Hd}{ef} * $V + &equip_bonus($S,'Hd',$set::shb) : undef;
$S->{NZ} = 1 if $S->{Hd}{cl} eq 'Hm' && !$S->{Hd}{ql}{Sn};
# 鎧チェック #
$S->{NZ} = 1 if $S->{Bd}{cl} eq 'Ar' && !$S->{Bd}{ql}{Sn};
追加
$S->{BT} = $S->{Lg}{ef} + &equip_bonus($S,'Lg',$set::shb);
$S->{NZ} = 1 if $S->{Lg}{cl} eq 'Bt' && !$S->{Lg}{ql}{Sn};
library/fight.cgi: sub dead_or_alive
追加(全部で三箇所)
return if &avoid_death($D);
return if &helmet_roll($A,$D);
修正前
if ($D->{HM} && !$A->{Sk}{Fd} && &roll_dice(100) <= $D->{HM} + $D->{DX} * 2) {
$D->{lf} = 1;
&M("$D->{Nm}はなんとか一命を取り止めた!");
&destruction_check($D,'hd');
return;
}
修正後
return if &helmet_roll($A,$D);
library/fight.cgi: sub destruction_check
追加 my $E; my $V; 追加 $E = ucfirst($e); ###仮調整######################################### $V = $e eq 'rh' ? 12: $e eq 'lh' || $e eq 'bd' ? 10: $e eq 'hd' || $e eq 'lg' ? 0.5 : 1; ################################################## 修正前 if (&roll_dice($S->{$E}{db}) == 1) { 修正後 if (&roll_dice($S->{$E}{db} * $V) == 1) {library/fight.cgi: sub baggage_check
三箇所ある以下の二行を削除する
&reload_data('of') if $Ii->{eq} eq 'rh';
&reload_data('df') if $Ii->{cl} eq 'Ar';
修正前
if ($Ii->{Ql}{Rp}) {
&reload_data($Ii->{eq});
$Ii->{ql} .= ',Br';
$Ii->{eq} = '';
}
else {
&reload_data($Ii->{eq});
&change_status($S,'bg',-$Ii->{wt});
$Ii->{qn} = 0;
}
修正後
&reload_data($Ii->{eq});
if ($Ii->{Ql}{Rp}) {
$Ii->{ql} .= ',Br';
$Ii->{eq} = '';
}
else {
&change_status($S,'bg',-$Ii->{wt});
$Ii->{qn} = 0;
}
library/fight.cgi:
サブルーチンを新たに追加
# Sub Helmet Roll #
sub helmet_roll {
my $A = shift;
my $D = shift;
my $F;
return 0 if !$D->{HM} || $A->{Sk}{Fd};
if (&roll_dice(100) <= $D->{HM} + $D->{DX} * 2) {
$F = $D->{lf} = 1;
&M("$D->{Nm}はなんとか一命を取り止めた!");
}
&destruction_check($D,'hd');
return $F;
}
library/find.cgi: sub find
修正前
&say("$I->{Pl}{nm}では探索ができません",'CLOSE') unless -e "$set::itm_dir/$I->{Pl}{it}";
# 探索の特殊能力
$I->{bonus} = $set::sSi if $I->{Sk}{Si};
&encounter if $I->{Pl}{ev}{Ms};
&get_item($I);
&found($I,'it',$set::fvt,'探索','つ発見しました',1);
修正後
# 探索の特殊能力
$I->{bonus} = $set::sSi if $I->{Sk}{Si};
&get_item($I);
# モンスターが出現する #
if ($I->{Pl}{ev}{Ms}) {
$U = {};
require "$set::lib_dir/fight.cgi";
require "$set::dat_dir/find_monster_catalog.cgi";
&say("$I->{Pl}{nm}では探索ができません",'CLOSE') unless $CA{$I->{pl}};
&found($I,"find_monster_$I->{Pl}{kg}",$set::fvt,'探索','つ手に入れました',0,'monster');
}
# モンスターが出現しない #
else {
require "$set::dat_dir/find_item_catalog.cgi";
&say("$I->{Pl}{nm}では探索ができません",'CLOSE') unless $CA{$I->{pl}} || $CA{$I->{Pl}{kg}};
&found($I,'find_item',$set::fvt,'探索','つ発見しました',1);
}
修正前
&reload_data('gl');
&reload_gage(['vt'],'V');
修正後
&reload_data('gl') if !$I->{Pl}{ev}{Ms};
&reload_gage('vt','V');
library/find.cgi: sub found
修正前
my ($i,$V,@V,$D,@FI);
修正後
my ($i,$V,@V,$D,$F,@FI);
修正前
require "$set::itm_dir/$S->{Pl}{$V0}";
修正後
require "$set::itm_dir/$V0.cgi";
修正前
@FI = sort { $a <=> $b } keys %FI;
修正後
%CA = $CA{$S->{pl}} ? %{$CA{$S->{pl}}} : %{$CA{$S->{Pl}{kg}}};
@FI = sort { $a <=> $b } keys %CA;
追加
&M("<img src=$set::mim_dir/g.gif> $V $set::mnyを手に入れました。");
修正前
if ($D <= $_) {
$Ii = $FI{$_};
last;
}
修正後
if ($D <= $_) {
$Ii = $FI{$CA{$_}};
last;
}
追加
$F = 'fought';
&fight_creature($V) || last;
追加
$Ii->{Im} = &orb_image($Ii->{ef});
&M("$Ii->{Im}$Ii->{nm}を発見しましたが所持上限を超えたので捨てました。") && next if $set::mob && length $S->{ob} >= $set::mob;
追加
&reload_gage(['lf','hl','ap','hy'],'V') if $F;
&set_orb($S) if $S->{Ob};
library/find.cgi:
サブルーチンを削除
sub encounter
library/fishing.cgi: sub fishing
追加
require "$set::lib_dir/find.cgi";
require "$set::dat_dir/$F{fl}_fish_catalog.cgi";
削除
&error('Fishing Error','CLOSE') if !$F{fl};
修正前
$backto = $F{fl} eq 'rv' ? 'river' : 'harbor';
&say("釣り道具を持っていません",$backto) if !$F{ft};
修正後
&say("釣り道具を持っていません",$F{fl}) if !$F{ft};
修正前
&say("漁猟禁止区域です",$backto) if !$I->{Pl}{$F{fl}};
&say("漁猟禁止区域です",$backto) unless -e "$set::itm_dir/$I->{Pl}{$F{fl}}";
&say("$set::lab{vt}が足りません",$backto) if $I->{vt} < $set::yvt;
&say('これ以上は持てません',$backto) if $I->{bg} >= $I->{Mbg};
修正後
&say("漁猟禁止区域です",$F{fl}) unless $CA{$I->{pl}};
&say("$set::lab{vt}が足りません",$F{fl}) if $I->{vt} < $set::yvt;
&say('これ以上は持てません',$F{fl}) if $I->{bg} >= $I->{Mbg};
修正前
&found($I,$F{fl},$set::yvt,'釣り','匹釣りました');
修正後
&found($I,"$F{fl}_fish",$set::yvt,'釣り','匹釣りました');
修正前
$I->{bonus} = $I->{lv} * 20 * $I->{Sk}{Fi} + $Ui->{ef};
修正後
$I->{bonus} = $I->{lv} * 20 * $I->{Sk}{Fi} + $Ui->{ef} * 10;
修正前
&reload_gage(['vt','lf'],'V');
修正後
&reload_gage('vt','V');
修正前
&say($I->{M},$backto,'Reload');
修正後
&say($I->{M},$F{fl},'Reload');
library/forest.cgi: sub forest
追加
<option value="herb">薬草採取</option>
<option value="dye">染料採取</option>
library/friends.cgi: sub friends_after
修正前
$U = &get_user('A',$F{ud},'noerror') || &say('存在しないIDです','friends_before');
修正後
$U = &get_user('A',$F{ud},'unlocked') || &say('存在しないIDです','friends_before');
library/harbor.cgi: sub harbor
修正前
<input type=hidden name=fl value="se">
修正後
<input type=hidden name=fl value="harbor">
library/herb.cgi: sub herb
追加
require "$set::lib_dir/find.cgi";
require "$set::dat_dir/forest_herb_catalog.cgi";
修正前
&say("環境保護区域です",'forest') if !$I->{Pl}{hb};
&say("環境保護区域です",'forest') unless -e "$set::itm_dir/$I->{Pl}{hb}";
修正後
&say("環境保護区域です",'forest') unless $CA{$I->{pl}};
修正前
&found($I,'hb',$set::wvt,'採取','つ手に入れました');
修正後
&found($I,'forest_herb',$set::wvt,'採取','つ手に入れました');
修正前
&reload_gage(['vt','lf'],'V');
修正後
&reload_gage('vt','V');
library/hunting.cgi: sub hunting
追加
require "$set::lib_dir/fight.cgi";
require "$set::dat_dir/forest_animal_catalog.cgi";
修正前
&say("禁猟区です",'forest') if !$I->{Pl}{ht};
&say("禁猟区です",'forest') unless -e "$set::itm_dir/$I->{Pl}{ht}";
修正後
&say("禁猟区です",'forest') unless $CA{$I->{pl}};
修正前
&found($I,'ht',$set::wvt,'狩り','つ手に入れました',0,'hunting');
修正後
&found($I,'forest_animal',$set::wvt,'狩り','つ手に入れました',0,'hunting');
library/install.cgi: sub install
修正前
$Ii->{ql} =~ s/Fu/Lk,Sc,Tr,Ns/;
修正後
$Ii->{ql} =~ s/Fu/Lk,Sc/;
$Ii->{ql} .= ',Tr' if !$Ii->{Ql}{Tr};
$Ii->{ql} .= ',Ns' if !$Ii->{Ql}{Ns};
置換
'bag' を $F{fl} に置換
library/look.cgi: sub look
修正前
&say($I->{M},'bag','Reload');
修正後
&say($I->{M},$F{fl},'Reload');
library/look.cgi: sub nutritive_value
削除
$Si->{Ef} =~ s/,/、/;
library/lumberjacking.cgi: sub lumberjacking
追加
require "$set::lib_dir/find.cgi";
require "$set::dat_dir/forest_wood_catalog.cgi";
修正前
&say("伐採禁止区域です",'forest') if !$I->{Pl}{wd};
&say("伐採禁止区域です",'forest') unless -e "$set::itm_dir/$I->{Pl}{wd}";
修正後
&say("禁猟区です",'forest') unless $CA{$I->{pl}};
修正前
&found($I,'wd',$set::wvt,'伐採','本手に入れました');
修正後
&found($I,'forest_wood',$set::wvt,'伐採','本手に入れました');
修正前
if ($I->{Rh}{ql}{Lj}) {
&reload_data('rh') if &break_check('rh');
}
else {
&reload_data('sb') if &break_check('sb');
}
修正後
$I->{Rh}{ql}{Lj} ? &break_check($I,'rh') : &break_check($I,'sb');
修正前
&reload_gage(['vt','lf'],'V');
修正後
&reload_gage('vt','V');
library/mail.cgi: sub mail_before
修正前
$U = &get_user('A',$_,'noerror') or next;
修正後
$U = &get_user('A',$_,'unlocked') or next;
library/main.cgi: sub main
追加
&departure_monitor;
&oceanliner_monitor;
library/main.cgi: sub main
追加
<option value="levelup_before">レベルアップボーナス</option>
<option value="face_before">イメージ画像の変更</option>
追加
<option value="Si">販売情報</option>
<option value="Rk">ランキング</option>
修正前
<th nowrap class=padding><img name=im src=$set::mim_dir/$I->{im} class=image><br><span id=nm>$I->{nm}</span></th>
修正後
<th nowrap class=padding><img name=I2 src=$set::mim_dir/$I->{im} class=image><br><span id=nm>$I->{nm}</span></th>
library/main.cgi:
サブルーチンを新たに追加
# Sub Ocean Liner Monitor #
sub oceanliner_monitor {
my (%D,$K,$V,$D,$F);
return if !&schedule_monitor(2);
return unless (stat("$set::dat_dir/oceanliner_passenger.cgi"))[7];
%D = map { $_->[0] => $_->[1] }
map { [split(/<>/)] } &open_dat("$set::dat_dir/oceanliner_passenger.cgi");
require "$set::dat_dir/oceanliner_ship.cgi";
require "$set::lib_dir/myrecord.cgi";
while (($K,$V) = each %D) {
($OL{$K}{nw},$OL{$K}{go}) = split(/_/,$K);
foreach $D (split(/<>/,$V)) {
$U = &get_user('U',$D) or next;
$F = &login_check($U,1) ? 1 : 0;
$F = 2 if $U->{gl} < $OL{$K}{sp};
if (!$F) {
&change_status($U,'gl',-$OL{$K}{sp});
&delete_place($U);
$U->{pl} = $OL{$K}{go};
&set_place($U);
}
$U->{ab} = '';
&set_user($U);
if ($F == 2) {
&set_record("乗船料金が払えず、船に乗ることができませんでした。");
}
elsif ($F == 1) {
&set_record("ログイン中だったため、船に乗ることができませんでした。");
}
else {
&set_record("$OL{$K}{pl}に移動しました。<br>乗船料として$OL{$K}{sp} $set::mnyを支払いました。");
}
}
}
&write_dat("$set::dat_dir/oceanliner_passenger.cgi");
}
library/mine.cgi: sub mine_after
追加
require "$set::lib_dir/find.cgi";
require "$set::dat_dir/mine_catalog.cgi";
修正前
$V = $I->{Sk}{Gm} ? 'gs' : 'or';
修正後
$V = $I->{Sk}{Gm} ? 'mine_gold' : 'mine_ore';
修正前
&say("$I->{Pl}{nm}の$I->{Sp}{Mn}{nm}は閉鎖しています",'CLOSE') if !$I->{Pl}{$V};
&say("$I->{Pl}{nm}の$I->{Sp}{Mn}{nm}は閉鎖しています",'CLOSE') unless -e "$set::itm_dir/$I->{Pl}{$V}";
修正後
&say("$I->{Pl}{nm}の$I->{Sp}{Mn}{nm}は閉鎖しています",'CLOSE') unless $CA{$I->{pl}};
修正前
if ($I->{Rh}{ql}{Mn}) {
&reload_data('rh') if &break_check('rh');
}
else {
&reload_data('sb') if &break_check('sb');
}
&reload_data('lh') if &break_check('lh');
修正後
$I->{Rh}{ql}{Mn} ? &break_check($I,'rh') : &break_check($I,'sb');
&break_check($I,'lh');
修正前
&reload_gage(['vt','lf'],'V');
修正後
&reload_gage('vt','V');
library/new.cgi: sub regist_check
修正前
$U = &get_user('A',$_);
修正後
$U = &get_user('A',$_,'unlocked');
library/orb.cgi: sub orb_before
追加
<br>
<input type=checkbox name=ta> 一個ずつ残してそれ以外はトレード<br>
<input type=checkbox name=tn> リセット<br>
<div class=r>$set::but{OK}</div>
削除
<br>
<form method=post action=$set::cgi_url>
装備中の武器に$set::orb{x}をセットする<br>
装備中の武器:$I->{Rh}{nm}<br>
<br>
<tt>$set::orb{x}を選択して下さい:
<select name=ob class=select>$t2</select>
</tt><br>
<br>
<div class=r><tt>一度セットした$set::orb{x}は取り外せません。</tt><br>
<br>
$set::but{OK}</div>
<input type=hidden name=md value="orb_set">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
<input type=hidden name=xx value="$I->{XX}">
</form>
library/orb.cgi:
サブルーチンを削除
# Sub Orb Set #
sub orb_set {
&say('未実装','orb_before');
}
library/pack.cgi: sub pack
削除
my ($id,$gd,$ql);
修正前
if ($id) {
修正後
if ($Ui) {
修正前
&say("同じものしかパックできません",$F{fl}) if $id ne $Ii->{id} || $ql ne $Ii->{ql};
修正後
&say("同じものしかパックできません",$F{fl}) if $Ui->{id} ne $Ii->{id} || $Ui->{ql} ne $Ii->{ql} || $Ui->{ef} ne $Ii->{ef};
修正前
&say("同じグレードの物しかパックできません",$F{fl}) if $gd != $Ii->{gd};
修正後
&say("同じグレードの物しかパックできません",$F{fl}) if $Ui->{gd} != $Ii->{gd};
削除
$id = $Ii->{id};
$gd = $Ii->{gd};
$ql = $Ii->{ql};
修正前
$Ui->{sp} = '';
修正後
&say("アイテムが選択されていません",$F{fl}) if !$Ui;
$Ui->{sp} = $Ui->{rs} = '';
library/partner.cgi: sub partner_examine
修正前
$S = &get_user('A',$V) if $V;
修正後
$S = &get_user('A',$V,'unlocked') if $V;
library/playerlist.cgi: sub playerlist
追加
my %unique;
修正前
$U = &get_user('U',$_) or next;
修正後
$U = &get_user('U',$_,'unlocked') or next;
修正前
$U->{Li} = &login_check($U,'noerror') ? '○' : '●';
修正後
$U->{Li} = &login_check($U,1) ? '○' : $U->{vp} ? '▲' : '●';
修正前
@{$U->{Ob}} = map { &orb_image($_) }
grep { /[a-z]/ } split(//,$U->{ob});
修正後
undef %unique;
@{$U->{Ob}} = map { &orb_image($_).$unique{$_} }
grep { !$unique{$_}++ }
grep { /[a-l]/ } split(//,$U->{ob});
library/playerlist.cgi: sub playerlist_statistics
修正前
$U = &get_user('A',$_);
修正後
$U = &get_user('A',$_,'unlocked');
library/playerlist.cgi: sub sales_information
修正前
$U = &get_user('A',$_);
修正後
$U = &get_user('A',$_,'unlocked');
修正前
$T->{nm} .= "+$T->{pl}" if $T->{pl};
$T->{nm} .= " x $T->{qn}" if $T->{qn} > 1;
修正後
&playerlist_decorate_item($T);
library/playerlist.cgi:
サブルーチンを新たに追加する
# Ranking #
sub ranking {
my ($i,$j,$K,@L,%t0,$t0,$t1,$t2);
&transfer_HTML($set::rnk_htm) if !&schedule_monitor(3);
@L = map { &get_user('A',$_,'unlocked') } &get_allusersID();
$t0 = <<" END_OF_HTML";
<tr>
<th>位</th>
<th>ID</th>
<th nowrap>名前</th>
<th>性</th>
<th nowrap>職業</th>
<th nowrap>ギ</th>
<th>勝</th>
<th>負</th>
<th>殺</th>
<th>死</th>
<th nowrap>Rate</th>
<th width=100%>コメント</th>
</tr>
END_OF_HTML
%t0 = ( 'rt' => 'Rate',
'wn' => '勝利数',
'ls' => '敗北数',
'kl' => '殺害数',
'dt' => '死亡数',
'gl' => '所持金' );
foreach $K ('rt','wn','ls','kl','dt','gl') {
@L = sort { $b->{$K} <=> $a->{$K} } @L;
$t1 .= "<tr><th colspan=12 class=heading>$t0{$K}</th></tr>\n";
$t1 .= $t0;
for $i (0 .. $#L) {
last if $i > $set::rnn;
$U = $L[$i];
$j = $i + 1 if !$i || $L[$i]{$K} != $L[$i-1]{$K};
$j = "<span class=alert>$j</span>" if $j <= 3;
$U->{gu} &&= "<img src=$set::mim_dir/guild$U->{gu}.gif>";
$t1 .= qq|<tr>|;
$t1 .= qq|<td nowrap align=right>$j</td>|;
$t1 .= qq|<td>$U->{id}</td>|;
$t1 .= qq|<td nowrap>$U->{nm}</td>|;
$t1 .= qq|<td><img src=$set::mim_dir/$U->{sx}.gif></td>|;
$t1 .= qq|<td nowrap>$U->{jb}</td>|;
$t1 .= qq|<td>$U->{gu}</td>|;
$t1 .= qq|<td>$U->{wn}</td>|;
$t1 .= qq|<td>$U->{ls}</td>|;
$t1 .= qq|<td>$U->{kl}</td>|;
$t1 .= qq|<td>$U->{dt}</td>|;
$t1 .= qq|<td nowrap>$U->{rt}</td>|;
$t1 .= qq|<td>$U->{w1}</td>|;
$t1 .= qq|</tr>\n|;
}
}
$t2 = &header(CSS=>'list',GetTag=>1);
$t2 .= "<table>\n$t1</table>\n";
$t2 .= &footer(GetTag=>1);
&write_dat($set::rnk_htm,$t2);
&transfer_HTML($set::rnk_htm);
}
サブルーチンを新たに追加する
# Sub Playerlist Decorate Item #
sub playerlist_decorate_item {
my $Si = shift;
$Si->{nm} .= ' ('. &get_passage($Si->{bt},$set::pyt) . '歳)' if $Si->{bt};
$Si->{nm} .= "+$Si->{pl}" if $Si->{pl};
$Si->{nm} .= "[$Si->{db}]" if $Si->{db};
$Si->{nm} = "<span class=i$Si->{gd}>$Si->{nm}</span>" if $Si->{gd};
$Si->{nm} = "<span class=Ex>Ex</span>".$Si->{nm} if $Si->{Ql}{Ex};
$Si->{nm} = "<span class=broken>死んだ</span>".$Si->{nm} if $Si->{bt} && &get_passage($Si->{bt},$set::pyt) > $Si->{ls};
$Si->{nm} = &item_image($Si).$Si->{nm};
$Si->{nm} .= " x $Si->{qn}" if $Si->{qn} > 1;
}
library/price.cgi: sub price_after
修正前
if (exists $F{$i}) {
$Ii->{qn} = 1 if $F{fl} eq 'pet';
if (!$F{$i}) { $Ii->{sp} = $Ii->{rs} = '' }
elsif ($I->{Sl} >= $I->{vx}) { &M("$Ii->{nm}:これ以上は販売できません。") }
elsif ($F{$i} =~ /\D/) { &M("$Ii->{nm}:数値以外は使用出来ません。") }
elsif ($F{$i} < $Ii->{bp} * $Ii->{qn} + $set::lip) { &M("$Ii->{nm}:設定価格が最低販売価格を下回っています。") }
else {
$Ii->{sp} = $F{$i};
&M("$Ii->{nm}:値段を設定しました。");
}
}
修正後
if (exists $F{$i}) {
$Ii->{qn} = 1 if $F{fl} eq 'pet';
$Ii->{sp} = $Ii->{rs} = '';
next if !$F{$i};
if ($I->{Sl} >= $I->{vx}) {
&M("$Ii->{nm}:これ以上は販売できません。");
}
elsif ($F{$i} =~ /\D/) {
&M("$Ii->{nm}:数値以外は使用出来ません。");
}
elsif ($F{$i} < $Ii->{bp} * $Ii->{qn} + $set::lip) {
&M("$Ii->{nm}:設定価格が最低販売価格を下回っています。");
}
else {
$Ii->{sp} = $F{$i};
&M("$Ii->{nm}:値段を設定しました。");
}
}
library/repair.cgi:
全置換
'bag' を $F{fl} に全て置換
library/river.cgi: sub river
修正前
<input type=hidden name=fl value="rv">
修正後
<input type=hidden name=fl value="river">
library/sell.cgi: sub sell_after
修正前
$Ii->{Ql}{Dx} = $Ii->{sp} = $Ii->{rs} = '';
修正後
$Ii->{sp} = $Ii->{rs} = '';
library/shopping.cgi:
追加
require "$set::lib_dir/status.cgi";
require "$set::dat_dir/market_item_catalog.cgi";
require "$set::itm_dir/market_sale_item.cgi";
library/shopping.cgi: sub shopping_before
修正前
&say("$I->{Sp}{Mk}{nm}は閉まっています",'market') unless -e "$set::itm_dir/$I->{Pl}{mk}";
修正後
&say("$I->{Sp}{Mk}{nm}は閉まっています",'market') unless exists $IC{$I->{pl}};
削除
require "$set::itm_dir/$I->{Pl}{mk}";
修正前
foreach $Ui (@FI) {
修正後
foreach $Ui (@{$IC{$I->{pl}}}) {
$Ui = $FI{$Ui};
修正前
$Ui->{Sp} = int($Ui->{bp} * $set::mtp + $set::mpp);
修正後
$Ui->{Sp} = $Ui->{bp};
library/shopping.cgi: sub shopping_after
削除
&get_place($I);
require "$set::itm_dir/$I->{Pl}{mk}";
修正前
foreach $Ui (@FI) {
修正後
foreach $Ui (@{$IC{$I->{pl}}}) {
$Ui = $FI{$Ui};
修正前
$Ui->{Sp} = int(($Ui->{bp} * $set::mtp + $set::mpp) * $I->{Ap}) * $F{hm};
修正後
$Ui->{Sp} = int($Ui->{bp} * $I->{Ap}) * $F{hm};
削除
&get_quality($Ui);
修正前
if ($Ui->{cl} ne 'Fd' && $Ui->{cl} ne 'Mt') {
修正後
if (&item_class_check($Ui) ne 'M') {
library/stance.cgi: sub stance_before
追加
$I = &get_user('I');
$I->{vp} ||= 0;
追加
新しい設定値:<input type=text name=sc class=textbox size=3 value="$I->{sc}"><br>
<br>
<tt>ガードがいる場所でも対戦を受け付けるかどうかを設定します。</tt><br>
<tt>回数が0の場合は対戦を受け付けません。</tt><br>
受け付ける回数:<input type=text name=vp class=textbox size=2 value="$I->{vp}"><br>
library/stance.cgi: sub stance_after
追加
&say("半角数字以外は使用できません",'stance_before') if $F{fc} =~ /[^\d]/ || $F{vp} =~ /[^\d]/;
追加
$I->{sc} = $F{sc};
$I->{vp} = $F{vp};
library/takeoff.cgi: sub takeoff
削除
&reload_data('of') if $Ii->{eq} eq 'rh';
&reload_data('df') if $Ii->{cl} eq 'Ar';
修正前
&say($I->{M},'bag','Reload');
修正後
&say($I->{M},$F{fl},'Reload');
library/takeoff.cgi: sub takeoff_all
削除
&reload_data('of');
&reload_data('df');
修正前
&say('全装備品を解除しました','bag','Reload');
修正後
&say('全装備品を解除しました',$F{fl},'Reload');
library/transfer.cgi: sub transfer_before
追加
&transfer_vitality;
&dress_bonus;
library/transfer.cgi: sub transfer_after
追加
&transfer_vitality;
&dress_bonus(1);
修正前
&say("$I->{Pl}{nm}に移動しました",'transfer_before','Reload');
修正後
&M("$I->{Pl}{nm}に移動しました。");
&say($I->{M},'transfer_before','Reload');
library/transfer.cgi:
サブルーチンを新たに追加
# Sub Dress Bonus #
sub dress_bonus {
my $F = shift; # Break check or not
&get_equipment($I,'bd');
return if $I->{Bd}{cl} ne 'Ds';
$set::tmn -= int($I->{Bd}{ef} / 5 * 2);
$set::tmn -= $set::grd[$I->{Bd}{gd}];
return if !$F;
require "$set::lib_dir/break.cgi";
&break_check($I,'bd');
}
library/use.cgi: sub use
修正前
&say($I->{M},'bag','Reload');
修正後
&say($I->{M},$F{fl},'Reload');
library/use.cgi: sub type_expendable
追加
next if $K =~ /^(gl|ex)$/;
&reload_gage($K,$V);
library/yield.cgi: sub yield
修正前
my $Ii;
修正後
my ($Ii,$Ui);
削除
my $dice;
my $percent;
修正前
&get_bonus($I,'Br');
修正後
$I->{bonus} = $I->{Sk}{Br} ? 1 : 0.5;
修正前
$percent = $Ip->{hg} / $Ip->{hx} * 100 * $I->{bonus} + $I->{dx};
foreach $Ii (@{$FI{$Ip->{nm}}}) {
&error('Yield Error') if $time > 30;
for $j (1 .. $time) {
$dice = &roll_dice(100);
if ($dice <= $percent) {
last if $j * $Ii->{wt} + $I->{bg} > $I->{Mbg};
$Ii->{qn} = $j;
}
}
&M("$Ii->{nm}の収穫はありません。") && next if !$Ii->{qn};
&say("荷物スロットに空きがありません",'pet') if @{$I->{Bg}} >= $I->{bs};
push (@{$I->{Bg}},{%$Ii});
$I->{bg} += $Ii->{qn} * $Ii->{wt};
$Ii->{Im} = &item_image($Ii);
&M("$Ii->{Im}$Ii->{nm}を$Ii->{qn}つ手に入れました。");
}
修正後
foreach $Ii (@{$FI{$Ip->{nm}}}) {
$Ui = {%$Ii};
$Ui->{qn} = int($Ii->{qn} * $time * $I->{bonus} * $Ip->{hg} / $Ip->{hx} + 0.5);
&M("$Ii->{nm}の収穫はありません。") && next if !$Ui->{qn};
&say('重すぎて持てません','pet') if $Ui->{qn} * $Ii->{wt} + $I->{bg} > $I->{Mbg};
&say('荷物スロットに空きがありません','pet') if @{$I->{Bg}} >= $I->{bs};
push (@{$I->{Bg}},$Ui);
$I->{bg} += $Ui->{qn} * $Ii->{wt};
$Ii->{Im} = &item_image($Ii);
&M("$Ii->{Im}$Ii->{nm}を$Ui->{qn}つ手に入れました。");
}
set.cgi
修正 $lky = 1; # ファイルのロック(no=0 mkdir=1 symlink=2) 修正 # 市場 Market ######################################## # $mix = 20; # 闇市の1アイテム在庫数最大値 $mpp = 0; # 闇市の販売価格(最低販売価格に加算する額) $mtp = 2.0; # 闇市の販売価格(最低販売価格の何倍で売るか) 追加 # プレイヤーデータ設定 Player's Data ################# # $mob = 24; # オーブに所持上限をつける(yes=上限値,no=0) $fcp = 500; # イメージ画像変更料金 追加 # 戦闘 Fight ######################################### # $mim = 1; # モンスター画像を使用する(yes=1,no=0) 修正 # 合成 Compose ####################################### # $erb = 5; # エクセレントロールとダブルロールの基本成功率 $ddu = 2; # ダブルロールで作成されるアイテムの数 追加 # ダンジョン Dungeon ################################# # $dvt = 5; # ダンジョンの探索で消費するVIT 追加 # その他 Others ###################################### # $rnn = 20; # ランキングで一項目毎に表示する人数 削除 # ラベルデータ Label Data ############################ # 'of' => '攻撃力', 'df' => '防御力', 追加 # ユーザーデータ User Data ########################### # 'vp', # 対戦受付フラグ Versus Player 'dg', # ダンジョンデータ Dungeon Data 追加 # パス Path ########################################## # $dgn_dir = './dungeon'; # dungeonディレクトリ(700,707,777) $rnk_htm = './ranking.html'; # ranking.htmlmanualファイルの差し替え
aromor.html beginner.html item01.html item02.html item03.html menu.html nutrition.html weapon.htmlCSSファイルの差し替え
sos3.csslibraryファイルの追加
dungeon.cgi dye.cgi face.cgi item.cgi roast.cgiデータファイルの差し替え
data/itemdictionary.cgi data/place.cgi item/arms.cgi item/bread.cgi item/cloth.cgi item/clothes.cgi item/crops.cgi item/dairyproduct.cgi item/dish_other.cgi item/dish_sandwich.cgi item/dish_soup.cgi item/dish_sweets.cgi item/drug.cgi item/liquor.cgi item/leathercraft.cgi item/monster_cov.cgi item/monster_gho.cgi item/monster_ven.cgi item/product.cgi item/vessel.cgi item/woodwork.cgiデータファイルを追加
data/farm_item_catalog.cgi # どの農場でどのアイテムが売られているかを設定しているファイル (644) data/farm_livestock_catalog.cgi # どの農場でどのペットが売られているかを設定しているファイル (644) data/find_item_catalog.cgi # どの探索場所でどのアイテムが何%の確率で手に入るかを設定しているファイル (644) data/find_monster_catalog.cgi # どの探索場所でどのモンスターが何%の確率で出現するかを設定しているファイル (644) data/forest_animal_catalog.cgi # どの森でどの動物が何%の確率で出現するかを設定しているファイル (644) data/forest_berry_catalog.cgi # どの森でどの果実が何%の確率で採取できるかを設定しているファイル (644) data/forest_dye_catalog.cgi.cgi # どの森でどの染料が何%の確率で採取できるかを設定しているファイル (644) data/forest_herb_catalog.cgi # どの森でどの薬草が何%の確率で採取できるかを設定しているファイル (644) data/forest_wood_catalog.cgi # どの森でどの材木が何%の確率で伐採できるかを設定しているファイル (644) data/harbor_fish_catalog.cgi # どの港でどの魚が何%の確率で獲れるかを設定しているファイル (644) data/itemdata.cgi # アイテム作成で重さと金額と栄養素を自動で計算させる為のデータファイル (644) data/market_item_catalog.cgi # どの市場でどのアイテムが売られているかを設定しているファイル (644) data/mine_catalog.cgi # どの鉱山でどのインゴットが何%の確率で手に入るかを設定しているファイル (644) data/oceanliner_passenger.cgi # 定期船に予約が入る度にプレイヤーのIDを保存するファイル (606) data/oceanliner_ship.cgi # 定期船のファイル (644) data/river_fish_catalog.cgi # どの川でどの魚が何%の確率で獲れるかを設定しているファイル (644) dungeon/dungeon_fir.cgi # フィル・ドゥ・ヌイのダンジョンファイル (644) dungeon/dungeon_fir_monster.cgi # フィル・ドゥ・ヌイのダンジョンモンスターファイル (644) item/dungeon_item.cgi # ダンジョン内で手に入るアイテムデータを格納したファイル (644) item/farm_sale_item.cgi # 農場で売っている全てのアイテムデータを格納したファイル (644) item/farm_sale_livestock.cgi # 農場で売っている全ての家畜のデータを格納したファイル (644) item/find_item.cgi # 探索で手に入るアイテムのデータファイル (644) item/forest_animal.cgi # 森の動物のデータファイル (644) item/forest_berry.cgi # 果実アイテムのデータファイル (644) item/forest_dye.cgi # 染料のデータファイル (644) item/forest_herb.cgi # 薬草アイテムのデータファイル (644) item/forest_wood.cgi # 材木アイテムのデータファイル (644) item/hat.cgi # 帽子アイテムのデータファイル (644) item/market_sale_item.cgi # 市場で売っている全てのアイテムデータを格納したファイル (644) item/mine_gold.cgi # 金鉱のインゴットアイテムのデータファイル (644) item/mine_ore.cgi # 鉄鉱のインゴットアイテムのデータファイル (644) item/monster_tow.cgi # 暗黒の塔のモンスターデータを格納したファイル (644) item/river_fish.cgi # 川魚のファイル (644) place/tow.cgi # 暗黒の塔にいるプレイヤーのIDを保存する空ファイル (606)データファイルを削除
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/forest_wood_all.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/mine_gold_all.cgi item/mine_ore_all.cgi item/river_fish_all.cgiアイテム画像を差し替え(itemimage/)
roastedchicken.gif wood1.gif wood4.gif wood5.gif wood6.gif wood7.gif wood8.gifアイテム画像名を変更(itemimage/)
sautedfish.gif → sauteedfish.gifメイン画像を追加(mainimage/)
g.gifアイテム画像を追加(itemimage/)
aloe.gif bonnet.gif bratkartoffeln.gif buttons.gif camouflagedye.gif capeline.gif casquette.gif checkdye.gif cloche.gif cutofcloth.gif derbyhat.gif dresspattern.gif energydrink.gif felthat.gif flowerdye.gif frenchtoast.gif friedvegetables.gif gratinsoup.gif hamburgersteak.gif herbchicken.gif huntinghat.gif icecream.gif jaguardye.gif knithat.gif normalhelmet.gif oceanliner.gif paisleydye.gif picturehat.gif pointedhat.gif polkadotdye.gif pudding.gif slouchhat.gif springwater.gif stripedye.gif suede.gif suedearmor.gif suedeboots.gif suedehelmet.gif tophat.gif workcap.gif
Copyright 2000-2007 Missing Link All Rights Reserved.