## CGIゲーム用掲示板 過去ログ

新規発言 ｜ 一覧 ｜ 過去ログ ｜ 最新ログ ｜ 検索 ｜ ＨＯＭＥ

`▼関連発言 │ └◆490:こまごま質問 [こう] 01/14 00:07 └◆494:Re:こまごま質問 [きりう] 01/14 02:16 └◆497:Re[2]:こまごま質問 [こう] 01/15 00:03 └◆499:Re[3]:こまごま質問 [きりう] 01/15 15:16`

``

``

No.490　 こまごま質問
`[返信] 発言者： こう 発言日： 2003 01/14 00:07 技術的な質問もＯＫなのかな？と思いカキコしました。 よくわからないバトルロワイアル１の環境で、 1.首チョンパや餓死をハイスコアに載せるには？ 2.ログに残り何人と表示させる方法 3.武器個別に待ち時間を変える方法 を教えてほしいです。 質問ＢＢＳの過去ログにも目を通してみたのですが、 深く掘り下げた回答が多く、厨房な私には判りかねる内容でした。 すごく簡単なことを聞いちゃってるかもしれませんが、 暇なときにレスいただければうれしいです。`

``

No.494　 Re:こまごま質問
`[返信] 発言者： きりう 発言日： 2003 01/14 02:16 > 1.首チョンパや餓死をハイスコアに載せるには？ ・首チョン btlryldt.cgiファイル、 # --------首ちょんぱ の push @log,"$count\,\,death\,hang"; @j = split(/\,/); の下に # == ハイスコアに載せてあげよう。 @deaddata = ($j[6],$j[0],$count,死因,'',$j[1]); $deaddata[0] = sprintf("%03d",$deaddata[0]); open(SCORE,">>$filescore") || &Error(1,'ハイスコア'); eval {flock(SCORE,2)}; print SCORE join(',',@deaddata)."\n"; eval {flock(SCORE,8)}; close(SCORE); # == まで。 ・餓死 btlrylcl.cgiファイルの # 餓死判定 if(time - $status0[4] > $starvtime){ の下に # == ハイスコアに載せてあげよう。 @deaddata = ($status0[6],$status0[0],$i,「死因」,'',$status0[1]); $deaddata[0] = sprintf("%03d",$deaddata[0]); open(SCORE,">>$filescore") || &Error(1,'ハイスコア'); eval {flock(SCORE,2)}; print SCORE join(',',@deaddata)."\n"; eval {flock(SCORE,8)}; close(SCORE); # == まで。 これで多分いけると思うんですけどね、「死因」の部分は自分で調べて入れてください 。 > 2.ログに残り何人と表示させる方法 実際にやってみました。 btlryl.cgiファイルの # ---------ステータス書き込み sub Writeone { の中の my $count = 0; # 追加-生徒ナンバー の下に my $remain = 0; # 追加-残り何人 if($death){ $remain--;} # 追加-ここまでで誰か死んでたら while(<STAT>){ $count++; # 追加 @status0 = split(/\,/); の下に $remain++ if(@status0[2] > 0); # 追加-生き残り人数カウント sub Writeoneサブルーチンの一番下に # 追加-残り人数をログに吐く if($death){ push @log,",,left,$remain";} これだけ追加すればいけるはずです。 > 3.武器個別に待ち時間を変える方法 btlrylcm.cgiファイルの # ------------道具読み込み に push @weaponmatijikan,$i[4]; を追加 @weaponmatijikanの名前は任意で。 btlrylit.txtファイルに各武器の待ち時間を設定 アイテム名,アイテムの種類,攻撃（防御）力,アイコンNo,武器の待ち時間 という風になっています。 例） ボウガン,2,5,14,50 にすると、ボウガンで攻撃すると50秒待たされるようになるわけです。 btlryl.cgiファイルの # ----------攻撃 sub Attack { の中 # 攻撃(銃) の中の $writestatus = $anaction / 2; を $writestatus = 0; に Out("<b>$status[0]</b>は目の前が真っ暗になり、そのまま意識が遠くなっていくのを 感じた。"); の下の $writestatus += $anaction; を $writestatus += $weaponmatijikan[$kind1]; に書き換えれば出来ると思います。 一部、確認してない箇所があるのでちゃんと動くかどうかは保証できません。 あと、１と２は那司さんと菅原さんの大会Verから流用したものなので、フッターに那司 さんの名前が入ってないverをお使いなら入れておいてください。`

