cookbook|||2001/09/19/Wed|||16:16:38|||aaqPiZY5xR5l.|||その他|||ポロポロ|||iet_hot@hotmail.com||||||http://|||10|||インポート、エクスポートの制限(インポート、エクスポート処理の独自化)|||config.cgiに下記を追加
#インポート、エクスポートの独自設定
# インポート、エクスポートを独自に設定する場合は
# $CRYPT_STRに英字2文字をセットしてください。
#
# 標準設定は'eb'です。
$CRYPT_STR = 'ty';
ebs_sub6.cgiを変更
289行目
$pass3=crypt "$pass3",eb; → $pass3=crypt "$pass3",$CRYPT_STR;
291行目
$pass4=crypt "$pass4",eb; → $pass4=crypt "$pass4",$CRYPT_STR;
293行目
$pass5=crypt "$pass5",eb; → $pass5=crypt "$pass5",$CRYPT_STR;
421行目
&ERROR('復元に失敗しました。') if crypt ("$pass1",eb) ne "$pass[5]" || crypt("$pass2",eb) ne "$pass[12]" || crypt("$pass3",eb) ne "$pass[14]";
↓
&ERROR('復元に失敗しました。') if crypt ("$pass1",$CRYPT_STR) ne "$pass[5]" || crypt("$pass2",$CRYPT_STR) ne "$pass[12]" || crypt("$pass3",$CRYPT_STR) ne "$pass[14]";
### 補足説明 ###
$CRYPT_STRに'eb'をセットすれば標準のEBからの移転も可能になります。
複数サイト間でデータ移転する場合は各サイトの$CRYPT_STRの値を
同じにしてください。
||||||インポート、エクスポートを変更して標準のEBのサイトからは移転
ができないようにしました。エクスポートしたデータも標準のEBサイト
へは移転できません。(移転可能の設定も可能)|||end|||
cookbook|||2001/09/20/Thu|||21:05:26|||aa9Q79cjHPd6Y|||バランス|||すいかパン|||suikapan@prince.co.jp|||すいかパン工場|||http://hccweb1.bai.ne.jp/suikapan/index.html|||10|||回復量を%指定|||config.cgiの各種設定あたりに次の1行を追加
$HP_REPAIR2 = '0.1'; #1秒間でのHP回復量(最大HPに対するパーセンテージ)
ebs_sub1.cgiの87行目
$$REPType[15]+=int(($DATE-$DatHp)*$HP_REPAIR);
↓
$$REPType[15]+=int(($DATE-$DatHp)*($HP_REPAIR+$$REPType[16]*$HP_REPAIR2*0.01));
bs_sub2.cgiの108行目
print "<tr><td nowrap bgcolor=#606060>HP回復</td><td nowrap align=right><b>$HP_REPAIR/秒</b></td>";
↓
print "<tr><td nowrap bgcolor=#606060>HP回復</td><td nowrap align=right><b>$HP_REPAIR+$HP_REPAIR2%/秒</b></td>";
ebs_sub3.cgiの177行目
if (h < $PL_VALUES[16]){h = $PL_VALUES[15] + sasi*$HP_REPAIR;}else{h = $PL_VALUES[16];}
↓
if (h < $PL_VALUES[16]){h = $PL_VALUES[15] + sasi*($HP_REPAIR+$PL_VALUES[16]*$HP_REPAIR2*0.01);}else{h = $PL_VALUES[16];}
ebs_sub5.cgiの248行目
$Y_HP[0]=$Y_HP[0]+(time-$Y_HP[2])*$HP_REPAIR*2;$Y_HP[0]=$Y_HP[1] if $Y_HP[0] > $Y_HP[1];
↓
$Y_HP[0]=$Y_HP[0]+(time-$Y_HP[2])*($HP_REPAIR*2+$Y_HP[1]*$HP_REPAIR2*0.01);$Y_HP[0]=$Y_HP[1] if $Y_HP[0] > $Y_HP[1];
回復量を%指定すると
要塞回復量にもこの方程式が適用されます。
要塞の回復が早すぎるなら、
config.cgiの各種設定に追加
$HP_REPAIR_Y = '20'; #要塞の1秒間でのHP回復量
ebs_sub5.cgiの248行目
$Y_HP[0]=$Y_HP[0]+(time-$Y_HP[2])*($HP_REPAIR*2+$Y_HP[1]*$HP_REPAIR2*0.01);$Y_HP[0]=$Y_HP[1] if $Y_HP[0] > $Y_HP[1];
↓
$Y_HP[0]=$Y_HP[0]+(time-$Y_HP[2])*$HP_REPAIR_Y;$Y_HP[0]=$Y_HP[1] if $Y_HP[0] > $Y_HP[1];
||||||HPの回復量を、
最大HPに対する%にするものです。
これにより、HP回復待ち時間の公平化が出来ます。
しかし、
%指定だけだと回復時間が一定になるため、
低HPプレーヤーが不利、高HPプレーヤーが有利になります。
以上の理由から
(標準回復量)+(最大HP×%)
としています。
(回復時間)=(最大HP)/((標準回復量)+(最大HP×%)) 単位[sec]
この方程式は、HPが増加すると一定の時間に収束します。
エクセル等でグラフ化してみて、調節すると面白いです。
0.1%で回復時間15分程度だったと思う。
10+0.1%ぐらいがベストかと思います。|||end|||
cookbook|||2001/09/26/Wed|||06:46:52|||aazehXz3TzVyI|||その他|||ARMS|||d-kei@edogawa.home.ne.jp||||||http://|||10|||cookie無効設定時の新規登録を無効にする(小ネタ)|||eb_sub.cgiを開く
↓
sub ENTRY2の中で、新規登録画面の上部にあたる部分
<b style=font-size:20pt>新規登録</b>
</td></tr><tr><td align=center
この下あたりにでも以下のスクリプトを貼り付ける。
<Script Language=javascript>
<!--/* 『<!--』と下にある『-->』は削除しないで。*/
var cookieCheck=false
if(navigator["cookieEnabled"]){cookieCheck=navigator.cookieEnabled
}else{ document.cookie="testcookie"
cookieCheck=(document.cookie.indexOf("testcookie")!=-1)}
//↑調べる
//↓結果
if(cookieCheck){
/*ここはcookieがonになっている場合に表示するところデス
document.write("ガードするフォームタグ");
↑こんな感じで囲んでください。
タグでWクォーテーションを使う場合は、
document.write('<src="???">');のようにシングルで囲む。
*/
//下のようにフォームタグを囲んでしまおう。
//エンターキーでも動作しませんので。
document.write("<form action=$MAIN_SCRIPT method=POST name=entry>");
document.write("<input type=hidden name=cmd value=KAKUNIN>");
document.write('<img src=\"$IMG_FOLDER2/1.jpg\" width=48 height=32 name=\"msImg\">');
/*こっから下はcookieが無効の場合に表示するものです。
使わない場合は}else{から次の{までを削除して構わないデス*/
}else{
document.write("<b style=color:red>cookie無効設定で何するねん!</b>")
}
//-->
</Script>
以上デスが、スクリプトは必ず<!--〜-->で囲んでください。
常識ですが、半角に直す事!
それと、些細な美観の為に登録ボタンも隠したい場合は、
<Script><!--
if(cookieCheck){
document.write('<input type=submit value=登録 id=a onClick="return checkRiyou()"> <input type=reset value=リセット id="a">')
//-->
</Script>
# ↑のように結果のみでオッケーデス。
# 画面に入った時点で弾くほうがスマートに仕上がりますが、その辺は# 個人の自由で改造してみてください。
# JavaScript無効の設定の場合も登録はできません。
# 使う場合はコメント『//コメント』『/*コメント*/』は削除する。
# ウチでは正常に作動してます。||||||cookie無効設定にすれば1人で簡単に複数のユニットを作ることができます。そういったイタズラを簡単なJavaScriptで弾いちゃいませう。
但し、cookieの情報を削除されてからの場合は意味が無いので、子供だましの機能です(爆)|||end|||
cookbook|||2001/09/29/Sat|||21:54:34|||aaqPiZY5xR5l.|||戦闘|||ポロポロ|||iet_hot@hotmail.com||||||http://|||10|||各武器にランクアップのレベル設定&お金でランクアップ(10/15 修正)|||ebs_sub3.cgiの284〜286行目の3行を削除し、下記を削除位置に追加
/^ランクアップ$/ && do{my($wk,$wl) = split(/!/,$PL_VALUES[9]);
my@www=split(/\,/,$WEAPON_LIST{"$FORM{'wname'}"});my$wlv_a=int $wl/$WEAPON_LVUP;
if ($FORM{'wname'} =~ m/^$wk/){
if (($www[10] ? ($wlv_a >= $www[10] && $www[10] > -1):$wlv_a >= $WEAPON_RANKUP)){$PL_VALUES[9]="$FORM{'wname'}!0";}
elsif($www[9] >= 1){$PL_VALUES[9]="$FORM{'wname'}!0";$PL_VALUES[8]-=$www[9];}
}
last CUSTOM;};
ebs_sub5.cgiの39〜58行目を削除し、下記を削除位置に追加
print << "__SCRIPT_END__";
<script language="JavaScript">
<!--
function checkRnkup (){
kin=document.Ms.kin.value;
ulv=document.Ms.ulv.value;
msg = '';
if($WLV_A < ulv || ulv == -1){ msg = '\$' + kin + 'で'};
msg += '武器をランクアップさせます。よろしいですか?';
if (confirm(msg) == true){return true;}else{return false}
}
//-->
</script>
__SCRIPT_END__
while (my ($key,$val) = each %WEAPON_LIST){
if (substr($key,0,length($WN_A)) eq $WN_A && length($key) == length($WN_A)+1){
my @UpW = split(/\,/,$val);
if(($UpW[10] ? ($WLV_A >= $UpW[10] && $UpW[10] > -1):$WLV_A >= $WEAPON_RANKUP) || ($UpW[9] <= $PL_VALUES[8] && $UpW[9] >= 1)){
my $UpView = '(';$UpView .= 'LV' . ($UpW[10] ? $UpW[10]:$WEAPON_RANKUP) if $UpW[10] > -1;
$UpView .= ', ' if $UpW[9] >= 1 && $UpView ne '(';$UpView .= '$' . $UpW[9] if $UpW[9] >= 1;$UpView .= ')';
$WeCH++;
print "<input type=hidden name=kin value=$UpW[9]>\n" if $WeCH ==1;
print "<input type=hidden name=ulv value=$UpW[10]>\n" if $WeCH ==1;
print "<tr><td $BgColor><b>ランクアップ</b><br>\n" if $WeCH ==1;
print "<table style=\"font-size:9pt;\"><tr><td $BgColor> \n";
print "$Pl_WeaponNameA\n" if $WeCH ==1;
print "<font color=\"000000\">$Pl_WeaponNameA</font>\n" if $WeCH !=1;
print "</td><td $BgColor><font color=#1e90ff><b>⇒</b></font>\n";
print "<input type=radio name=wname value=$key onClick=\"document.Ms.kin.value = '$UpW[9]'; document.Ms.ulv.value = '" . ($UpW[10] ? $UpW[10]:$WEAPON_RANKUP) . "';\"";
print " checked" if $WeCH ==1;
print ">$UpW[0] $UpView</td><td $BgColor>\n";
print "<input name=\"Cmode\" type=submit value=ランクアップ $STYLE_B1" if $WeCH ==1;
print "onClick=\"return checkRnkup()\">\n" if $WeCH ==1;
print "</td></tr></table>\n";
}
}
}
あとはlogディレクトリの_hash.dataの武器設定を変更すればいいだけです。
入手確立の後ろにランクアップに必要な金額、その次に必要なレベルを記述してください。
設定したどちらかの条件を満たしていればランクアップが可能になります。
どちらの条件も満たしているときはレベルでのランクアップとなり、
お金は減りません。
武器データの形式は下記のようになります。
"武器ID"=>"武器名称,攻撃力,命中率,攻撃回数,消費EN,売価,入手方法,特殊効果,入手確率,ランクアップに必要な金額,ランクアップに必要なレベル",
ランクアップに必要な金額の値が0または未入力の場合はお金でのランクアップが出来ない設定になります。
ランクアップに必要なレベルの値が0または未入力の場合はconfig.cgiの$WEAPON_RANKUPに設定したレベルでランクアップができるようになります。
また、ランクアップに必要なレベルの値が-1の場合はレベルでのランクアップができないようになります。
例)ビームナギナタからメガビームナギナタへのランクアップに必要な金額が10000で、ランクアップに必要なレベルが25の場合
"aa"=>"メガビームナギナタ,3000,65,2,50,10000,7,0,0,10000,25",
全部の武器データを修正するのがめんどくさい場合はそのままでもいいです。
そのままの場合は今までどおりのランクアップ方式になります。
それと、初期ランクの武器には設定を行っても意味はありません。(ランクアップの条件をランクアップ後の武器に設定するため)
||||||デフォルトではランクアップに必要なレベルが各武器一緒なので
武器毎にランクアップのレベルが設定できるようにしました。
それと、武器のランクアップがお金でもおこなえる改造も一緒に
入ってます。
もちろん、改造を入れても今までどおりのランクアップ形式も
可能です。
10/1 本文内の下の説明文を更新(コード修正はしてません)
10/15 1.ランクアップ時にランクアップ名の後ろにランクアップに
必要なレベルと金額を表示するように修正
2.ランクアップ実行時にお金を使用する場合、
メッセージ表示に金額を表示するように修正
|||end|||
cookbook|||2001/10/01/Mon|||18:33:15|||aaqPiZY5xR5l.|||武器|||ポロポロ|||iet_hot@hotmail.com||||||http://|||10|||予備武器数を変更する(10/14 修正)|||ebs_sub3.cgiに下記の修正を行います。
15行目の下に下記の行を追加
&DBM_CONVERT('YOBI',"$FORM{pname}") if !$FORM{'Cmode'};
49、50行目を下記の行と置き換える
local($WN_A,$WLV_A) = split(/!/,$PL_VALUES[9]);
local(@WN_YOBI,@WLV_YOBI);
for(my $i = 0; $i < $WEAPON_MAX; $i++){
($WN_YOBI[$i],$WLV_YOBI[$i]) = split(/!/,$YOBIL_VALUES[$i]);
}
113、114行目を下記の行と置き換え
$WEP_A=$WLV_A%$WEAPON_LVUP; for(my $i = 0; $i < $WEAPON_MAX; $i++){$WEP_YOBI[$i]=$WLV_YOBI[$i]%$WEAPON_LVUP;}
$WLV_A=int$WLV_A/$WEAPON_LVUP;for(my $i = 0; $i < $WEAPON_MAX; $i++){$WLV_YOBI[$i]=int$WLV_YOBI[$i]/$WEAPON_LVUP;}
117〜120行目を下記の行と置き換え
for(my $i = 0; $i < $WEAPON_MAX; $i++){$WN_sLIST[$i]=[];
@{$WN_sLIST[$i]}=split(/\,/,$WEAPON_LIST{"$WN_YOBI[$i]"});print' 予備 <b>'.${$WN_sLIST[$i]}[0].'</b>';
print " Lv.$WLV_YOBI[$i]/exp.$WEP_YOBI[$i]" if ${$WN_sLIST[$i]}[0];print "<br>";
}
268行目の下に下記の行を追加
&DBM_CONVERT('YOBI',"$FORM{pname}");
279から283行目を下記の行と置き換え
/^売却$/ && do{
$SW=$YOBIL_VALUES[int$FORM{'sellw'}-1];
my($wk,$wl)= split(/!/,$SW);my@www=split(/\,/,$WEAPON_LIST{"$wk"});
if($YOBIL_VALUES[int$FORM{'sellw'}-1]){$YOBIL_VALUES[int$FORM{'sellw'}-1]='';$PL_VALUES[8]+=int $www[5]/3;}
last CUSTOM;};
287〜295行目を下記の行と置き換え
/^装備$/ && do{
if($YOBIL_VALUES[int$FORM{'soubi'}-1]){
($PL_VALUES[9],$YOBIL_VALUES[int$FORM{'soubi'}-1])=($YOBIL_VALUES[int$FORM{'soubi'}-1],$PL_VALUES[9]);
}
last CUSTOM;};
/^購入$/ && do{my @www=split(/\,/,$WEAPON_LIST{"$FORM{'buyw'}"});
if (!$PL_VALUES[5]){$www[5]=int ($www[5]*0.8);}$PL_VALUES[8]-=$www[5];
for(my $i = 0; $i < $WEAPON_MAX; $i++){
if(!$YOBIL_VALUES[$i]){$YOBIL_VALUES[$i]="$FORM{'buyw'}!0";last;}
}
last CUSTOM;};
366行目の下に下記の行を追加
if($flagp){dbmopen (%YOBIL,"$DBM_YOBI",0666);$YOBIL{"$FORM{'pname'}"}="@YOBIL_VALUES";dbmclose %YOBIL;}
ebs_sub4.cgiを修正
196行目の下に下記の行を追加
&DBM_CONVERT('YOBI',"$FORM{pname}");
451〜460行目を下記の行と置き換え
if (!$ResultBattle){
for(my$i=0; $i < $WEAPON_MAX; $i++){
if(!$YOBIL_VALUES[$i]){
my@al=keys %WEAPON_LIST;$alw=@al;
$alw=int rand($alw);$gw=@al[$alw];$gw='a' if !$gw;
@q=split(/\,/,$WEAPON_LIST{"$gw"});
if ($q[8] > rand(100)){
$YOBIL_VALUES[$i]=$gw;
print "<font color=\"#f7e957\">武器を獲得。</font><br>\n";
}
last;
}
}
}
502行目の下に下記の行を追加
dbmopen (%YOBIL,"$DBM_YOBI",0666);
$YOBIL{"$FORM{'pname'}"}="@YOBIL_VALUES";
dbmclose %YOBIL;
ebs_sub5.cgiを修正
17〜38行目を下記の行と置き換え
&LOCK;&DBM_CONVERT('P',"$FORM{pname}");&DBM_CONVERT('YOBI',"$FORM{pname}");&UNLOCK;
my$i=0;my$WEAPON_LIST_CHECK_FLG=0;
local($WN_A,$WLV_A) = split(/!/,$PL_VALUES[9]);
for($i = 0; $i < $WEAPON_MAX; $i++){
($WN_YOBI[$i],$WLV_YOBI[$i]) = split(/!/,$YOBIL_VALUES[$i]);
}
@WN_sA=split(/\,/,$WEAPON_LIST{"$WN_A"});
for($i = 0; $i < $WEAPON_MAX; $i++){$WN_sLIST[$i]=[];
@{$WN_sLIST[$i]}=split(/\,/,$WEAPON_LIST{"$WN_YOBI[$i]"});
}
$WLV_A=int $WLV_A/$WEAPON_LVUP;
for($i = 0; $i < $WEAPON_MAX; $i++){$WLV_YOBI[$i]=int$WLV_YOBI[$i]/$WEAPON_LVUP;}
$Pl_WeaponNameA="$WN_sA[0](Lv$WLV_A)";
for($i = 0; $i < $WEAPON_MAX; $i++){$Pl_WeaponNameYobi[$i]="${$WN_sLIST[$i]}[0](Lv$WLV_YOBI[$i])";}
for($i = 0; $i < $WEAPON_MAX; $i++){
if(${$WN_sLIST[$i]}[0]){
$WEAPON_LIST_CHECK_FLG=1;
$PartofW_2.="<option value=".($i+1).">$Pl_WeaponNameYobi[$i]";
}
}
if($WEAPON_LIST_CHECK_FLG){
$PartofW="<select name=soubi $STYLE_L>";
$PartofW.=$PartofW_2;
$PartofW.="</select><input type=submit name=Cmode value=装備 $STYLE_B1 onClick=\"return checkEquip()\">";
&JScfm(checkEquip,"装備を変更します。よろしいですか?");
print "<tr><td $BgColor><b>装備変更</b><br>\n";
print " $Pl_WeaponNameA装備中<div align=right>$PartofW</div></td></tr>\n";
}
59〜71行目を下記の行と置き換え
$PartofSW="";
for($i = 0; $i < $WEAPON_MAX; $i++){
if(${$WN_sLIST[$i]}[0]){
$PartofSW.="<option value=".($i+1).">$Pl_WeaponNameYobi[$i]";
}
}
if($WEAPON_LIST_CHECK_FLG){
print "<SCRIPT language=\"JavaScript\">\nfunction checkMoney (){\n";
print "num=document.Ms.sellw.value;\n";
for($i = 0; $i < $WEAPON_MAX; $i++){
print "".($i == 0 ? 'if' : 'else if')."(num==".($i+1)."){var wn='$Pl_WeaponNameYobi[$i]';var mn='".int((${$WN_sLIST[$i]}[5])/3)."';}\n";
}
print "if (confirm(wn + 'を\$' + mn + 'で売却します') == true){\n";
print "window.location.replace(\"./dummy.html\");return true;}else{return false}\n";
print "}\n</script>\n<tr><td $BgColor><b>武器売却</b><div align=right><select name=sellw $STYLE_L>";
print "$PartofSW</select><input type=submit name=Cmode value=売却 ";
print "$STYLE_B1 onClick=\"return checkMoney()\"></div></td></tr>";
}
$WEAPON_LIST_CHECK_FLG=0;
for($i = 0; $i < $WEAPON_MAX; $i++){
if(!${$WN_sLIST[$i]}[0]){
$WEAPON_LIST_CHECK_FLG=1;
last;
}
}
if($WEAPON_LIST_CHECK_FLG){
89行目を下記の行と置き換え
$WEAPON_LIST_CHECK_FLG=0;
for($i = 0; $i < $WEAPON_MAX; $i++){
$WEAPON_LIST_CHECK_FLG=1 if !$YOBIL_VALUES[$i];
}
if ($WEAPON_LIST_CHECK_FLG && $Flag==0 && $WeCH ==0){
ebs_sub6.cgiを修正
4、210、272行目をそれぞれ下記の行と置き換え
dbmopen (%P,"$DBM_P",0666);dbmopen (%YOBI,"$DBM_YOBI",0666);
8行目を下記の行と置き換え
delete $P{"$Name"};delete $YOBI{"$Name"};
11、215、277行目をそれぞれ下記の行と置き換え
dbmclose %YOBI;dbmclose %P;
214行目の下に下記の行を追加
delete $YOBI{"$FORM{'pname'}"} if !$FlagE;
276行目を下記の行と置き換え
delete $P{"$FORM{'pname'}"};delete $YOBI{"$FORM{'pname'}"};
ebs_sub7.cgiを修正
310行目の下に下記の行を追加
dbmopen (%YOBI,"$DBM_YOBI",0666);
delete $YOBI{"$FORM{'pname'}"};
dbmclose %YOBI;
ebs_sub1.cgiを修正
16行目の下に下記の行を追加
$DBM_YOBI="./$LOG_FOLDER/$DB_ID5";
config.cgiを修正
37行目の下に下記の行を追加
$DB_ID5 = 'yobi_data';#予備武器用DBM名
適当な位置に下記の行を追加
# 予備武器数の設定
$WEAPON_MAX=2;
以上で改造完了です。
$WEAPON_MAXに設定した個数分、予備武器の領域が増えます。
予備武器数を増やすとレイアウトも少しズレるので
tableのheightの指定などで調整してください。
||||||予備武器数を変更できるようにしてみました。
DBMの許す限り何個でも予備武器数を増やせます。
この修正をした後はマシマロさんのデータ調整スクリプトでのユーザーデータの予備武器の修正ができません。
あと、予備武器を別DBMにしたので変更前の予備武器2つはなくなってしまいます。
そんなのいやだ〜って方は予備武器を新DBMの方へ移動するスクリプトと
マシマロさんのデータ調整スクリプトの修正を別に投稿しておきますので
そちらを参照してください。
※この改造、かなり修正個所が多いので必ずどうなってもいい
EBS上で修正、テストを行ってから移行してください。
10/14 ebs_sub3.cgiの行指定の間違いを修正(266 → 366)
|||end|||