私設SoS2オーナー応援BBS

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

スレッド

└◇711:
Re[11]:find_bestについて [masaki] 08/02 23:07

 └◇712:Re[12]:find_bestについて [moon] 08/02 23:53
  └◇713:組織内の階級 [moon] 08/03 00:05
   └◇714:Re:組織内の階級 [masaki] 08/03 07:28


711● Re[11]:find_bestについて[ masaki ] 2003 08/02 23:07
>>どこでの話でしょうか?
ええと、normal_actionのforeach内です(^^;;
難しくてよくわからないのですが(苦笑)

> > # スクリプトの書き方からすると、ある特定の一人の組織内での階級を求めようとしているように思うのですが。(つまり先ほど書いたのと似たような処理・・・)
>
> 補足すると、ある特定のプレイヤーの階級だけを出したいのではなく一度に全ての組織の全階級を求めたいのでしょうか、ということです。
> もしそうだとすると、前述の通り少し面倒な処理になりそうなので考えるのに躊躇しています・・・。
ある特定のプレイヤーの階級を出したいのです。(player_dataやpartner_dataで表示させます)
ただ、組織毎に団長が一人、副団長が一人、特攻隊長が一人、そのほかは団員。といった感じにしたいのです。
スレッド一覧


712● Re[12]:find_bestについて[ moon ] 2003 08/02 23:53
> ある特定のプレイヤーの階級を出したいのです。(player_dataやpartner_dataで表示させます)
> ただ、組織毎に団長が一人、副団長が一人、特攻隊長が一人、そのほかは団員。といった感じにしたいのです。

暑くていつもより頭が回っていないのでまだ理解できていないのですが、自分と相手の階級のみを表示したいということですか?
自分はともかく相手の階級を表示するのは、No.707で書いたようにアイディアで乗り切るか負荷を覚悟で求める処理をするかの選択ですよ。

負荷が低いようなアイディアは思い付かないので、相手に対しても自分と同じ処理を適用するということで話を進めます。

sub partner_dataの先頭に、
  &get_file;
  &list_in;
  if($sp =~ /S\d/){
    $group = $&;
    $rt = &rate($wn, $lz, $kl, $dt);
    $rank = 0;
  }
  else{
    $group = $rank = '';
  }
  if($psp =~ /S\d/){
    $pgroup = $&;
    $prt = &rate($pwn, $plz, $pkl, $pdt);
    $prank = 0;
  }
  else{
    $pgroup = $prank = '';
  }
  foreach(@lstlines){
    ($rid, $rnm, $rps, $rjb, $rig, $rsp, $rbp, 〜) = split(/<>/, $_); # 〜には$wn、$lz、$kl、$dtに対応する値(左記と同じ名前付けだと$rwnなど)が含まれるように。
    if($id ne $rid && $rank ne '' && $rank < 3 && index($rsp, $group) >= 0 && $rt < &rate($rwn, $rlz, $rkl, $rdt)){
      $rank++;
      last if($rank >= 3 && $prank >= 3);
    }
    if($pid ne $rid && $prank ne '' && $prank < 3 && index($rsp, $pgroup) >= 0 && $prt < &rate($rwn, $rlz, $rkl, $rdt)){
      $prank++;
      last if($prank >= 3 && $rank >= 3);
    }
  }
を追加し、自分の階級と同様な処理で$prankを使って階級表示を行えばとりあえず相手の階級も表示されると思います。

# 本来無いはずのファイル読み込みとループなので負荷を本当に気を付けたほうが良いです。
スレッド一覧


713● 組織内の階級[ moon ] 2003 08/03 00:05
少しでも負荷を減らすために少し修正します。

  if($sp =~ /S\d/){
    $group = $&;
    $rt = &rate($wn, $lz, $kl, $dt);
    $rank = 0;
  }
  else{
    $group = $rank = '';
  }
  if($psp =~ /S\d/){
    $pgroup = $&;
    $prt = &rate($pwn, $plz, $pkl, $pdt);
    $prank = 0;
  }
  else{
    $pgroup = $prank = '';
  }
  if($rank ne '' || $prank ne ''){ # 上記を前に出し、両者が共に組織に属していない場合はループを行わないように変更した。
    &get_file;
    &list_in;
    foreach(@lstlines){
      ($rid, $rnm, $rps, $rjb, $rig, $rsp, $rbp, 〜) = split(/<>/, $_); # 〜には$wn、$lz、$kl、$dtに対応する値(左記と同じ名前付けだと$rwnなど)が含まれるように。
      if($id ne $rid && $rank ne '' && $rank < 3 && index($rsp, $group) >= 0 && $rt < &rate($rwn, $rlz, $rkl, $rdt)){
        $rank++;
        last if($rank >= 3 && $prank >= 3);
      }
      if($pid ne $rid && $prank ne '' && $prank < 3 && index($rsp, $pgroup) >= 0 && $prt < &rate($rwn, $rlz, $rkl, $rdt)){
        $prank++;
        last if($prank >= 3 && $rank >= 3);
      }
    }
  }
スレッド一覧


714● Re:組織内の階級[ masaki ] 2003 08/03 07:28
説明が下手ですみませんm(_ _)m
partner_dataへの表示方法ありがとうございました。

>>> ただ、組織毎に団長が一人、副団長が一人、特攻隊長が一人、そのほかは団員。といった感じにしたいのです。
ということについてなのですが、
>      if($id ne $rid && $rank ne '' && $rank < 3 && index($rsp, $group) >= 0 && $rt < &rate($rwn, $rlz, $rkl, $rdt)){
>        $rank++;
>        last if($rank >= 3 && $prank >= 3);
>      }
>      if($pid ne $rid && $prank ne '' && $prank < 3 && index($rsp, $pgroup) >= 0 && $prt < &rate($rwn, $rlz, $rkl, $rdt)){
>        $prank++;
>        last if($prank >= 3 && $rank >= 3);
>      }
これだと、組織に関係無く団長、副団長、特攻隊長が決まってしまうのではないでしょうか??(ちがったらすみません)
組織1に団長一人、副団長一人、特攻隊長一人
組織2に団長一人、副団長一人、特攻隊長一人

という感じにするのは難しいのでしょうか?(^^;
何度も何度も本当にすみません。
スレッド一覧

CGIROOM