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

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

`▼関連発言 │ └◆537:教えて欲しいのですが。 [鮎] 01/20 20:25 └◆538:どんとこい (´ー｀)ノ [きりう] 01/20 21:56 ├◆540:Re:どんとこい (´ー｀)ノ [通りすが] 01/21 00:33 ├◆543:Re:どんとこい (´ー｀)ノ [鮎] 01/21 17:35 └◆545:Re:どんとこい (´ー｀)ノ [きりう] 01/21 19:41 ├◆546:$status0 の謎 [ノネ] 01/21 21:44 │└◆549:Re:$status0 の謎 [きりう] 01/21 22:46 │　└◆557:Re[2]:$status0 の謎 [ノネ] 01/22 01:36 │　　└◆560:Re[3]:$status0 の謎 [きりう] 01/22 13:02 │　　　└◆576:Re[4]:$status0 の謎 [ノネ] 01/22 23:46 │　　　　└◆580:Re[5]:$status0 の謎 [きりう] 01/23 00:58 └◆547:Re[2]:どんとこい (´ー｀ [鮎] 01/21 22:25 └◆551:Re[3]:どんとこい (´ー｀)ノ [きりう] 01/21 23:01 └◆553:(((;ﾟДﾟ))怖い [鮎] 01/21 23:54 └◆556:Re:(((;ﾟДﾟ))怖い [鮎] 01/22 00:10 └◆559:Re[2]:(((;ﾟДﾟ))怖い [きりう] 01/22 12:20 └◆563:Re[3]:(((;ﾟДﾟ))怖い [鮎] 01/22 15:29 └◆571:Re[4]:(((;ﾟДﾟ))怖い [きりう] 01/22 19:19 └◆574:Re[5]:(((;ﾟДﾟ))怖い [鮎] 01/22 21:58 └◆578:Re[6]:(((;ﾟДﾟ))怖い [きりう] 01/23 00:15`

``

``

No.537　 教えて欲しいのですが。
`[返信] 発言者： 鮎 発言日： 2003 01/20 20:25 質問ばかりでゴメンナサイッ！！ よくわからないバトルロワイアルを改造していて、 生還できるようにしたんですけど―― 生還するとき ランクに同じエリア・方角にいた人(１人)の名前までのってしまうのです …… - 生還 -（大木立道）　←みたいに 私的には生還と殺害に記録をわけて少しいじれば、 いいかな　なんて思っております。（btlrylもかな） やってみたんですけどエラーばっかでできませんでした（涙 できればどなたかやり方を教えてください。`

``

No.538　 どんとこい (´ー｀)ノ
`[返信] 発言者： きりう 発言日： 2003 01/20 21:56 こっちも面白がって質問に答えてるんで全然OKっすよ。ばっちこーい ヽ(´ー｀)ノ 要はハイスコア書き込みのときに死因が生還の場合は絶対に加害者を書き込まなければ いいわけです。 ハイスコア書き込みは死体処理サブルーチンの中でやってます。 ハイスコアファイルに書き込むデータは@deaddataです。@deaddataは自分が死んだとき 用と他の誰かが死んだとき用があります。 @deaddata = ($status[6],$status[0],$num,$death,$guestnum,$status[1]);←自分が死 んだとき用 @deaddata = ($guest[6],$guest[0],$guestnum,$death,$num,$guest[1]);←他の誰かが 死んだとき用 肝心の加害者については # 0:殺害数 1:名前 2:役柄 3:死因 4:加害者 5:PASS と書いてあるように、@deaddata[4]に加害者の出席番号が入ります。（自分の時：$gues tnum、他人の時：$num） そこで、死因（$death）が生還（alive）の時は @deaddata[4]に0を入れるように条件式を書いてやります。（一応、自分の時と他人の時 、両方共やっておいた方がいいです） ↓こんな感じになります（自分が死んだとき） if($death eq 'alive'){ @deaddata = ($status[6],$status[0],$num,$death,0,$status[1]); }else{ @deaddata = ($status[6],$status[0],$num,$death,$guestnum,$status[1]); } @deaditem = @status[9..16]; $lastone = $num; p.s 禁止エリア・溺死・餓死・毒死も同じ現象が起きるので、OR条件でつなげてやりましょ う。 ワイアで死んだ場合もですが、死因がカマと同じ首切断なので、この方法でやると、カ マで殺した場合も加害者無しになってしまうので注意です。`

