▼スレッド
│
└◇712:Re[12]:find_bestについて [moon] 08/02 23:53
└◇713:組織内の階級 [moon] 08/03 00:05
└◇714:Re:組織内の階級 [masaki] 08/03 07:28
> ある特定のプレイヤーの階級を出したいのです。(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を使って階級表示を行えばとりあえず相手の階級も表示されると思います。
# 本来無いはずのファイル読み込みとループなので負荷を本当に気を付けたほうが良いです。
少しでも負荷を減らすために少し修正します。スレッド一覧
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);
}
}
}
説明が下手ですみません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に団長一人、副団長一人、特攻隊長一人
…
という感じにするのは難しいのでしょうか?(^^;
何度も何度も本当にすみません。