劇ぱわ改造法(ver 3.00b用)

topへ戻る

俺ペナは劇ぱわを改造するのに多いに参考になります。 うちで設置されてる劇ぱわの改造もほとんどそうです。 まずは連敗数の表示法から、負けが込んでくると今何連敗してるんかわからへんようになることがあるでしょ。 これをやっとくと、はったりで10連敗でストップしたとかみたいなコメントも通用せんようになります。

赤い文字が新たに付け加える部分になります。

現在の連敗数の表示
まずはgekipawa.cgiの「# チャンピオン」のところ、無改造の配布版なら289行目の@champ_pri = ();の次の行から
$wincon2 = $wincon - ($wincon * 2);
if($wincon > 0){
$rensyo_priis[1] = "(現在<font color=\"FF0000\" size=7><B>$wincon</B></font>連勝中)";
}elsif($wincon < 0){
$rensyo_priis[1] = "(現在<font color=\"0000FF\" size=7><B>$wincon2</B></font>連敗中)";
}
と書き加えます。

そして292行目
$champ_pri[2] = "<td><font size=5 color=\"DD9966\"><B>Now Champion!</B></font> ( 現在<font color="FF0000" size=7><B>$wincon</B></font>連勝中! )<BR>n";
を削除して
$champ_pri[2] = "<td><font size=5 color=\"DD9966\"><B>Now Champion!</B></font> $rensyo_priis[1]<BR>n";
と書き換えます。

次にgeki_else.cgiです。これはちょっとだけ、無改造の配布版なら113行目の
if($wincon)
というところを
if($wincon > 0)
に変更して下さい。

最後にgeki_game.cgi。これがいちばん面倒です。

まず無改造の配布版なら104行目〜108行目の
if($i eq 1){
$rensyo_pri = "($wincon[$i]連勝中)";
}else{
$rensyo_pri = "<br>";
}
というところを削除して
$wincon2[$i] = $wincon[$i] - ($wincon[$i] * 2);
if($wincon[$i] > 0){
$rensyo_pri = "($wincon[$i]連勝中)";
}elsif($wincon[$i] < 0){
$rensyo_pri = "($wincon2[$i]連敗中)";
}else{
$rensyo_pri = "(開幕戦)";
}
と書き換えます。

次に無改造版の868行目
&koushin_team;
というところの次の行から
$wincon2[$i] = $wincon[$i] - ($wincon[$i] * 2);
if($wincon[$i] > 0){
$rensyo_priis[$i] = "($wincon[$i]連勝)";
}elsif($wincon[$i] < 0){
$rensyo_priis[$i] = "($wincon2[$i]連敗)";
}
と書き加えます。

最後に無改造版の1120行目〜1121行目
if($g_win[$i]) { $wincon[$i]++; }
else { $wincon[$i] = 0; }
を削除して
if($wincon[$i] eq 0){
if($g_win[$i]) { $wincon[$i] = 1; }
elsif($g_lose[$i]){ $wincon[$i] = -1; }
}elsif($wincon[$i] > 0){
if($g_win[$i]) { $wincon[$i]++; }
elsif($g_lose[$i]){ $wincon[$i] = -1; }
else{ $wincon[$i] = 0; }
}else{
if($g_win[$i]) { $wincon[$i] = 1; }
elsif($g_lose[$i]){ $wincon[$i]--; }
else{ $wincon[$i] = 0; }
}
と書き加えれば出来上がりです。

試合経過表示は交互やった方がスリリングです。例えば、8回まで 負けてて9回おもてに逆転、9回裏に再逆転でサヨナラ負けみたいな場合、 同時やったら先に結果がわかってしまうわけです。 ところがおもてとうらを交互に表示していれば、一瞬9回おもてで喜んで、9回うらで一転やられた〜なんてことが味わえます。

試合の経過表示をおもてうら交互にする
改造するのは「geki_game.cgi」のみです。