``

No.497　 Re[2]:こまごま質問
`[返信] 発言者： こう 発言日： 2003 01/15 00:03 ありがとうございました！すべて正しく動作しました。 回答がとても判りやすかったので、調子に乗って、 また質問しちゃいます(ｵｲ 1.ハイスコアに、生還者を優先的に上位にランクインさせる方法。 2.デフォルトの双眼鏡は方角のみの表示ですが、これに加え、 Ⅱのデフォルトのように狭い範囲で位置を特定する双眼鏡と、 全範囲を見渡せ、なおかつ位置を特定する・・・最強の双眼鏡の追加。 3.「あなたは死にました」のメッセージを、 相手の攻撃で殺されたときも表示させる。 (デフォルトでは表示されないようなので・・・) またしても長々とすいません(銃声 2.などは、無知な私にはなかば諦めかけていた改造なのですが、 きりうさんの知識をお借りできれば・・・と思い、 出すぎた書き方ではありますが、質問させていただきました(汗`

``

No.499　 Re[3]:こまごま質問
`[返信] 発言者： きりう 発言日： 2003 01/15 15:16 １、ファイルの書き込みとか読み込みって苦手で、やったことないんでよくわかんないで すけど、 死体処理のハイスコアファイル（$filescore）の処理の時に、死因（$deaddata[3]）が 生還（alive）なら上位に来るようにする って処理を加えれば出来ると思います。 俺はその詳しいやり方がわかんなかったので、殺害記録と生還記録に分けてるわけです 。 Ⅱはデフォルトで生還者が上位に来ますんで、そっちを参考に出来るんなら参考にして みてください。 ２、 # 全範囲で位置も特定できる双眼鏡 }elsif($i == 60){ Out('<b>双眼鏡</b>：他の人がどこにいるか、確認します。'); foreach(1..42){ next if($pos[$_] > 999 || !$pos[$_]); # 追加修正 if($pos[$_] && $_ != $num){ $i = int($status[3] / 10); # 追加、自分の位置 my $k = int($pos[$_] / 10); # 追加、相手の位置 $j = substr($pos[$_],1,1) || 10; $used = '-'."$j"; # 追加 $j = ($j != 10) ? substr($pos[$_],0,1) : substr($pos[$_],0,1) - 1; # 追加修正 $j = ('A','B','C','D','E','F','G','H','I','J')[$j]; $used = $j.$used; $used = '同じエリア内' if($i == $k); # 追加 Out("$victims[$_]：<b>$used</b><br>\n"); } } $writestatus = 0; 以上、菅原さんの大会verから抜粋。勝手に抜粋とかしちゃって良いんでしょうかね？ダ メだったら消しますんで、ダメだったら誰か言ってやってください。 分かってると思いますが、最初の }elsif($i == 60){ の60はアイテムNoです。 双眼鏡の範囲を狭くする場合 例）自分の位置から上下左右に2マス □□□□□ □□□□□ □□自□□ □□□□□　　自：自分の位置 □□□□□　　□：双眼鏡の届く範囲 # 双眼鏡 }elsif($i == 60){ Out('<b>双眼鏡</b>：他の生徒がどこにいるか見つけだします。'); foreach(1..42){ next if $pos[$_] > 999; my $x1=int($status[3]%100/10);　　#自分のx座標 my $y1=int($status[3]/100);　　　 #自分のy座標 my $x2=int($pos[$_]100/10);　　　 #相手のX座標 my $y2=int($pos[$_]100);　　　 #相手のy座標 if((x1-x2<3 || x2-x1<3)&&(y1-y2<3 || y2-y1<3)){　　#一定距離以上はなれ ている敵を表示しない ～中略～ Out("$victims[$_]：<b>$used</b>"); } } } $writestatus = 0; こんな感じでif文使って要らん部分を省いてやれば出来ると思います。動作確認してな いので動かなかったらごめんなさい。 ３、btlryl.cgiの頭の方にある if($FM{'action'} && $status[2] < 1){undef %FM;&Cookieset;} をコメントアウトすれば出来るはずです。 これもちょっと自信ないんでおかしなことになったらごめんなさいです。`

``

`CGIROOM`