私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇803:
現在の参加者表示 [mizuho] 10/08 15:56

 └◇806:Re:現在の参加者表示 [moon] 10/08 20:04
  └◇807:Re[2]:現在の参加者表示 [moon] 10/08 20:10
   └◇809:Re[3]:現在の参加者表示 [mizuho] 10/09 11:49
    └◇811:Re[4]:現在の参加者表示 [LIM] 10/09 19:08
     └◇813:Re[5]:現在の参加者表示 [moon] 10/09 19:36
      └◇814:Re[6]:現在の参加者表示 [moon] 10/09 19:43
       ├◇815:Re[7]:現在の参加者表示 [mizuho] 10/10 10:17
       └◇816:Re[7]:現在の参加者表示 [mizuho] 10/10 10:25
        └◇818:Re[8]:現在の参加者表示 [moon] 10/10 19:35
         └◇819:できました! [mizuho] 10/11 16:45<-last


803● 現在の参加者表示[ mizuho ] 2003 10/08 15:56
はじめまして!
マシマロさん配布のCGI分割Ver.1.10で改造に勤しむ日々です。
題名のとおり、現在ログインしている参加者のIDや名前を上部に表示させたいのです。
ほかのみなさんの現在稼動中のSOSUではたくさんの方が表示しているようなので、検索してみましたが解決方法は得られず、自分でも考えてみましたが、CGI初心者なものでまったくわかりませんでした(ToT)
どうかご教授くださいませm(_"_)m
スレッド一覧


806● Re:現在の参加者表示[ moon ] 2003 10/08 20:04
> はじめまして!
> マシマロさん配布のCGI分割Ver.1.10で改造に勤しむ日々です。
> 題名のとおり、現在ログインしている参加者のIDや名前を上部に表示させたいのです。
> ほかのみなさんの現在稼動中のSOSUではたくさんの方が表示しているようなので、検索してみましたが解決方法は得られず、自分でも考えてみましたが、CGI初心者なものでまったくわかりませんでした(ToT)
> どうかご教授くださいませm(_"_)m

sub list_orderで、
  if ($fg eq '' || $fg =~ /B/) { $playernow++ }
を、
  if($fg eq '' || index($fg, 'B') != -1){$playernow++; $current .= "[$id]$nm ";}
に変更します。
そして、sub sagaの適切な箇所で$currentをprintを使って出力します。
スレッド一覧


807● Re[2]:現在の参加者表示[ moon ] 2003 10/08 20:10
No.805もそうですが、手抜きで解決策そのものを書きましたが不明な点がありましたら答えますので。

# しかもコメント抜きなのでぱっと見で分からないソースになっていますし。 > 手抜き
スレッド一覧


809● Re[3]:現在の参加者表示[ mizuho ] 2003 10/09 11:49
おかげさまで、メイン画面の上部には何とか表示されるようになりました。
しかし、プレイ中にも表示されるようにしようとしたのですがなかなかうまくいきません。
とりあえず、sub play_form の &header; の下に何とか埋め込もうとしたのですが、いろいろやってみてもできませんでした。
どうにかなりますでしょうか?
スレッド一覧


811● Re[4]:現在の参加者表示[ LIM ] 2003 10/09 19:08
こんばんは。
いきなりのレス失礼します。

この場合(プレイ中に表示)は、
sub list_order
を通らないので、
sub header

&list_order;
を追加すれば対応できそうです。

//間違っていたらごめんなさい。
スレッド一覧


813● Re[5]:現在の参加者表示[ moon ] 2003 10/09 19:36
> この場合(プレイ中に表示)は、
> sub list_order
> を通らないので、
> sub header
> に
> &list_order;
> を追加すれば対応できそうです。
>
> //間違っていたらごめんなさい。

間違いではないですけれどファイルロックを消去してからいろいろと処理を行うことになる場面が多いので危ないです。

プレイ中に表示したいのであればsub player_data内が適当かと思います。(もちろんこの場合は参加者の表示は、右側のプレイヤーのパラメータ画面内になりますが。)

# そもそも&list_orderの実行は高負荷なのでプレイ中に参加者を表示させること自体をお勧めしません。
スレッド一覧


814● Re[6]:現在の参加者表示[ moon ] 2003 10/09 19:43
> プレイ中に表示したいのであればsub player_data内が適当かと思います。(もちろんこの場合は参加者の表示は、右側のプレイヤーのパラメータ画面内になりますが。)

正確には、
  print qq|<input type=hidden name=pass value="$ps">\n|;
以降です。
スレッド一覧


815● Re[7]:現在の参加者表示[ mizuho ] 2003 10/10 10:17
> > プレイ中に表示したいのであればsub player_data内が適当かと思います。(もちろんこの場合は参加者の表示は、右側のプレイヤーのパラメータ画面内になりますが。)
>
> 正確には、
>   print qq|<input type=hidden name=pass value="$ps">\n|;
> 以降です。
スレッド一覧


816● Re[7]:現在の参加者表示[ mizuho ] 2003 10/10 10:25
> > プレイ中に表示したいのであればsub player_data内が適当かと思います。(もちろんこの場合は参加者の表示は、右側のプレイヤーのパラメータ画面内になりますが。)
>
> 正確には、
>   print qq|<input type=hidden name=pass value="$ps">\n|;
> 以降です。

require './pl/list_order.pl';
&list_order;
if (!$playernow) { $playernow = 0 }
print qq|<br><b>現在プレイ中($playernow人):$current</b>\n|;

という感じで入れてみましたが、プレイ中の者がいても

現在プレイ中(0人):

という表示にしかなりませんでした。
高負荷になるということで、表示されるかどうかだけ試してみようかと思ったのですが、うまくいきません。
今後継続的な表示はあきらめるとして、原因だけでも知りたいのですが、何故だかわかるでしょうか?
スレッド一覧


818● Re[8]:現在の参加者表示[ moon ] 2003 10/10 19:35
> 今後継続的な表示はあきらめるとして、原因だけでも知りたいのですが、何故だかわかるでしょうか?

ちゃんと見てみたらsub player_dataが実行される状況ではlist_orderで参加者の判定は行わないので0人になるのが正常です。
参加者を表示するためには次のようなサブルーチンを追加してください。
&unlockは実行していないのでsub player_data以外で実行しても大丈夫です。

sub get_active{
  &get_file;
  &list_in;
  $playernow = 0;
  $current = '';
  my ($aid, $anm, $afg);
  foreach(0 .. $#lstlines){
    ($aid, $anm, $afg) = (split(/<>/, $lstlines[$_]))[0, 1, 27];
    if($afg eq '' || index($afg, 'B') != -1){
      $playernow++;
      $current .= "[$aid]$anm ";
    }
  }
}
スレッド一覧


819● できました![ mizuho ] 2003 10/11 16:45
試してみたら、表示されました!
ご丁寧にどうもありがとうございました♪
今後ともどうぞよろしくお願いしますm(_"_)m
スレッド一覧

CGIROOM