まず無改造の配布版の317〜320行目
$ten_pri = "<font size=4><b>$tokuten[$kougeki]</b></font>";
if($kai_ten){
$ten_pri = "<font size=5 color=\"FF0000\"><b>$tokuten[$kougeki]</b></font>";
}
を削除して
$ten_pri2 = '';
$ten_pri = "<font size=4><b>$tokuten[$kougeki]</b></font>";
if($kai_ten){
$ten_pri2 = "<font size=5 color=\"FF0000\"><b>$tokuten[$kougeki]</b></font>";
}else{
$ten_pri2 = '';
}

と書き換えます。

次に338行目
$ten_pri[$kougeki][$kai-1] = "$ten_pri$tuika";
を削除して

$ten_pri[$kougeki][$kai-1] = "$ten_pri";
$ten_pri2[$kougeki][$kai-1] = "$ten_pri2";
$tuika_pri[$kougeki][$kai-1] = "$tuika";
と書き換えます。

最後に817〜841行目
$log[$m] = "<table border=1 cellspacing=0 width=85%><tr align=center bgcolor=\"#48BB22\"><td colspan=2>【 $kai回 】</td></tr>";
$m++;
$log[$m] = "<tr align=center><td width=50%>おもて</td><td width=50%>う ら</td></tr>";
$m++;
$log[$m] = "<tr align=center>";

for($j=0; $j<2; $j++){
$log[$m] = "<td valign=top><table width=100%>";
$m++;
if($i eq 0){
$log[$m] = "<tr align=center><td>順</td><td>名前</td><td>結果</td><td>ランナー</td><td>アウト</td></tr>";
$m++;
}
for($k=0; $k<$#{$out_pri[$j][$i]}+1; $k++){
$log[$m] = "<tr align=center><td>$jun_pri[$j][$i][$k]</td><td>$name_pri[$j][$i][$k]</td><td>$taisen_pri[$j][$i][$k]</td><td>$run_pri[$j][$i][$k]</td><td>$out_pri[$j][$i][$k]</td></tr>";
$m++;
}
$log[$m] = "</table></td>";
$m++;
}

if($ten_pri[1][$i] eq ''){ $ten_pri[1][$i] = "<font size=4><b>$tokuten[1]</b></font>"; }
$log[$m] = "</tr><tr align=center><td>$ten_pri[0][$i]</td><td>$ten_pri[1][$i]</td></tr></table><br><br>";
$m++;
}
を削除して

for($j=0; $j<2; $j++){
if($j eq 1 && $taisen_pri[$j][$i][0] eq ''){ last; }
if($j eq 0){ $game_log = 'おもて'; $bg_color = 'F0FFF0'; $table_color = '48BB22'; }else{ $game_log = 'うら'; $bg_color = 'ECF5FF'; $table_color = '0080FF'; }
$log[$m] = "<table border=1 cellspacing=0 cellpadding=3 width=80% bgcolor=$bg_color><tr align=center bgcolor=$table_color><td colspan=2><b><font size=4 color=ffffff>$kai回 $game_log</font></b></td></tr>";
$m++;
$log[$m] = "<tr align=center bgcolor=$bg_color><td valign=top bgcolor=$bg_color colspan=2><table width=100% bgcolor=$bg_color>";
$m++;
if($i eq 0){
$log[$m] = "<tr align=center bgcolor=$bg_color><td width=5%>順</td><td width=15%>名前</td><td width=60%>結果</td><td width=10%>ランナー</td><td width=10%>アウト</td></tr>";
$m++;
}
for($k=0; $k<$#{$out_pri[$j][$i]}+1; $k++){
$log[$m] = "<tr align=center bgcolor=$bg_color><td width=5%>$jun_pri[$j][$i][$k]</td><td width=15%>$name_pri[$j][$i][$k]</td><td width=60%>$taisen_pri[$j][$i][$k]</td><td width=10%>$run_pri[$j][$i][$k]</td><td width=10%>$out_pri[$j][$i][$k]</td></tr>";
$m++;
}
$log[$m] = "</table></td>";
$m++;

if($j eq 0 && $ten_pri2[0][$i] eq ''){ $ten_pri2[0][$i] = $ten_pri[0][$i]; }
elsif($j eq 1 && $ten_pri2[1][$i] eq ''){ $ten_pri2[1][$i] = $ten_pri[1][$i]; }
if($i eq 0 && $j eq 0){ $log[$m] = "</tr><tr align=center><td bgcolor=$bg_color width=50%>$ten_pri2[0][$i]$tuika_pri[0][$i]</td><td bgcolor=$bg_color width=50%><font size=4><b>0</b></font></td></tr></table><br>"; }
elsif($j eq 0){ $log[$m] = "</tr><tr align=center><td bgcolor=$bg_color width=50%>$ten_pri2[0][$i]$tuika_pri[0][$i]</td><td bgcolor=$bg_color width=50%>$ten_pri[1][$i-1]</td></tr></table><br>"; }
else{ $log[$m] = "</tr><tr align=center><td bgcolor=$bg_color width=50%>$ten_pri[0][$i]</td><td bgcolor=$bg_color width=50%>$ten_pri2[1][$i]$tuika_pri[1][$i]</td></tr></table><br><br><br><br>"; }
$m++;
}
}

