
[Ver b2.0]
[Ver b2.1]
[Ver b1.4]
[Ver b1.3]
[Ver b1.2.1]
[Ver b1.1]
[Ver b1.0]
履歴の数の設定を変更前より少なくした場合に設定より多くの戦闘履歴が残る。
sub fight_player:
pop(@Uen) if @Uen >= $set::elx;
↓
@Uen = @Uen[0..$set::elx-1] && pop(@Uen) if @Uen >= $set::elx;
作成で、失敗して材料が戻ってくると、装備中の道具を使い切っていた時にその道具が外れる不具合を修正します。
sub compose_after: my (@CL,@ID,$K,$V); ↓ my (@CL,@ID,@EQ,$K,$V);
sub compose_after:
next if !$F{$i} && $Ii->{eq} ne 'rh' && $Ii->{eq} ne 'sb';
↓
next if !$F{$i} && $Ii->{eq} ne 'rh' && $Ii->{eq} ne 'sb';
push(@EQ,{%$Ii}) if $Ii->{eq} eq 'rh' || $Ii->{eq} eq 'sb';
sub compose_after:
&M("作成に使用した材料は無事でした。");
$Ui->{ex} = 0;
$I->{DS} = 1;
↓
&M("作成に使用した材料は無事でした。");
$Ui->{ex} = 0;
$I->{DS} = 1;
foreach (@EQ) {
&set_equipment($I,$_);
&get_effect($_);
&reload_data($_->{eq},"$_->{nm}$_->{Ef}",$_->{im});
}
三節棍:
ki => 'Chain',
↓
ki => 'Squaredlumber',
ジャヴェリン:
ki => 'Thinboard',
↓
ki => 'Woodenstick',
協会で、怪我の治療をして貰うとHAPの表示がおかしくなる不具合を修正します。
sub church_after:
&reload_data('hy');
↓
&reload_gage('hy','V');
市場で、職人街で買い物をした時にエラーになると市場へ戻る不具合を修正します。
sub shopping_after:
if (&purchase_item($IC{$I->{pl}},\%FI,'Mk','shopping_before')) {
↓
if (&purchase_item($IC{$I->{pl}},\%FI,'Mk','shopping_before','','cu')) {
sub purchase_item: my $R = shift; # return mode ↓ my @R = @_; # return mode
sub purchase_item:
$R ||= $I->{Sp}{$P}{md};
↓
$R[0] ||= $I->{Sp}{$P}{md};
sub purchase_item:
&say("$Ui->{nm}:数値以外は使用出来ません",$R);
↓
&say("$Ui->{nm}:数値以外は使用出来ません",@R);
sub purchase_item:
&say("$Ui->{nm}は他の人に予\約されています",$R);
↓
&say("$Ui->{nm}は他の人に予\約されています",@R);
sub purchase_item:
&say('これ以上は重くて持てません',$R);
↓
&say('これ以上は重くて持てません',@R);
sub purchase_item:
&say('お金が足りません',$R);
↓
&say('お金が足りません',@R);
sub purchase_item:
&say("荷物スロットが一杯です",$R);
↓
&say("荷物スロットが一杯です",@R);
sub purchase_pet: my $R = shift; # return mode ↓ my @R = @_; # return mode
sub purchase_pet:
$R ||= $I->{Sp}{$P}{md};
↓
$R[0] ||= $I->{Sp}{$P}{md};
sub purchase_pet:
&say("$Ui->{nm}:数値以外は使用出来ません",$R);
↓
&say("$Ui->{nm}:数値以外は使用出来ません",@R);
sub purchase_pet:
&say("$Ui->{nm}は他の人に予\約されています",$R);
↓
&say("$Ui->{nm}は他の人に予\約されています",@R);
sub purchase_item:
&say("スロットの空きが足りません",$R);
↓
&say("スロットの空きが足りません",@R);
sub purchase_pet:
&say('お金が足りません',$R);
↓
&say('お金が足りません',@R);
イメージ画像の変更で、変更前の画像が表示されない不具合を修正します。
sub face_before:
<th nowrap class=padding><img src=$set::mim_dir/$F{sx}$F{im} name=image class=image></th>
↓
<th nowrap class=padding><img src=$set::mim_dir/$I->{im} name=image class=image></th>
転職で、費用が足りなくても転職できる、また費用がイメージ画像の変更費になっている不具合を修正します。
sub jobchange_after:
$I = &get_user('I');
↓
$I = &get_user('I');
&say("お金が足りません",'CLOSE') if $I->{gl} < $set::jcm;
sub jobchange_after:
&change_status($I,'gl',-$set::fcp);
↓
&change_status($I,'gl',-$set::jcm);
不正なデータを送られるとCGIプログラムエラーになる不具合を修正します。
sub compose_after:
&error('Compose File Error') if !$F{fi} || $F{fi} =~ /[^a-z_]/;
↓
&error('Compose File Error') if !$F{fi} || $F{fi} =~ /[^a-z_]/ || ! -e "$set::itm_dir/$F{fi}.cgi";
直したつもりだったんだけど載せ忘れてた…
sub fishing:
my $backto;
↓
my $backto;
&error('Fishing File Error') if !$F{fl} || $F{fl} =~ /[^a-z_]/ || ! -e "$set::dat_dir/$F{fl}.cgi";
OpenWindowでリクエストが二重に送られる不具合を修正します。
ついでに全画面表示をスクリーンの有効範囲から判断するようにします。
javascriptとformで1回ずつリクエストが投げられているので、jsのほうは空のページを開くようにします。
追記:既に小窓が開かれている場合は空のページを開かずにそのまま表示するように、
また、javascriptオンのときはjavascriptのみで動作するようにしました。
URLが空の場合にabout:blankを開くようにしました。
w_size,h_sizeに0を指定するとscreen.availWidth,screen.availHeightが代入されるようにしました。
sub main:
print <<" END_OF_HTML";
:
:
:
END_OF_HTML
↓
print <<" END_OF_HTML";
<table class=basetable cellpadding=5 align=center>
<tr>
<td width=50%>
<div class=label>場所</div>
<table class=outertable border=1>
<tr>
<td class=padding><img id=I1 src=$set::mim_dir/$I->{Pl}{im}></td>
<td class=padding width=100%>
王国:<span id=kg>$I->{Kg}{nm}</span><br>
現在地:<span id=pl>$I->{Pl}{nm}</span><br>
<span id=pl2>$I->{Pl}{nm}</span>にいる人数:<span id=pp>$I->{Pp}</span>人 <br>
特徴:<span id=pr>$I->{Pl}{pr}</span>
</td>
</tr>
<tr><td class=padding colspan=2>
<span id=ev>$environment</span><img src=$set::mim_dir/envCh.gif title="教会">
<div class=r><input type=button class=button onClick="return OpenWindow('$set::htm_dir/environment.html','myrecord',400,600)" value="環境リスト"></div>
</td></tr>
</table>
<br>
<div class=label>コマンド</div>
<table class=outertable>
<tr>
<form method=post action=$set::cgi_url target=myrecord>
<td>
<input type=submit class=button onClick="return OpenWindow('','myrecord',600,600,this.form)" value="My Record">
<input type=hidden name=md value="myrecord">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form name=mapform method=post action=$set::cgi_url target=map>
<td>
<input type=submit class=button onClick="return OpenWindow('','map',500,400,this.form)" value="地図">
<input type=hidden name=md value="map">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=bag>
<td>
<input type=submit class=button onClick="return OpenWindow('','bag',350,500,this.form)" value="荷物">
<input type=hidden name=md value="bag">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=bag>
<td>
<input type=submit class=button onClick="return OpenWindow('','bag',350,500,this.form)" value="作成">
<input type=hidden name=md value="compose">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=pet>
<td>
<input type=submit class=button onClick="return OpenWindow('','pet',350,600,this.form)" value="$set::lab{pt}">
<input type=hidden name=md value="pet">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=guild>
<td>
<input type=submit class=button onClick="return OpenWindow('','guild',350,600,this.form)" value="$set::lab{gu}">
<input type=hidden name=md value="guild">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=quest>
<td>
<input type=submit class=button onClick="return OpenWindow('','quest',350,600,this.form)" value="$set::lab{qs}">
<input type=hidden name=md value="quest_before">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url>
<td width=100% class=r>
<input type=submit class=button value="ログアウト">
<input type=hidden name=md value="logout">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
</tr>
</table>
<table class=outertable border=1>
<tr><th>アクション</th><th>プレイヤーリスト</th><th>移動</th><th>探索</th></tr>
<tr>
<form action=$set::cgi_url method=post target=action>
<td nowrap>
<select name=md size=8 class=select>
<option value="contact_before" selected>プレイヤーに接触</option>
<option value="transfer_before">他の地へ移動</option>
<option value="words_before">自己紹介設定</option>
<option value="friends_before">フレンド設定</option>
<option value="orb_before">$set::orb{x}の設定</option>
<option value="bounty_before">$set::lab{rw}を懸ける</option>
<option value="option_before">戦闘補助アイテム</option>
$option_poem
$option_magic
<option value="color_before">文字色の設定</option>
<option value="stance_before">スタンスの設定</option>
<option value="ornament_before">武具を宝飾する</option>
<option value="levelup_before">レベルアップボーナス</option>
<option value="face_before">イメージ画像の変更</option>
<option value="backup_before">データのバックアップ</option>
<option value="jobchange_before">転職する</option>
<option value="delete_before">キャラクターを削除</option>
</select>
<input type=submit class=button onClick="return OpenWindow('','action',400,550,this.form)" value="$set::okb">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form name=playerlistform method=post action=$set::cgi_url target=playerlist>
<td nowrap>
<select name=or size=8 class=select>
<option value="Ft" selected>戦闘系</option>
<option value="Cz">生産系</option>
<option value="Bt">賞金首</option>
<option value="Ps">人口統計</option>
<option value="Si">販売情報</option>
<option value="Rk">ランキング</option>
</select>
<input type=submit class=button onClick="return OpenWindow('','playerlist',0,0,this.form)" value="$set::okb">
<input type=hidden name=md value="playerlist">
<input type=hidden name=pl value="$I->{pl}">
</td>
</form>
<form name=spotform method=post action=$set::cgi_url target=spot>
<td nowrap>
<select name=md size=8 class=select>$spotoption<option value=church_before>教会へ行く</option></select>
<input type=submit class=button onClick="return OpenWindow('','spot',400,500,this.form)" value="$set::okb">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form name=findform method=post action=$set::cgi_url target=find>
<td nowrap width=100% class=r>
<select name=do class=select>$do</select>
<input type=submit class=button onClick="return OpenWindow('','find',400,500,this.form)" value="$set::okb">
<input type=hidden name=md value="find">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
</tr>
</table>
<table class=outertable>
<tr>
<form method=post action=$set::cgi_url target=mailbox>
<td width=100% class=r>
<input type=submit class=button onClick="return OpenWindow('','mailbox',600,600,this.form)" value="手紙を読む">
<input type=hidden name=md value="mail_box">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
<form method=post action=$set::cgi_url target=mail>
<td>
<input type=submit class=button onClick="return OpenWindow('','mail',400,500,this.form)" value="手紙を書く">
<input type=hidden name=md value="mail_before">
<input type=hidden name=id value="$F{id}">
<input type=hidden name=ps value="$F{ps}">
</td>
</form>
</tr>
</table>
</td>
<td width=50%>
<div class=label>ステータス</div>
<table class=outertable border=1>
<tr>
<th nowrap class=padding><img name=I2 src=$set::mim_dir/$I->{im} class=image><br><span id=nm>$I->{nm}</span></th>
<td width=100% rowspan=2>
<table width=100%>
<tr>
<td class=padding width=40%>
$set::lab{sx}:<img src=$set::mim_dir/$I->{sx}.gif><br>
$set::lab{kg}:<img src=$set::mim_dir/flag$I->{kg}.gif title=$I->{Kg}{nm}><br>
$set::lab{jb}:<span id=jb>$I->{jb}</span><br>
$set::lab{lv}:<span id=lv>$I->{lv}</span><br>
$set::lab{ex}:<span id=ex>$I->{ex}</span><br>
$set::lab{gl}:<span id=gl>$I->{gl}</span> $set::mny<br>
$set::lab{rw}:<span id=rw>$I->{rw}</span> $set::mny<br>
$set::lab{da}:<span id=da>$I->{Da}</span><br>
$set::lab{ij}:<span id=ij>$I->{Ij}</span><br>
$set::lab{cd}:<span id=cd>$I->{Cd}{in}</span><br>
</td>
<td class=padding>
$set::eqp{rh}:<span id=rh>$I->{Rh}{Im}$I->{Rh}{nm}$I->{Rh}{Ef}</span><br>
$set::eqp{lh}:<span id=lh>$I->{Lh}{Im}$I->{Lh}{nm}$I->{Lh}{Ef}</span><br>
$set::eqp{sb}:<span id=sb>$I->{Sb}{Im}$I->{Sb}{nm}$I->{Sb}{Ef}</span><br>
$set::eqp{hd}:<span id=hd>$I->{Hd}{Im}$I->{Hd}{nm}$I->{Hd}{Ef}</span><br>
$set::eqp{bd}:<span id=bd>$I->{Bd}{Im}$I->{Bd}{nm}$I->{Bd}{Ef}</span><br>
$set::eqp{lg}:<span id=lg>$I->{Lg}{Im}$I->{Lg}{nm}$I->{Lg}{Ef}</span><br>
$set::eqp{nk}:<span id=nk>$I->{Nk}{Im}$I->{Nk}{nm}$I->{Nk}{Ef}</span><br>
$set::eqp{fg}:<span id=fg>$I->{Fg}{Im}$I->{Fg}{nm}$I->{Fg}{Ef}</span><br>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th><span id=pim>$I->{Co}{Im}</span><br><span id=pnm>$I->{Co}{nm}</span></th>
</tr>
</table>
<table class=outertable border=1>
<tr>
<td width=100>
<table>
<tr>
<td nowrap class=monospace>$set::lab{tc}</td>
<td nowrap class=r><span id=tc>$I->{tc}</span></td>
<td width=100%><span id=Gtc>$I->{Gtc}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{st}</td>
<td nowrap class=r><span id=st>$I->{st}</span></td>
<td width=100%><span id=Gst>$I->{Gst}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{dx}</td>
<td nowrap class=r><span id=dx>$I->{dx}</span></td>
<td width=100%><span id=Gdx>$I->{Gdx}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{in}</td>
<td nowrap class=r><span id=in>$I->{in}</span></td>
<td width=100%><span id=Gin>$I->{Gin}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{cn}</td>
<td nowrap class=r><span id=cn>$I->{cn}</span></td>
<td width=100%><span id=Gcn>$I->{Gcn}</span></td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td nowrap class=monospace>$set::lab{lf}</td>
<td nowrap class=r><span id=lf>$I->{lf}</span></td>
<td width=100%><span id=Glf class=gage>$I->{Glf}$I->{Xlf}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{vt}</td>
<td nowrap class=r><span id=vt>$I->{Vt}/$I->{Mvt}</span></td>
<td width=100%><span id=Gvt class=gage>$I->{Gvt}$I->{Xvt}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{hl}</td>
<td nowrap class=r><span id=hl>$I->{hl}</span></td>
<td width=100%><span id=Ghl class=gage>$I->{Ghl}$I->{Xhl}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{ap}</td>
<td nowrap class=r><span id=ap>$I->{ap}</span></td>
<td width=100%><span id=Gap class=gage>$I->{Gap}$I->{Xap}</span></td>
</tr>
<tr>
<td nowrap class=monospace>$set::lab{hy}</td>
<td nowrap class=r><span id=hy>$I->{hy}</span></td>
<td width=100%><span id=Ghy class=gage>$I->{Ghy}$I->{Xhy}</span></td>
</tr>
</table>
</td>
</tr>
</table>
<table class=outertable>
<tr>
<td width=33%>
<a class=back href=$set::htm_dir/manual/ target=_blank>マニュアル</a><br>
<a class=back href=$set::htm_dir/kingdom.html target=_blank>国一覧表\</a><br>
</td>
<td width=33%>
</td>
<td width=33%>
</td>
</tr>
</table>
</td>
</tr>
</table>
<div class=inform><div id=newmail></div><div id=newrecord></div><div id=revive></div></div>
END_OF_HTML
OpenWindowをいじっただけなんですが、修正がややこしいので置き換えで。
sub church_before:
<input type=button class=button onClick="OpenWindow('$set::cem_htm','cemetery',1024,768)" value="$set::lab{pt}墓地">
↓
<input type=button class=button onClick="return OpenWindow('$set::cem_htm','cemetery',0,0)" value="$set::lab{pt}墓地">
sub partner_talk:
<input type=submit class=button onClick="OpenWindow('$set::cgi_url','partner',300,500)" value="$U->{nm}のステータス">
↓
<input type=submit class=button onClick="return OpenWindow('','partner',300,500,this.form)" value="$U->{nm}のステータス">
function OpenWindow(url,name,w_size,h_size,self){
if (typeof sos3 == "undefined")
sos3 = opener && typeof opener.sos3 != "undefined" ? opener.sos3 : { window:{} };
if (!self || !sos3.window[name] || sos3.window[name].closed) {
if (!url) url = "about:blank";
if (!w_size) w_size = screen.availWidth;
if (!h_size) h_size = screen.availHeight;
option = "scrollbars=yes,resizable=yes,width=" + w_size + ",height=" + h_size;
sos3.window[name] = window.open(url,name,option);
if (opener) opener.sos3 = sos3;
}
if (self) self.submit();
return false;
}
上記に置き換え。
selfがない・小窓が開かれたことがない・小窓が閉じられている場合に小窓を開きます。
selfにはフォーム自身が入り、selfがある場合にはsubmitされます。
OpenWindowが実行されたときはHTMLのsubmitボタンは動作しません。
インフォメーション作成で文字実体参照が使えるように(問題が起こりそうなのでやらないほうがいいかも)
sub edit_information:
$t1 =~ s/<br>/\n/g;
↓
$t1 =~ s/<br>/\n/g;
$t1 =~ s/&/&/g;
sub make_information:
$F{in} =~ s/</</g;
$F{in} =~ s/>/>/g;
↓
$F{in} =~ s/</</g;
$F{in} =~ s/>/>/g;
$F{in} =~ s/&/&/g;
sub decode:
$V =~ s/</</g;
$V =~ s/>/>/g;
↓
$V =~ s/&/&/g;
$V =~ s/</</g;
$V =~ s/>/>/g;
sub rights:
print qq|<a href="#" onClick="GetView('creators')">$creators_label</a>\n| if !$set::stv;
↓
print qq|<a href="#" onClick="GetView('creators');return false">$creators_label</a>\n| if !$set::stv;
sub login_check: my $T = shift; # true -> return true, false -> error ↓ my $T = shift; # mode -> say, true -> return true, false -> error
sub login_check:
if ($T) { return 1 }
↓
if ($T =~ /\D/) { &say("$S->{nm}は現在ログイン中です",$T) }
if ($T) { return 1 }
sub bounty_after:
&login_check($U);
↓
&login_check($U,'bounty_before');
sub buy_before:
&login_check($U);
↓
&login_check($U,'contact_before');
sub buy_after:
&login_check($U);
↓
&login_check($U,'contact_before');
sub contact_after:
&login_check($U);
↓
&login_check($U,'contact_before');
sub cure_before:
&login_check($U);
↓
&login_check($U,'contact_before');
sub cure_after:
&login_check($U);
↓
&login_check($U,'contact_before');
sub destone:
&login_check($U);
↓
&login_check($U,'contact_before');
sub fight_player:
&login_check($U);
↓
&login_check($U,'contact_before');
sub trade_before:
&login_check($U);
↓
&login_check($U,'contact_before');
sub trade_after:
&login_check($U);
↓
&login_check($U,'contact_before');
sub find:
&found($I,"monster_$I->{pl}",$set::fvt,'探索','つ手に入れました',0,'monster');
↓
&found($I,"monster_$I->{pl}",$set::fvt,'探索','つ手に入れました',1,'monster');
sub find:
&reload_data('gl') if !$I->{Pl}{ev}{Ms};
↓
&reload_data('gl');
# Sub Farm Before # ↓ require "$set::lib_dir/status.cgi"; # Sub Farm Before #
sub farm_before:
&dead_check($I,'CLOSE');
↓
&dead_check($I,'CLOSE');
&get_appearance($I);
sub farm_after:
$I = &get_user('I');
↓
$I = &get_user('I');
&get_appearance($I);
sub trade_before:
my $checked;
と
$checked = ' checked';
と
$checked = '';
を全て削除
sub trade_before:
$t1 .= qq|<input type=radio name=Iob class=radio value="$_"$checked> |;
↓
$t1 .= "<input type=checkbox name=I$_ class=checkbox> ";
$t1 .= "<input type=text size=2 name=tI$_ class=textbox value=1> ";
sub trade_before:
$t2 .= qq|<input type=radio name=Uob class=radio value="$_"$checked> |;
↓
$t2 .= "<input type=checkbox name=U$_ class=checkbox> ";
$t2 .= "<input type=text size=2 name=tU$_ class=textbox value=1> ";
sub trade_before:
<tt>それぞれトレードする$set::orb{x}を選択してください。</tt><br>
↓
<tt>それぞれトレードする$set::orb{x}にチェックを入れ、個数をあわせて$set::okbボタンを押してしてください。</tt><br>
sub trade_after:
sub trade_after {
↓
sub trade_after {
my ($t1,$t2);
my ($Itc,$Utc,$count);
sub trade_after:
unless ($I->{ob} =~ s/$F{Iob}// || $I->{ob} =~ s/$F{Iob}//i) { &say('トレードに失敗しました','trade_before') }
else { @{$I->{Ob}} = split(//,$I->{ob}.uc($F{Uob})) }
&set_orb($I);
unless ($U->{ob} =~ s/$F{Uob}//) { &say('トレードに失敗しました','trade_before') }
else { @{$U->{Ob}} = split(//,$U->{ob}.uc($F{Iob})) }
&set_orb($U);
↓
foreach ('a' .. 'l') {
$count = 0;
while ($F{"I$_"} && $count < $F{"tI$_"}) {
$I->{ob} =~ s/$_// || $I->{ob} =~ s/$_//i || &say("$U->{nm}に渡す$set::orb{$_}$set::orb{x}が足りません",'trade_before');
$t1 .= &orb_image($_);
$U->{ob} .= uc($_);
$Itc++;
$count++;
}
$count = 0;
while ($F{"U$_"} && $count < $F{"tU$_"}) {
$U->{ob} =~ s/$_// || &say("$I->{nm}に渡す$set::orb{$_}$set::orb{x}が足りません",'trade_before');
$t2 .= &orb_image($_);
$I->{ob} .= uc($_);
$Utc++;
$count++;
}
}
&say("トレードする$set::orb{x}の数が一致しません",'trade_before') if $Itc != $Utc;
@{$I->{Ob}} = split(//,$I->{ob});
@{$U->{Ob}} = split(//,$U->{ob});
&set_orb($I);
&set_orb($U);
sub trade_after:
lc $F{Iob};
lc $F{Uob};
&set_record("$I->{nm}が$set::orb{$F{Iob}}$set::orb{x}を$U->{nm}の$set::orb{$F{Uob}}$set::orb{x}とトレードしました。");
&get_words($U);
&partner('',"$set::orb{x}をトレードしました");
↓
&set_record("$I->{nm}が$set::orb{x}のトレードに来ました。<br>\n$t1:$I->{nm}の出した$set::orb{x}<br>\n$t2:$U->{nm}の出した$set::orb{x}");
&get_words($U);
&partner($U->{w10},"$set::orb{x}をトレードしました。<br>\n$t1:$I->{nm}の出した$set::orb{x}<br>\n$t2:$U->{nm}の出した$set::orb{x}");
# 合成 Compose ####################################### # $dex = 2; # ダブルロールに成功したときは獲得経験値をn倍にする
sub compose_after:
&double_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} =~ /(Fd|Mt)/;
↓
&double_roll($I,$Ui->{dt}) if $Ui->{dt}{cl} =~ /(Fd|Mt)/;
$Ui->{ex} = int($Ui->{ex} * $set::dex) if $I->{DB};
sub double_roll:
$Si->{qn} *= $set::ddu;
↓
$Si->{qn} *= $set::ddu;
$S->{DB} = 1;
応用でエクセレントロールのときも出来ますね。
グレード2以上のアイテムを「木の板:G2」のように表示します。
色分けされていても分かりにくい時にやってみてください。
sub decorate_item:
$V = $Si->{Nm} ? $Si->{Nm} : $Si->{nm};
↓
$V = $Si->{Nm} ? $Si->{Nm} : $Si->{nm};
$V .= ":G$Si->{gd}" if $Si->{gd} > 1;
鉱山やダンジョンで使用する灯りを補助装備として持てるようにします。
これによりダンジョンで両手装備を主装備として装備できるようになるなど、装備選択の幅が広がります。
そのかわり、両手装備をはじかれたときはロウソクで戦う羽目に…(ロウソクは素手扱い)
'Candle_mk' => {
nm => 'ロウソク',
cl => 'Tl',
id => 'Candle_mk',
ql => 'Lh,Li,Dk,Ns',
↓
'Candle_mk' => {
nm => 'ロウソク',
cl => 'Tl',
id => 'Candle_mk',
ql => 'Lh,Sb,Li,Dk,Ns',
カンテラがある場合は同様に'Sb'を追加。
sub break_check:
$e = 'sb' if $F && !$S->{Rh}{ql}{$F};
$E = ucfirst $e;
↓
$E = ucfirst $e;
($e,$E) = ('sb','Sb') if $F && !$S->{$E}{ql}{$F};
sub enter_check:
$F = 1 if $I->{$E}{ql}{Li};
↓
($F = 1) && last if $I->{$E}{ql}{Li};
sub enter_check:
&set_item($I) if &break_check($I,'lh');
↓
&set_item($I) if &break_check($I,$e);
sub mine_after:
&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};
↓
$Y = $I->{Lh}{ql}{Li} ? 'Lh' : $I->{Sb}{ql}{Li} ? 'Sb' : 0;
&say("明かりを灯すアイテムを装備していません",'CLOSE') if !$Y;
&say("$I->{$Y}{Im}$I->{$Y}{nm}の耐久力は残り$I->{$Y}{db}です",'mine_before') if $I->{$Y}{db} < $F{do};
sub enter_check:
&break_check($I,'lh',$F{do});
↓
&break_check($I,'lh',$F{do},'Li');
一定期間対人戦を仕掛けていないプレイヤーは賞金首でもガードに守られるようにしてみる。
戦闘の意思のない一般市民に報奨金を懸けることで賞金首にし、街中で虐殺できてしまうので
その対策として対人戦を仕掛けていないプレイヤーは賞金首でもガードに守られるようにしてみます。
# 賞金首 Bounty ###################################### # $bod = 7; # n日間対人戦を仕掛けていないとガードに守られるようにする(yes=日,no=0)
sub fight_player:
&partner('',"<img src=$set::mim_dir/envGd.gif><br><br>$I->{Pl}{nm}での戦闘は禁止されています") if $I->{Pl}{ev}{Gd} && !$U->{vp} && $U->{rw} < $set::sps;
↓
$U->{en} =~ s/^(\d+),//;
$U->{FT} = $1 ? $1 : 0;
&partner('',"<img src=$set::mim_dir/envGd.gif><br><br>$I->{Pl}{nm}での戦闘は禁止されています") if $I->{Pl}{ev}{Gd} && !$U->{vp} && ($U->{rw} < $set::sps || time - $U->{FT} > $set::bod * 3600 * 24);
sub fight_player:
# 自分を最近戦った相手に追加 #
pop(@Uen) if @Uen >= $set::elx;
$U->{en} = join(',',"$I->{id}:".time,@Uen);
↓
# 自分の戦闘履歴を作成 #
$I->{en} = join(',',time,($I->{en} =~ /^[^,]*,(.*)/)[0]);
# 自分を最近戦った相手に追加 #
pop(@Uen) if @Uen >= $set::elx;
$U->{en} = join(',',$U->{FT},"$I->{id}:".time,@Uen);
sub contact_before:
$U->{Li} = &login_check($U,1) ? '○':
$U->{rw} >= $set::sps ? '▼':
↓
$U->{Bo} = $U->{rw} >= $set::sps && (!$I->{Pl}{ev}{Gd} || time - (split /,/,$U->{en})[0] <= $set::bod * 3600 * 24) ? 1 : 0;
$U->{Li} = &login_check($U,1) ? '○':
$U->{Bo} ? '▼':
sub partner_status:
$U->{rw} = "<span class=alert>$U->{rw}</span>" if $U->{rw} >= $set::sps;
↓
$U->{rw} = "<span class=alert>$U->{rw}</span>" if $U->{rw} >= $set::sps && (!$U->{Pl}{ev}{Gd} || time - (split /,/,$U->{en})[0] <= $set::bod * 3600 * 24);
sub playerlist:
&get_resident($I);
↓
&get_place($I);
&get_resident($I);
sub playerlist:
next if $F{or} eq 'Bt' && $U->{rw} < $set::sps;
$U->{Li} = &login_check($U,1) ? '○':
$U->{rw} >= $set::sps ? '▼':
↓
next if $F{or} eq 'Bt' && $U->{rw} < $set::sps;
$U->{Bo} = $U->{rw} >= $set::sps && (!$I->{Pl}{ev}{Gd} || time - (split /,/,$U->{en})[0] <= $set::bod * 3600 * 24) ? 1 : 0;
$U->{Li} = &login_check($U,1) ? '○':
$U->{Bo} ? '▼':
両手装備のアイテムを補助に装備しているときでも左手にアイテムを装備出来るようにしてみる。
左手装備と同時に両手装備を補助に装備できるようにします。
戦闘中、主装備から補助装備に持ち替える時は怪力スキルがない場合は左手装備をしまうようになります。
sub fitting_room:
elsif ($Si->{Ql}{Dh} && !$I->{Sk}{Hs} && &equip_check('lh','O')) {
↓
elsif (!$F{sb} && $Si->{Ql}{Dh} && !$I->{Sk}{Hs} && &equip_check('lh','O')) {
sub equip_check:
elsif ($T eq 'D' && ($I->{rh} || $I->{sb})) {
↓
elsif ($T eq 'D' && $I->{$E}) {
sub equip_check:
&get_equipment($I,'sb');
と
elsif ($I->{Sb}{ql}{Dh}) { return 1 }
を削除
sub change_weapon:
$S->{WO} = 5; # 5 = 副装備ON
%{$S->{Rh}} = %{$S->{Sb}};
&M("$S->{Nm}は$S->{Rh}{nm}を取り出した。");
↓
$S->{WO} = 5; # 5 = 副装備ON
%{$S->{Rh}} = %{$S->{Sb}};
if ($S->{Rh}{ql}{Dh} && $S->{Lh}{nm} && !$S->{Sk}{Hs}) {
&M("$S->{Nm}は$S->{Lh}{nm}を仕舞い$S->{Rh}{nm}を取り出した。");
undef $S->{SH} if $S->{Lh}{cl} eq 'Sh';
undef %{$S->{Lh}};
}
else {
&M("$S->{Nm}は$S->{Rh}{nm}を取り出した。");
}
全てのプレイヤーに需要のありそうな財産権利書を先頭に持っていき、戦闘職にあまり縁のない販売権利書をその次に移動します。
sub castle_before:
<input type=radio class=radio name=tp value=Dd1 checked> 販売権利書を購入する・・・$V1 $set::mny<br>
<input type=radio class=radio name=tp value=Dd2> 財産権利書を購入する・・・$V2 $set::mny<br>
↓
<input type=radio class=radio name=tp value=Dd2 checked> 財産権利書を購入する・・・$V2 $set::mny<br>
<input type=radio class=radio name=tp value=Dd1> 販売権利書を購入する・・・$V1 $set::mny<br>
使いやすい並びを模索。
全ての街の 'ev' を
の順に並べ替え
sub feed_before:
$t1 .= "<input type=checkbox name=$i class=checkbox> ";
$t1 .= &decorate_item($Ii);
↓
$t1 .= qq|<tr>\n<td>\n|;
$t1 .= qq|<input type=checkbox name=$i class=checkbox> |;
$t1 .= &decorate_item($Ii);
$t1 .= qq|</td>\n<td class=r>|;
$t1 .= qq|<input type=textbox name=t$i class=textbox size=5 value=$Ii->{qn}>|;
$t1 .= qq|</td>\n</tr>\n|;
sub feed_before:
$t2 = &item_image($Ip)."$Ip->{Nm}<br>\n<br>\n";
↓
$t2 = &item_image($Ip)."$Ip->{Nm}<br>\n";
sub feed_before:
$t2
$t1
↓
$t2
<table class=item>
<tr class=first>
<td colspan=2 class=r>与える個数</td>
</tr>
$t1
</table>
sub feed_after:
next if !$F{$i};
&say('Item Select Error','CLOSE') if !&favorite_check($Ip,$Ii);
↓
next if !$F{$i};
next if $F{"t$i"} <= 0;
&say('Item Select Error','CLOSE') if !&favorite_check($Ip,$Ii);
&say("$Ii->{nm}:数値以外は使用出来ません。",'pet') if $F{"t$i"} =~ /\D/;
$F{"t$i"} = $Ii->{qn} if $F{"t$i"} > $Ii->{qn};
sub feed_after:
$energy += int($Ii->{Ef} * $Ii->{qn});
↓
$energy += int($Ii->{Ef} * $F{"t$i"});
sub feed_after:
&M("$Ip->{Nm}に$Ii->{nm}をあげました。");
&change_status($Ip,'lf',$Ii->{Ef},1,$Ip->{lx}) if $Ip->{lf} < $Ip->{lx};
&change_status($I,'bg',-($Ii->{wt} * $Ii->{qn}));
$Ii->{qn} = 0;
↓
&M("$Ip->{Nm}に$Ii->{nm}を".$F{"t$i"}."個あげました。");
&change_status($Ip,'lf',$Ii->{Ef},1,$Ip->{lx}) if $Ip->{lf} < $Ip->{lx};
&change_status($I,'bg',-($Ii->{wt} * $F{"t$i"}));
&change_status($Ii,'qn',-$F{"t$i"});
オーブ設定の「一個ずつ残してそれ以外はトレード」で個数指定できるようにしてみる。
sub orb_before:
<input type=checkbox name=ta> 一個ずつ残してそれ以外はトレード<br>
↓
<input type=checkbox name=ta> <input type=text size=2 name=tb class=textbox value=1> 個ずつ残してそれ以外はトレード<br>
sub orb_after:
my %unique;
↓
my %unique;
&say("数値以外使用できません",'orb_before') if $F{ta} && $F{tb} =~ /[^\d]/;
sub orb_after:
$F{$_} = 0 if $F{ta} && !$unique{$_}++;
↓
$F{$_} = 0 if $F{ta} && $unique{$_}++ < $F{tb};
ペットのおなかの状態がMAXのときに「満腹」の表示になるようにしてみる。
おなかの状態が80%以上で満腹の表示だったのを、100%で満腹の表示になるようにします。
これにより、80〜100%の区分の表示が「充分」になります。
# Pet's Stomach #
@PS = ('餓死',
'飢餓',
'空腹',
'普通',
'八分',
'満腹',
'不要',
);
↓
# Pet's Stomach #
@PS = ('餓死',
'飢餓',
'空腹',
'普通',
'八分',
'充分',
'満腹',
'不要',
);
sub pet:
$stomach = int(($Ip->{hg} - 1) / $Ip->{hx} * 5) + 1;
↓
$stomach = int($Ip->{hg} / $Ip->{hx} * 5) + 1;