私設SoS2オーナー応援BBS

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

スレッド

└◇703:
Re[3]:find_bestについて [moon] 08/02 15:00

 └◇704:Re[4]:find_bestについて [masaki] 08/02 17:29
  └◇705:Re[5]:find_bestについて [moon] 08/02 17:38
   └◇706:Re[6]:find_bestについて [masaki] 08/02 18:55
    └◇707:Re[7]:find_bestについて [moon] 08/02 19:49
     └◇708:Re[8]:find_bestについて [masaki] 08/02 22:07
      └◇709:Re[9]:find_bestについて [moon] 08/02 22:27
       └◇710:Re[10]:find_bestについて [moon] 08/02 22:40
        └◇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


703● Re[3]:find_bestについて[ moon ] 2003 08/02 15:00
> 組織に所属している人のレートから、階級を表示したいのです(^^;
> (各組織ごとに)
> 1番レートが高い人が団長次が副団長、その次が特攻隊長でその他は団員という感じです(^^;;
> 表示場所はplayer's dataとリストとpartner dataです。
> ご迷惑をお掛けしますm(_ _)m

う〜ん。
下記以外は、負荷を考えるとお勧めできないですけれどね・・・。

一番増加する負荷が少ないと思うのは、プレイヤーデータだけが表示される場面だけでの表示なのでとりあえずこの場合だけを書きます。

sub normal_actionで、
  foreach $line (@lstlines) {
    ($pid,$pnm,$pps,$pjb,$pig,$psp,$pbp,$others) = split(/<>/,$line);
    if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }
    else { print qq|<option value="$pid">$pid:$pnm($pjb)\n| }
  }
を、
  @rcdlines = &get_user("$Fm{'id'}"); # 追加
  if($sp =~ /S\d/){$group = $&; $rt = &rate($wn, $lz, $kl, $dt); $rank = 0;}else{$group = $rank = '';} # 追加
  foreach $line (@lstlines) {
    ($pid,$pnm,$pps,$pjb,$pig,$psp,$pbp,〜,$others) = split(/<>/,$line); # $pwn、$plz、$pkl、$pdtが取得されていないなら取得できるように変更。
    if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }
    else {
      $rank++ if($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt)); # 追加
      print qq|<option value="$pid">$pid:$pnm($pjb)\n|
    }
  }
そして、sub player_dataで、
  if($rank ne ''){
    # ('団長', '副団長', '特攻隊長', '団員')[$rank]という感じで階級を得て表示
  }
  else{
    # 所属していない場合の表示
  }
と表示処理を行います。
処理の確認どころか文法チェックさえやっていないので間違いがあるかもしれませんが適宜指摘してください。

# 相手のステータス画面でも同様にループさせて判定を繰り返せば階級を表示させることは可能ですが、オリジナルではループが無い箇所なのでそれだけファイル読み込みやループ処理でかなり負荷が増加するはずです。
スレッド一覧