に変更すればできあがりです。
F0FFF0、48BB22、ECF5FF、0080FFといった色の部分は、自分で適当に変更してください。


劇ぱわファンのみなさんは、時間のない中いろんなリーグを掛け持ちでやってられる方が多いんやけど、 そういった人には同時表示の方が好まれます。この改造をしておけば、同時派の方も交互派の方にも満足してもらえます。 気分によって使い分けもできるしねぇ。

試合の経過表示を選べるようにする
まず先程、上で改造した交互表示のファイルに名前をつけて下さい。プレミアでは「geki_gameb.cgi」という名前にしてますが、自分でわかりやすいものなら別に何でもいいのです。次から説明ではプレミアでつけている名前でのものになります。「geki_gameb.cgi」は「gekipawa.cgi」と同じ階層にアップロードして、パーミッション755を設定して下さい。
(ゲーム処理のCGIファイルが、「geki_game.cgi」と「geki_gameb.cgi」の2枚ある状態です。)

次に「gekipawa.cgi」の# 登録処理のところ、無改造なら68行目の
if($form{'playball'}) { require './geki_game.cgi'; &playlog; exit; }
の下に
if($form{'kougo'}) { require './geki_gameb.cgi'; &playlog; exit; }
とつけ加えて下さい。

最後に「geki_login.cgi」の無改造なら414行目
print "<input type=submit name=playball value=\"試合開始\"></form>\n";

print "<input type=submit name=playball value=\"試合開始(うらおもて同時)\">\n";
print "<input type=submit name=kougo value=\"試合開始(うらおもて交互)\"></form>\n";

と変更すればできあがりです。

このようなゲーム処理ファイルの複数使用は、他にもいろいろ応用ができます。 例えばホームラン確率のちがうファイルを複数用意すれば、試合ごとの球場の選択が可能になります。 みなさんも良いアイデアを出して、面白い改造をしてみて下さい。

劇ぱわを活性化させていきたいんやったら、コメント欄が賑やかな方がええでしょう。 そのためにはコメントとニュースの分離してたほうがええかもしれません。

コメントとニュースの分離
まず最初に新たにニュース書き込み用のdatファイルを作って下さい。news.datとでも名前をつけて「gekipawa.cgi」と同じ階層に アップロード、パーミッションは666です。(なにわ劇場ではinfoseekに設置ということで、datファイルはすべて拡張子cgiになってます。例news.cgi)

次にgekipawa.iniの##### 基本設定のところに $newsfile = './news.cgi'; # ニュースファイル とつけ加えて下さい。場所は基本設定のところならどこでもいいですが、# コメントファイルの次の行にするのがわかりやすいですね。

