- 締切済み
Monster'sの改造・・・ボスモンスター
初めまして。 wc13と申します。 今、CGIゲームにある「Monster's」というゲームを設置し 改造しています。 Monster'sを知っている方、設置している方、改造している方、みてください。 自分は決まった階に特定のモンスターを出現させたいのですが、 すこしやり方がわかりません。 一応、モンスターのデータを読み込んでいるところに何かすればいいと思うのですが、その「何か」がわかりません。 自分なりにこうやってみました。 階が一回だったら(ここでモンスターデータ開く)150番目のモンスターを読み込む・・・とさせましたが出ませんでした。500エラーはでていません。記述したファイルはaite.cgiです。 if($Ykey == 1){ open(FH,"$monsdata"); @lines = <FH>; $monsdata = syswrite FH, 150; close(FH); } 一応、Perlに関する書籍などを購入し読んではいますが 上記の内容を解決させることはできませんでした。 どうすればいいのか全く検討がつきません。 ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- luka3
- ベストアンサー率72% (424/583)
aite.cgiを改造するというのはあっていますが、場所があまりよくないと思います。 aite.cgiの最初、kaiという関数内で処理する方がいいでしょう。 kai関数を解説しますと、(V1.8です) sub kai { $keitou = $FORM{'keitou'}; ←部屋の系統、0なら通常の部屋、1ならスライム系の部屋 if($keitou == 0){ ←0のとき、つまり通常の部屋を選んだ場合のモンスター決定処理をする if($inkai >= 1 && $inkai <= 25) { ←$inkaiは階数です。ここでは1階から25階までの場合 @ransu = (1,2,3,...省略...); ←遭遇するモンスターの番号一覧です $ten = $ransu[(rand(23))]; ←上の行で決めたモンスター一覧からランダムで一つ選ぶ。23は上の行の()の中の数字の個数。 } こんなかんじでわかるでしょうか。 1階で必ず150番のモンスターを出すなら、 if($inkai == 1) { $ten = 150; } となります。 これを通常の部屋でのみ出すなら49行目に追加、全ての部屋で出すなら423行目に追加すればよいです。 syswriteはデータを書き込むための関数です。 読み込み用にファイルを開いているので影響ありませんが、下手するとファイルを壊しかねませんので注意してください。
- luka3
- ベストアンサー率72% (424/583)
「Monster's」というゲームは知りませんが、プログラムとしてのアドバイスができる人は、ここにはたくさんいると思います。 ですので質問に次のことを補うといいと思います。 ・「Monster's」というゲームCGIを配布しているURL ・aite.cgiの何行目に改造を加えたのか 今ある情報からは、syswriteをたぶんまちがった使い方をしていることがわかります。 あと疑問なのは「階が1Fだったら」という条件だと、 1Fにいれば毎回(1歩あるくごとに?)同じモンスターを出現させることになりますが それでいいのでしょうか。
お礼
回答有り難う御座います。 ・Monster's配布サイト:http://park16.wakwak.com/~mikio-palace/ ・aite.cgiの795行目のみです。 ・因みに$monsdataはmonsterdat.cgiのことです。モンスターデータが格納されてます。 syswriteはデータを読み込む関数ですが間違ってましたか。 はい、同じモンスターでも大丈夫です。 これは、ボスを倒した時どこかでフラグをたてれば 倒したら他のモンスターもでるようにできるかもしれませんが、 できるかはわかりません。
お礼
サブルーチンに格納するのですね。 これで一回にいくと必ず150番目がでます。 それに加えて以下の機能を付け加えたのですが 失敗しました。 ◆一回倒すともうでない。(条件分岐でいけるかな・・・) sub kai { 中略 $ten = $ransu[(rand(23))]; } #ボス処理 if($inkai == 1) { $ten = 150; } else {} ◆ボスが50階にいるとして46階から上は幸せの鍵などをださないようにする(50階こすとボスを追い越してしまう) これは記述がわかりませんでした・・・。 とりあえず各階にいるボスを倒さないと次にいけないというのを 作りたかったので、luka3様の記述を参考にしましたが できませんでした・・・。