PHP版バトルロワイアルスクリプト配布

これは何?

自分が昔公開してたバトルロワイアルのCGIゲームのPHPへの移植版を約7年ぶりに改修して再公開します。昔のバージョンは最後の更新から既に7年近い年月が経過したことで新しいバージョンのPHP上では不具合が発生していたため、現行のPHP(5.3以降)で動作するようにしています。

大元はバッカス氏が作成したPerl版のBattle Royaleのスクリプト(現在誰かがGitHubに上げたものがある)であり、それに手を加えた再配布版(夢幻BRのベースとなったバージョンで現在はiswebが数年前に終了していることで入手不可)を大まかな機能のベースとしてPHPで書き直し、当時スタンダードだった改造や個人的にあった方が良いと思った機能を追加したものとなります。

ダウンロード

バージョン2.2.0をダウンロード

動作サンプルはこちらになります。テスト用なので通常は出来ないことも色々出来ます。複数登録とか。管理モードのパスワードは「test」で実際に管理モードにログインすることが可能です。

稼働しているテストバージョンは配布版のデフォルトからはいくつか設定の変更、アイコンの使用、テスト用にNPCの生成が行われているという違いはありますがそれ以外の機能は同じです。配布しているファイルの中にアイコンは同梱されていませんので注意してください。

旧版ダウンロード

一応昔のバージョンも残してはおきますが旧版は基本的に使用は非推奨です。特にバージョン1.X系は現行のPHPのバージョンでは正しく動作しないため、使用は現実的ではありません。

改造するにあたって

このスクリプトのファイルはEUC-JPで書かれているため、編集をする場合はEUC-JPに対応したテキストエディタが必要です。PHPの色分けに対応していれば尚良いです。フリーのテキストエディタで比較的最近更新があったもの(2014年6月現在)だとWindowsではMerygPadさくさくエディタEmEditor Freeあたり、MacならmiCotEditorFraiseあたりが条件を満たしています。もちろん条件を満たすエディタは他にもありますよ。・・・さすがにEmacsやVimで改造するなんて人は多分いないでしょうが。

実際に改造する場合、本番の環境でテストをしてはいけません。コードの記述をミスったりしたら借りているサーバーに多大な負荷をかけてしまうということが起こる可能性があります。なのでローカルでテストを行える環境を用意することを強く推奨します。WindowsではXAMPP、MacではMAMPを使えばローカルでテストする環境を比較的簡単に揃えることが出来ます。

スクリプトの更新履歴

バージョン2.Xの更新履歴

2.1.1→2.2.0(2016-02-23)
  • item.csvで使用可能な構文を追加しました。追加したのは次の通りです
    A|B(AまたはB)
    エリア番号、効果、回数で使用可能です。エリア番号で使用した場合、エリア番号AかBに設置されます。設置数が複数の場合、一つずつエリアAかBにランダムで割り振ります。効果または回数で使用した場合、効果または回数がAかBの何れかになります。3つ以上連結可能でA|B|Cと記述するとAまたはBまたはCとなります
    A&B(AかつB)
    エリア番号でのみ使用可能です。エリアAとBの両方に指定された設置数の数だけ設置します。3つ以上連結可能でA&B&CでエリアA,B,Cに指定された数が設置されます
    A-B(AからB)
    効果または回数で使用可能で、効果、回数がA以上B以下となるような値がランダムに決定されます
    使用例1:1|3|5,10,弾丸<>Y,1,10|20,
    効果1、回数10または20のいずれかの「弾丸<>Y」を合計で10個になるようにエリア番号1または3または5に設置します
    使用例2:3&6&9,7,石<>WC,5|10|15,15-30,
    効果5または10または15、回数15〜30のいずれかになる「石<>WC」をエリア番号3と6と9に7個ずつ設置します
  • 一度に追加される禁止エリアの数をconfig.phpで変更できるようになりました
  • MAPの形状をconfig.phpで変更できるようになりました。変更すると会場地図とレーダー画面に変更が反映されるようになります
  • 自動初期化を終了から〜日後だけでなく、〜曜日でも行えるようになりました
  • 敵発見時、敵殺害時、死体発見時に規定のコマンド以外のコマンドを実行しようとするとエラーになるようにしました(多重窓対策)
  • 使用しているPHPのバージョンが5.3かつshort_open_tagがoffの環境の時に画面の表示が壊れてしまっていたのを修正しました
  • 使用しているPHPのバージョンが5.3の時Noticeが大量発生するのを修正しました(5.3で使用できない記述使ってた・・・)
  • 武器を装備していない時に敵と遭遇するとNoticeが発生するのを修正しました
  • 事前登録受付時に登録人数が設定された人数に達していてもトップページからregist.phpにアクセスが出来ていたのを修正しました(regist.phpでも人数チェックはされるので元々登録は出来ませんが)
  • NPCのレベルを1にした場合、初期経験値がマイナスになってしまっていたのを修正しました
  • 説明書で前のバージョンで行われた記述の追加に漏れがあったので追記しました