その次はgekigame_cgiです。
無改造版の1330行目〜1346行目の段落
# コメントファイル記入
if($geki_news && ($news_kekka || $news_record)){
open(CF,"+<$commentfile") || &error('指定されたファイルが開けません。');
eval 'flock(CF,2);';

@comments = <CF>;
if($news_record){ $news_kekka = $news_record; }
$kakiko = "1<><><>$times<>$news_kekka<>$team[0] $tokuten[0] - $tokuten[1] $team[1]<>\n";

unshift(@comments, $kakiko);
splice(@comments, $com_max);

truncate (CF, 0);
seek(CF,0,0); print CF @comments;
close(CF);
eval 'flock(CF,8);';
}
を削除して

<link rel="stylesheet" type="text/css" href="$cssurl/$c_sukin">

# ニュースファイル記入
if($geki_news && ($news_kekka || $news_record)){
open(NF,"+<$newsfile") || &error('指定されたファイルが開けません。');
eval 'flock(NF,2);';

@news = <NF>;
if($news_record){ $news_kekka = $news_record; }
$kakiko = "1<><><>$times<>$news_kekka<>$team[0] $tokuten[0] - $tokuten[1] $team[1]<>\n";

unshift(@news, $kakiko);
splice(@news, 6);

truncate (NF, 0);
seek(NF,0,0); print NF @news;
close(NF);
eval 'flock(NF,8);';
}

と変更して下さい。 splice(@news, 6);の数字を変えれば表示されるニュースの数が変えられます。ここを6にしているのでなにわ劇場では新しいものから6つのニュースが観覧できます。

最後にgekipawa.cgiです。無改造版の296行目「最近の試合」と317行目「コメント」の段落の間に、下記のように新たな段落を加えて下さい。

# 劇ぱわニュース
open(NF,"$newsfile") || &error('指定されたファイルが開けません。');
seek(NF,0,0); @news = <NF>; close(NF);

@news_pri = ();
$news_pri[0] = "<table border=1 width=100% cellspacing=0 cellpadding=2><tr align=center BGCOLOR=#00356A><td colspan=2><FONT COLOR=#FFFFFF><B>なにわ劇場ニュース</B></FONT></td></tr>\n";
$i = 0;
foreach(@news){
($no, $saku, $home, $date, $com, $kekka) = split /<>/;
$date = &date($date);
$news_pri[$i+1] = "<tr align=center BGCOLOR=#d5ffff><td width=20%><FONT size=-1>$date</FONT></td><td width=80%><FONT size=-2>$com<br>【$kekka】</FONT></td></tr>\n";
$i++;
}
$news_pri[7] = "</table>\n";

なにわ劇場ではニュースは小さめの表示になってます。大きくしたければFONT sizeの数値を変えて下さい。また最後の行の$news_pri[7]は ニュースを6つ表示してるため一つ多い7になってます。

最後に無改造版の415行目@game_priの次の行に@news_priと書き足してください。これを加える位置によってニューステーブルの位置が変わって来ます。トップページの位置関係を改変するためには、HTMLの知識(最低限テーブルタグの意味くらいまでは)が必要になります。それは各自で勉強して下さい。そのへんの質問に関しましてはお答えしませんのであしからず。

みなさんも部屋の模様替えとかやるでしょう?劇ぱわも気分や季節によって背景画像やフォントの色、大きさ、種類などを 変更できたらええと思いませんか?そのためにはCSSファイルを何種類か作ってCSSフォルダーに入れておく必要があるんやけど、 それは各自で勉強して下さいね。

スキン変更の追加

まずはgekipawa.iniですが、# タイトルの段落に
$cssurl = 'http://'; # cssフォルダのURL(最後の「/」はいりません)
とつけ加えて cssフォルダのURLを記入して下さい。# 画像フォルダのURLの下の行に加えておくとわかりやすいです。

そしてもうひとつ下記のような段落を加えて下さい。
# スキン
@sukins = ('a.css','b.css','c.css','d.css','e.css'); # スキンファイル名
@sukinsname = ('あ','い','う','え','お'); # スキン名
$kihoncss = 'a.css'; # デフォルトスキン

スキンファイル名、スキン名はわかりやすい名前に変更して下さい。
$kihoncssはスキン変更していない最初の状態でのスキンになります。