``

No.540　 Re:どんとこい (´ー｀)ノ
`[返信] 発言者： 通りすがりだよ 発言日： 2003 01/21 00:33 R&Bの共有掲示板以外できりうさんが個人で質問に答えられているんですね。 技術のシェアをする態度に、なんか感心しました。（失礼な言い方？だったらスミマセ ン）`

``

No.543　 Re:どんとこい (´ー｀)ノ
`[返信] 発言者： 鮎 発言日： 2003 01/21 17:35 あーぅ…（感動 ゴテニネイにそーすまでありがとうございます。 だいたいできました。 しかし私のBRには生還が数種類あってalive　alive2・・・とわかれております。 そこで全部の生還に対応するためにaliveの数だけ増やしたのです。if($death eq 'aliv e'){（省略　←これを 当然aliveとうのをalive2などにしました。 そうするとエラーはでなかったのですけど 効果が全くありませんでした……つまり- 優 勝 -（琴弾加代子）と表示 どっか他にも変えないといけないのでしょうか`

``

No.545　 Re:どんとこい (´ー｀)ノ
`[返信] 発言者： きりう 発言日： 2003 01/21 19:41 > 通りすがりだよさん 趣味で面白がって答えてます。 感心とかされると管理人は調子に乗っちゃいます（単純だな (　´,_ゝ`)ﾌﾟｯ） > 鮎さん if($death eq 'alive' || $death eq 'alive2' || $death eq 'alive3' || 〜以下略〜 って風にorで繋げてもらえばいけると思うんですが、もしかしてダメでしたか？`

``

No.546　 $status0 の謎
`[返信] 発言者： ノネ 発言日： 2003 01/21 21:44 はじめまして ちょっとわからないところがあるので、質問していいですか？ @status0[?]というのはステータスファイルの1行を、splitでちょん切った うちの１つ、という解釈でいいんでしょうか？ 今、僕は１つのエリアにいる敵全員にダメージを与えるというのを やっているのですが、最初にif文で「自分と同じエリアで、自分じゃない」 判定をしたあとで$status0[2]にダメージを与えて、テンポラリファイルに プリントする、という文を書くつもりでいたのに、頭の中で考えている うちに混乱してきてわからなくなってしまいました。 この方法で動作しますか？おしえてください。`

``

No.549　 Re:$status0 の謎
`[返信] 発言者： きりう 発言日： 2003 01/21 22:46 > はじめまして > ちょっとわからないところがあるので、質問していいですか？ はじめまして。(´ー｀)ノ > @status0[?]というのはステータスファイルの1行を、splitでちょん切った > うちの１つ、という解釈でいいんでしょうか？ そういう解釈でいいと思います。 > １つのエリアにいる敵全員にダメージを与える その方法だとちょっと怪しいかもしれません。 まず、if文で「自分と同じエリアで、自分じゃない」に加えて「生きてる生徒」の条件 も付け加えた方がいいと思います。 あと、ダメージを与える処理ですが、 if文の条件に当てはまる生徒が居た場合、生徒ファイルを開いて、その生徒のデータをs plitでちょん切ってくる。 @j = split(/\,/);　　#@jの名前は任意 （@status0だとおかしなことになるかもしれないので） そして、$j[2]にダメージを与えて、テンポラリファイルにプリント。これの繰り返しで いけると思います。 全体攻撃は難しいですが、考え方の方向はあってると思いますのでがんばってください 。`

``

No.557　 Re[2]:$status0 の謎
`[返信] 発言者： ノネ 発言日： 2003 01/22 01:36 返信ありがとうございます。 きりうさんのアドバイスのおかげで、きっちり頭の中で整理できました。 どうもテンパってたようで、あらためて$status0やステータスファイルを 理解することができました。 肝心の文のほうはダメージを加えるまで、うまく書けましたが最後の最後で わからないことが１箇所でてきました。 テンポラリファイルにプリントする時の名前ってなんですか？ いろいろな名前を試したのですが、生徒がダブったり、１行ずつ消えたりしてしまいま す。`

``

No.560　 Re[3]:$status0 の謎
`[返信] 発言者： きりう 発言日： 2003 01/22 13:02 やっぱりそこも躓きますよね。 参考になるかわかりませんが、うちのを載せておきますね。 大体こんな感じです↓ my $count = -2; # カウンタ open (LOCK,">$filelock"); eval {flock(LOCK,2)}; open (STAT,"$filestat") || &Error(1,'生徒'); open (TEMP,">$filetemp") || &Error(1,'テンポラリ'); while(<STAT>){ if($count == $st){　　# $stはダメージを与える相手の出席番号 @j = split(/\,/); $j[2] = $j[2]-$_[1]; if($j[2]<0){　　# 全体攻撃でトドメはさせない $j[2]=1; } print TEMP join (',',@j); }else{print TEMP $_;} $count++; } close(TEMP); close(STAT); rename $filetemp,$filestat; eval {flock(LOCK,8)}; close(LOCK); ※カウンタを-2してるのは生徒ファイルの頭2行に禁止エリアデータが入ってるので。`

``

No.576　 Re[4]:$status0 の謎
`[返信] 発言者： ノネ 発言日： 2003 01/22 23:46 きりうさんのソース参考になりました。 ただ僕の書いたのと違う点が多々あり、わからないところもでてきました。 > 　　if($count == $st){　　# $stはダメージを与える相手の出席番号 …これなんですが、$st、スカラだけでこれは動くのでしょうか？ 僕が考えていたのは最初のif「自分と同じエリア、自分以外、生死判定」の前に for($i=1;$i<=42;$i++)を置いてif条件に当てはまるものは@st[$i] = $iとし、 if($count == $st[$count]){　としないと動かないのでは、と思って やってみたのですがダメでした…。 $stだけだと出席番号がダブってしまうと思うのですが、大丈夫なのですか？ あと、わからなかったので僕なりに考えた方法でも試してみたのですが たとえば、赤松が飯島と大木にダメージを与えても、大木にしかダメージが与えられな くて、 大木が赤松と飯島に与えると飯島にしか、与えられません。 つまり最後の生徒にしかダメージが届かないのです。 これが僕の書いたソースです。なにか不備な点があったら教えて頂けないでしょうか？ お手数をお掛けして本当にすみません。 my $count = -2; # きりうさんのを参考にしました &Lock; open (STAT,"$filestat") || &Error(1,'ステータス'); open (TEMP,">$filetemp") || &Error(1,'テンポラリ'); while(<STAT>){ @s = split(/\,/); if(@s[3] == $status[3] && @s[0] ne $status[0]){ # 生徒いろいろ判定 @s[2] -= 7; print TEMP join(',',@s); }else{ print TEMP;} $count++; } close(TEMP); close(STAT); rename $filetemp,$filestat; &Unlock;`

``

No.580　 Re[5]:$status0 の謎
`[返信] 発言者： きりう 発言日： 2003 01/23 00:58 No.560で書いたソースは一部だけなんですよ (^_^;) あの部分だけサブルーチン化させてあるんです。 foreach(1..42)でループさせて（もちろんfor($i=1;$i<=42;$i++)でも良いです。） if「自分と同じエリア、自分以外、生死判定」の条件が当てはまる奴の 「$_」 が 「$s t」 に入ります。 とりあえず、全体の流れを載せますね。 foreach(1..42){ if(自分と同じエリア、自分以外、生死判定){ $st = $_; #うちのはここからダメージ処理サブルーチンに飛びます。 my $count = -2; &Lock; ファイルオープン while(<STAT>){ if($count == $st){ @s = split(/\,/); ダメージを与える処理（@s[2] -= 7;で大丈夫です） print TEMP join (',',@s); }else{print TEMP $_;} $count++; } ファイルクローズ rename $filetemp,$filestat; &Unlock; #ここまでがダメージ処理サブルーチンです #対象に選ばれている生徒にダメージ if($st==$FM{'victim'}){ $guest[2]に直接ダメージ（ノネさんのやり方だと $guest[2]-=7; でしょうか） } #対象に（中略）　ここまで } } これが最低限の流れです。 あくまでも最低限なんで、エラー処理とかpushログとかはちゃんと入れてくださいね。 あと、最後の生徒にしかダメージが届かないとのことですが、No.560では言わなかった んですが（言うのを忘れてたとも言う。爆）、「最後の生徒にしかダメージが届かない」 のではなく「対象に選ばれている生徒にはダメージが届かない」だと思われます。うちは そうだったもので。（もしかしたらうちだけかもしれません） なので、対象に選ばれてる生徒については if($st==$FM{'victim'}){ $guest[2]に直接ダメージ } この処理を加えてください。`

``

No.547　 Re[2]:どんとこい (´ー｀)ノ
`[返信] 発言者： 鮎 発言日： 2003 01/21 22:25 おーできましたできましたっ！！ありがとうございます。 || ←の存在を忘れてしまいました。 あのー次々と質問で申し訳ないのですけど マシンガンで攻撃するとき弾が１発ではなくいっきに５発減ってしまうってことは簡単 にできちゃいますか？ できちゃうなら教えて欲しいのですけど無理ですか？ 『もどき』でもいいです残り３０発と表示されてるけど実際は６発とか`

``

No.551　 Re[3]:どんとこい (´ー｀)ノ
`[返信] 発言者： きりう 発言日： 2003 01/21 23:01 攻撃（反撃）時にマシンガンなら$status[$arms1]（$guest[$arms2]）を5発（-500←アイ テム1000Verなら-5000）減らすようにしてやるだけでOKス。`

``

No.553　 (((;ﾟДﾟ))怖い
`[返信] 発言者： 鮎 発言日： 2003 01/21 23:54 管理人さんがおしえてくれたとうりにやってみた（$status[$arms3] -= 5000;などをつけ くわえたりもした）らできました・・・・ ５発減りました。ワルサーとかはちゃんと１発で そこで１つ疑問がでたのですただたんにアイテムファイルに『いんぐらむＭ１１,2,・・ ・』と加えただけなのにそれがなんでマシンガンだってわかるんだろ イングラムM11をマシンガンだみたいに記入した覚えはないのに（怖 怖くて夜も眠れない。 それと5発減らすもの以外にも１００発減らすものを作りたいのですけど５発のときみた いに$arms3と増やせばいいのですか？ と・・・それよりもなんでマシンガンとハンドガンが区別できたのかが気になります。`

``

No.556　 Re:(((;ﾟДﾟ))怖い
`[返信] 発言者： 鮎 発言日： 2003 01/22 00:10 すみません完全に１発減るのと５発減るのにわかれませんでした。 なぜか弾数が -1になったり１発しかへらないときがあったりです。 どうすれば正常に動くでしょうか`

``

No.559　 Re[2]:(((;ﾟДﾟ))怖い
`[返信] 発言者： きりう 発言日： 2003 01/22 12:20 とりあえず、デフォルト状態で説明しますね。 # 攻撃(銃) if($weaponkd[$kind1] == 2){ push @log,"$num,$guestnum,attack,$kind1,$status[3]"; $writestatus = $anaction / 2; #ここから if($kind1 =~ m/(6|38)/){　　# $kind1(攻撃武器)が6or38（インorウジ） $status[$arms1] -= 500; }else{ $status[$arms1] -= 100; } #ここまで $damage = &Damagecal($kind1,$def2,$guest[7]); $guest[2] -= $damage; Out(&Damage($victims[$guestnum],$damage)); 〜中略〜 } 反撃は$kind2で判定して、$guest[$arms2]を減らしてやります。 $arms3って何か意味を持たせてますか？ もし、空っぽならそれが原因かなと思ったり。 $arms1（攻撃する武器が$status配列の$arms1番目に入ってる）$arms2（反撃する武器が $guest配列の$arms2番目に入ってる） > 100発減らす場合 elsifで繋げてやって、$kind1が100発減る武器の時、100発減らす処理（$status[$arms1 ] -= 10000;）とすれば、 大丈夫です。 ※デフォルトの攻撃時 弾数が -1発になるのは謎ですねえ。。。 弾数が0発以下になると弾切れになって、消えるはずなんですが]・・・(((;ﾟДﾟ))`

``

No.563　 Re[3]:(((;ﾟДﾟ))怖い
`[返信] 発言者： 鮎 発言日： 2003 01/22 15:29 実はまだ$arms3を作っていません。 $arms1を２つにしてからそのうちの一つを-500にすればいいんですか？（$arms2などに しないで） ほんとになんどもスミマセーン！`

``

No.571　 Re[4]:(((;ﾟДﾟ))怖い
`[返信] 発言者： きりう 発言日： 2003 01/22 19:19 $arms1を２つにするの意味がわからないんですが・・・（汗 とりあえず、もう1度頭から説明してみますね。 デフォルト（無改造）の状態で説明します。 マシンガン（イン・ウジ）で攻撃すると弾が5発、その他の銃器で攻撃した時は1発だけ 減るようにしたいんですよね？ それを実装するには攻撃サブルーチン（sub Attack）の中身をいじればいいって事はわ かりますよね？ 攻撃時に（自分の武器の）弾を減らす処理↓ $status[$arms1] -= 100; と 反撃時に（相手の武器の）弾を減らす処理↓ $guest[$arms2] -= 100; を武器がマシンガン（イン：アイテムNo6・ウジ：アイテムNo38）の時は5発減るようにi f文を書いてやればいいのは分かりますか？ 書いてみますね。 攻撃時 if($kind1 =~ m/(6|38)/){ $status[$arms1] -= 500; }else{ $status[$arms1] -= 100; } 反撃時 if($kind2 =~ m/(6|38)/){ $status[$arms2] -= 500; }else{ $status[$arms2] -= 100; } ↑こうです。 それぞれの変数の意味は $arms1：攻撃に使った武器が"$sutatus"の"$arms1"番目に入っている $status[$arms1]：攻撃に使った武器の情報（9発のイングラムなら"906"が中に入ってる ） $kind1：$status[$arms1]を100で割った余り。つまり、攻撃に使った武器のアイテムNO $arms2：反撃に使った武器が"$sutatus"の"$arms2"番目に入っている $status[$arms2]：反撃に使った武器の情報 $kind2：$status[$arms2]を100で割った余り。反撃に使った武器のアイテムNO これだけで、「マシンガンで攻撃（反撃）すると弾が5発減る」の改造は終わりです。 次は弾が100発減る物の説明をしますね。 例としてボウガンで攻撃（反撃）すると弾が100発減るようにしてみますね。 攻撃時 さっきのやつに elsifでボウガン（アイテムNo1）の時は100発減るよ。 という2行の処理を加えるだけです。 if($kind1 =~ m/(6|38)/){ $status[$arms1] -= 500; }elsif($kind1 == 1){　　　　　　　＜この2行 $status[$arms1] -= 10000;　　 ＜この2行 }else{ $status[$arms1] -= 100; } 反撃時も同様です。 if($kind2 =~ m/(6|38)/){ $status[$arms2] -= 500; }elsif($kind2 == 1){　　　　　　　＜この2行 $status[$arms2] -= 10000;　　 ＜この2行 }else{ $status[$arms2] -= 100; } この2行ずつを加えてやるだけでいいです。 ボウガンじゃないアイテムに変えたかったら、アイテムNoを変えてやるだけでいいです 。 ・・・とここまで書いて、今まで説明した事は分かってて「$arms3」の追加の仕方とか について聞かれてるんじゃないのとか思ったりして (;´ー｀)`

``

No.574　 Re[5]:(((;ﾟДﾟ))怖い
`[返信] 発言者： 鮎 発言日： 2003 01/22 21:58 でででででできましたっ！！！ わかりやすい説明ありがとうございます。 $arms3だとかは忘れてください…… 私が$arms1とかの意味を理解していませんでした。 ありがとうございました`

``

No.578　 Re[6]:(((;ﾟДﾟ))怖い
`[返信] 発言者： きりう 発言日： 2003 01/23 00:15 良かったです。 これで安心して眠れます（笑`

``

`CGIROOM`