704● Re[4]:find_bestについて[ masaki ] 2003 08/02 17:29
ありがとうございました。(^^
できました!
それで、できたのはそれでよかったのですが
># ('団長', '副団長', '特攻隊長', '団員')[$rank]という感じで階級を得て表示
というのを
@ranking = ('団長', '副団長', '特攻隊長', '団員');
print qq|ランク:<b>$ranking[$rank]</b><br>\n|
というかんじでやってみたのですが、moonさんの仰っているのと違うのかな?と思ったのですが。
なにはともあれ、表示されたのでよかったです。
ありがとうございました!
(本当にいつもありがとうございますm(_ _)m)
スレッド一覧


705● Re[5]:find_bestについて[ moon ] 2003 08/02 17:38
> 表示場所はplayer's dataとリストとpartner dataです。

ふと読み直したらここの「リスト」を読み飛ばしていたらしく、考えていたのですが少し書いてみたところ整理するのが面倒そうです。

> ありがとうございました。(^^
> できました!
> それで、できたのはそれでよかったのですが
> ># ('団長', '副団長', '特攻隊長', '団員')[$rank]という感じで階級を得て表示
> というのを
> @ranking = ('団長', '副団長', '特攻隊長', '団員');
> print qq|ランク:<b>$ranking[$rank]</b><br>\n|
> というかんじでやってみたのですが、moonさんの仰っているのと違うのかな?と思ったのですが。
> なにはともあれ、表示されたのでよかったです。
> ありがとうございました!
> (本当にいつもありがとうございますm(_ _)m)

動作としては同じはずですが、変な動作だったのでしょうか?
スレッド一覧


706● Re[6]:find_bestについて[ masaki ] 2003 08/02 18:55
> > 表示場所はplayer's dataとリストとpartner dataです。
>
> ふと読み直したらここの「リスト」を読み飛ばしていたらしく、考えていたのですが少し書いてみたところ整理するのが面倒そうです。
プレイヤーデータとパートナーだけで十分です〜(^^
> 動作としては同じはずですが、変な動作だったのでしょうか?
いえ。違う方法もあるのかな?と思っただけです(^^;
ありがとうございました!
スレッド一覧


707● Re[7]:find_bestについて[ moon ] 2003 08/02 19:49
> > > 表示場所はplayer's dataとリストとpartner dataです。
> >
> > ふと読み直したらここの「リスト」を読み飛ばしていたらしく、考えていたのですが少し書いてみたところ整理するのが面倒そうです。
> プレイヤーデータとパートナーだけで十分です〜(^^
> > 動作としては同じはずですが、変な動作だったのでしょうか?
> いえ。違う方法もあるのかな?と思っただけです(^^;
> ありがとうございました!

了解しました。
前述の理由により相手の階級は求めていないので、自分の階級しか分からないんですよね・・・。
まあ、そこはアイディアもしくは負荷に対する覚悟で乗り切ってください。(笑)
スレッド一覧


708● Re[8]:find_bestについて[ masaki ] 2003 08/02 22:07
> > > > 表示場所はplayer's dataとリストとpartner dataです。
> > >
> > > ふと読み直したらここの「リスト」を読み飛ばしていたらしく、考えていたのですが少し書いてみたところ整理するのが面倒そうです。
> > プレイヤーデータとパートナーだけで十分です〜(^^
> > > 動作としては同じはずですが、変な動作だったのでしょうか?
> > いえ。違う方法もあるのかな?と思っただけです(^^;
> > ありがとうございました!
>
> 了解しました。
> 前述の理由により相手の階級は求めていないので、自分の階級しか分からないんですよね・・・。
> まあ、そこはアイディアもしくは負荷に対する覚悟で乗り切ってください。(笑)
新たな質問なのですが、
勢力別でランクを出したい場合はどのようにすればいいのでしょうか??
if($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S1/){$rank++;}
elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S3/){$rank++;}
elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S5/){$rank++;}
elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S7/){$rank++;}
elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S8/){$rank++;}
のようにしたのですが上手くいきません。
S1,S3,S5,S7,S8が各組織を表す記号です。(^^;
スレッド一覧


709● Re[9]:find_bestについて[ moon ] 2003 08/02 22:27
> 新たな質問なのですが、
> 勢力別でランクを出したい場合はどのようにすればいいのでしょうか??
> if($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S1/){$rank++;}
> elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S3/){$rank++;}
> elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S5/){$rank++;}
> elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S7/){$rank++;}
> elsif($rank ne '' && $rank < 3 && index($psp, $group) >= 0 && $rt < &rate($pwn, $plz, $pkl, $pdt )&& $sp =~ /Tf/&& $sp =~ /S8/){$rank++;}
> のようにしたのですが上手くいきません。
> S1,S3,S5,S7,S8が各組織を表す記号です。(^^;

どこでの話でしょうか?
勢力別で出したいのは分かるのですが、$rankや$groupが共用されているので出したい結果が見えてこないです。

# スクリプトの書き方からすると、ある特定の一人の組織内での階級を求めようとしているように思うのですが。(つまり先ほど書いたのと似たような処理・・・)
スレッド一覧


710● Re[10]:find_bestについて[ moon ] 2003 08/02 22:40
> # スクリプトの書き方からすると、ある特定の一人の組織内での階級を求めようとしているように思うのですが。(つまり先ほど書いたのと似たような処理・・・)

補足すると、ある特定のプレイヤーの階級だけを出したいのではなく一度に全ての組織の全階級を求めたいのでしょうか、ということです。
もしそうだとすると、前述の通り少し面倒な処理になりそうなので考えるのに躊躇しています・・・。
スレッド一覧


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