2.1.0→2.1.1(2015-10-09)
  • 回復コマンドの回復処理が2箇所(attack.php、dsp_main.php)あったのをlib2.phpに移動し1箇所に纏めました
  • 現在の経験値が次のレベルに必要な経験値を大幅に上回っていた場合、従来は1回の戦闘毎にレベルが1ずつ上がっていたのを一気に上昇するようにしました
  • レベルアップ時に上昇した能力値を表示するようにしました
  • 登録時の名前チェックで「々」が引っかからないようにしました
  • エディタによってはregist.phpが開けなかったり一部文字が想定通りに扱えない問題があったため対処を行いました
  • バージョン2.0.0で$br['NOW']に変更し、2.1.0で削除していたdefine('NOW',$_SERVER['REQUEST_TIME']);に変更しました。defineは1.X時代で使用していた書き方ですが現行のバージョンでは現在の時間を取得するのにPHP5.1以降で使用できる$_SERVER['REQUEST_TIME']を使用しています。現在の時間を取得するのに$_SERVER['REQUEST_TIME']って書くよりNOWで済ませられれば楽ですよね
  • datディレクトリ内の.datファイルの拡張子をcsvに変更し環境によっては編集ができなかった場合があったのを回避しました。これによりCSVに対応したエディタで開くと見やすくなりますかもしれません
  • error_reportingがE_ALLな環境の時に治療の続行を行った場合、Noticeのメッセージが出ていたのを修正しました
  • 回復コマンド実行時のコマンド表示を~続行、~解除に変更しました
  • 基本方針、応戦方針の微調整を行いました
  • 出力されるHTML、使用するCSSの微修正を行いました
  • 説明書に現行のバージョンに合わせて若干の記述の追加を行いました
  • 前のバージョン(2.1.0)でNPC生成のコード等、テスト用の設定、コードが残ってしまっていたのを修正しました
  • 行動時に相手に先手を取られた場合、相手のログには「戦闘」ではなく「奇襲」と表示するように変更(2.1.0で変更していたのですが記載を忘れてました)
  • その他挙動がほぼ変わらないようなコードの微修正
2.0.0→2.1.0(2015-03-25)
  • 出力するHTMLにHTML5を採用。出力されるHTMLソースが以前のバージョンと大幅に変わりました。フォームでは少しばかりHTML5の新しい機能を使用しています。また、以前と比較して見た目の制御に関してCSSへの依存度が非常に高くなりました。古いブラウザではレイアウトが崩れます。以下に示すバージョンではレイアウトに問題は発生していないことを確認しています(Safari以外はWindows 8.1、Internet Explorer以外はOSX Yosemiteで確認)
    • Internet Explorer 11
    • Mozilla Firefox 35
    • Google Chrome 40
    • Safari 8(iOS含む)
    また、Windows7+IE10でもレイアウトに関しては問題ないことを確認済みです。(ただしレイアウト以外の部分で若干問題があります)調べたところ、今回のバージョンで使用した記述に対応したブラウザについては次の通りとなっています。
    • Internet Explorer 10以降
    • Mozilla Firefox 28以降
    • Google Chrome 21以降
    • Safari 6.1以降
    • Safari(iOS) iOS7以降
    • Android標準のブラウザ Android4.4以降
    この条件をクリアしていればレイアウトに関しては恐らく大丈夫ですが確認はしていないので保障はできません
  • 出力されるHTMLの中で省略しても問題の無い終了タグを省略することで以前のバージョンより出力されるHTMLを若干軽量化しました
  • 2.0.0で変更した設定関連の記述を1.X以前(define('XXX','YYY');という記述)に戻しました(-_-;)
  • メッセンジャーから管理者にメッセージを送ることが出来るようにしました。管理者へのメッセージは管理モードから確認できます
  • 管理モードからニュースにメッセージを載せることが出来るようにしました
  • メッセンジャーでページの更新のみを行うボタンを追加しました
  • 初期化時にすぐ開始しない場合、事前登録が可能かどうかトップページやニュースで分かるようにしました
  • 口癖設定や管理モードでの個別修正等、入力がユーザーデータとなる処理について一部の文字(&,<,>等)が2重に変換されないように修正しました
  • 管理モードでの個別修正にてグループの修正処理が誤っていたのを修正しました(前回のコード変更絡みでの修正忘れだったのですが3番目の修正により結果的に修正)
  • 説明書での自分のサイトのアドレスが昔のまま修正されてなかったのを修正しました
  • 説明書のCSSの記述を外部ファイル(rule.css)へ移動しました