次はgekipawa.cgiです。まずは# 登録処理の段落(無改造なら49行目)に
if($form{'sukinselect'}){ require './geki_else.cgi'; &sukinselect; exit; }
if($form{'sukincookie'}){ require './geki_else.cgi'; &sukincookie; }

と書き加えて下さい。50〜68行目のどこに入れてもいいですが、自分がわかりやすい場所にして下さい。

そして##### ヘッダー表示(無改造なら168行目)の段落です。
まず、いちばん最初のsub header{の次の行に
&get_cookie;
if(!$c_sukin){ $c_sukin = "$kihoncss"; }

とつけ加えて下さい。
そして
<STYLE type="text/css">
<!--
body,tr,td,th { font-size: 10pt }
.score { font-size: 10pt; color: #FFFFFF; background-color: #008800 }
-->
</STYLE>
というところを削除して
<link rel="stylesheet" type="text/css" href="$cssurl/$c_sukin"> と書き変えて下さい。

次はスキン変更ボタンの作成です。自分の好きな場所に
<input type="submit" name="sukinselect" value="スキン変更">
という1行を加えて下さい。フッターに入れるのなら、無改造版では200〜205行目の間です。
新規ボタンのとなりなら、無改造版なら403行目$sinkiの次の行になります。

次は無改造版なら1283行目からのクッキーを取得の段落です。
1302行目if ($in{'home'}){ $c_home = $in{'home'}; }というところの次の行から
@pairs = split(/,/, $GET{'SUKIN'});
foreach(@pairs){
local($key,$val) = split(/<>/);
$COOK{$key} = $val;
}
$c_sukin = $COOK{'sukin'};
if($form{'sukin'}){ $c_sukin = $form{'sukin'}; }
と書き加えて下さい。

最後のエラーの時の処理の段落は以下のものに変更して下さい。
##### エラーの時の処理
sub error {

&get_cookie;

if(!$c_sukin){ $c_sukin = "$kihoncss"; }
$err_msg = @_[0];
print "Content-type: text/html\n\n";#コンテントタイプ出力
print <<"_ERROR_";
<html><head><title>ERROR</title><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<link rel="stylesheet" type="text/css" href="$cssurl/$c_sukin"></head>
$body<center>
<font color="$tcolor" size="$tsize">エラー</font>
<br><br><br>
$err_msg<BR>
</body>
</html>
_ERROR_

&footer;
&chosaku;
exit;

}#END error

geki_else.cgiは以下の段落を最下段の}#end league_endと1;の間につけ加えて下さい。

#######スキン変更
sub sukinselect{

&header;

print <<"_EOF_";
<font color="$tcolor" size="$tsize">スキン変更</font>
<br><br><br>季節によっても、気分によっても、好きなときに衣替え^^。
_EOF_

print <<"_EOF_";
<form action="$cgifile" method="$method">
<select name=sukin>
_EOF_

for($i=0; $i<$#sukins+1; $i++){
if($c_sukin eq $sukins[$i]){
print "<option value=$sukins[$i] selected>$sukinsname[$i]";
}else{
print "<option value=$sukins[$i]>$sukinsname[$i]";
}
}

print <<"_EOF_";
</select> <input type=submit name="sukincookie" value="スキン変更">
</form>
_EOF_

&footer;
&chosaku;

}#end sub

################スキン変更2
sub sukincookie{

$ENV{'TZ'} = "GMT"; # 国際標準時を取得
local($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)=localtime(time+1000*24*60*60);
$yearg += 1900;
if ($secg < 10) { $secg = "0$secg"; }
if ($ming < 10) { $ming = "0$ming"; }
if ($hourg < 10) { $hourg = "0$hourg"; }
if ($mdayg < 10) { $mdayg = "0$mdayg"; }
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
$ENV{'TZ'} = "Japan";
$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
$cook="sukin<>$form{'sukin'}";
print "Set-Cookie: SUKIN=$cook; expires=$date_gmt\n";

}#end sub

ゲームバランス変更法