1.3.1→2.0.0(2014-06-04)
  • 相当長い期間が空いたためPHP4のみを使用するサーバーがほぼ無くなったことと、今のPHP5の環境で意図しない動作をすることがあった為、PHP5向けのコードに修正。これに伴いPHP4環境のサポートを打ち切りました
  • テスト向け環境(PHP本体の設定でerror_reportingがE_ALLな環境)でNotice等のメッセージが大量に出ていたのを修正しました。ただ潰し切れていない場所があるかも知れません
  • 以前のバージョンではdefine('XXX','YYY');と記述していた設定関連の記述を$br['XXX'] = 'YYY';に統一。これに伴いかなり広範囲にわたってコードが変更されました
  • pref.phpから設定関連の部分を抜き出してconfig.phpに分離しました
  • ユーザーデータのファイルの命名規則を変更。これに伴いユーザーデータ取得絡みのコードが変わりました
  • datディレクトリ内の各種datファイルにてコメントを使用可能になりました。「##」(半角シャープ2つ)で始まる行はコメントとして扱い、無視されます。データ量を増やす時や整理する時等にメモを残すなどの使い方が出来ます
  • キャラクタ番号の設定にミスがあって番号が重複していたのを修正しました。これまでのバージョンでは最初の方に登録するキャラとNPCの番号が重複してしまい、NPCを使ったりすると生存者一覧でNPC→PCの順に表示されませんでした
  • 初期化時に開始時間を設定する際、「次の時間に開始」を選択した場合、指定した時間に関係なくすぐ開始してしまっていたのを修正しました
  • アイテム譲渡に重大なミスがあったのを修正しました。同じ場所にいればグループに関係なく譲渡出来るようになってしまっていました
  • 複数登録及び死亡後の再登録の二重チェックが怪しかったのを修正した、と思います。コードを大幅に変えたのでもっと怪しくなったかもしれないですが
  • 男子のクラス分けが正しく行われていなかったのを修正しました(変数名ミスってた・・・)
  • メッセンジャーでキャラが死亡していても会話出来るように変更しました
  • メッセンジャーでこちらからの送信メッセージの相手が分かりにくかったため誰に送ったか分かるようにしました
  • 生存者一覧でのコメントで改行を使用できるようにしました
  • 優勝者の個別閲覧にて最大スタミナ、経験値ベース、熟練度ベースの数値を開催を重ねるうちに変更しても元々の数値に合わせられるようにしました
  • 所々でlabelタグを使ってちょっとだけ操作性を向上させました
  • 所々で<input type="submit">の代わりに<button type="submit">を使用するように。この変更によりバージョン7以前のIEでは正しく動作しません
  • 作者のサイトのアドレス及びメールアドレスの変更しました
  • その他、見た目がほとんど変わらないが細かいコード変更を行いました

バージョン1.X時代の更新履歴

1.3.0→1.3.1(2007-07-01)
  • 初期化時にすぐ開始しない場合、進行状況での開始時間がおかしかったのを修正しました
1.2.2→1.3.0(2007-06-25)
  • プレイヤーが所持できるアイテムの最大数をconfig.phpで簡単に変更できるようにしました(この変更の影響で前のバージョンの優勝者データの互換性が無くなりました)
  • 初期化時に開始時間を設定できるようにしました
  • 初期化時にすぐ開始しない場合は事前登録を許可するかどうか決められるようにしました
1.2.1→1.2.2(2007-04-11)
  • 敵発見時、敵殺害時、死体発見時に誤ってブラウザのウィンドウ又はタブを閉じて再ログインした場合にその画面からやり直せるようにしました
  • ログインしても睡眠、治療、休憩が解除されないようにしました
  • 登録時の名前チェックで「ヵ」「ヶ」が引っかからないようにしました
  • その他細かい修正
1.2.0→1.2.1(2006-09-07)
  • 属性が異なっていてアイテム名が同じアイテム同士を合成しようとした場合に「合成に同じアイテムは選択できません」というメッセージが出なかったのを修正しました
  • アイテムを複数使用した場合に使用が無効になることがあったのを修正しました
  • レーダー系のアイテムが使えなかったのを修正しました。ちなみにレーダー系のアイテムを使用すると以降のアイテムは使用されません
  • レーダーを使用した画面で禁止エリアが×になっていなかったのを修正しました
  • エラーメッセージを表示させていた場合にWarningが頻繁に出ていたのを修正しました
1.1.0→1.2.0(2006-09-04)
  • アイテム合成のスクリプトを再び書き直し、更にコード量の削減が出来ました
  • アイテムを同時に複数個使用できるようにしました
1.0.1→1.1.0(2006-05-22)
  • アイテム合成のスクリプトを全面的に書き直し、コード量の削減を行いました。機能面での変更はありません
  • 登録画面で簡易入力チェックを行うjavascriptを追加しました
  • ランダムなエリアに配置されるNPCの配置がおかしかったのを修正しました
  • 禁止エリアから移動するはずのNPCが禁止エリアで死亡してしまっていたのを修正しました
  • 大きなサイズの投稿へ対処し忘れていたので対処しました
1.0.0→1.0.1(2006-03-11)
  • バックアップ読み込みが正しく動作しなかったのを修正しました
  • 毒中和が使えなかったのを修正しました
  • スピーカを使用したときにメッセージが保存されなかったのを修正しました
  • ハッキングが100%成功してしまっていたのを修正しました
  • lib2.phpにあったfunction membercountをlib1.phpに移動しました
  • move.phpの連闘行動の部分に誤りがあったのを修正しました
  • 先手を取られて死亡した場合、相手に戦闘のログが表示されていなかったのを修正しました
  • 各ディレクトリ内にある空のindex.htmlにBRのトップページへのリンクを加えました
1.0.0(2006-03-05)
  • 一番最初のバージョン