私設SoS2オーナー応援BBS

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

スレッド

└◇1817:
購入ランキングについて [YOUME] 11/11 10:48

 └◇1818:Re:購入ランキングについて [moon] 11/11 20:38
  └◇1819:Re[2]:購入ランキングについて [YOUME] 11/12 13:31<-last


1817● 購入ランキングについて[ YOUME ] 2014 11/11 10:48
いつもお世話になっております。
購入ランキングについて試行錯誤して、カウントと表示は上手くいくようになり、いよいよリスト表示をさせようと思ったのですが何故かうまく動作してくれず…

ついでにログイン回数のリストも作ろうと思ったのですが、そちらも順位の順番に並ばず…

ログイン回数順の方は、よくわからない順番で並んでいました。

購入ランキングの回数と金額のリストの方は、ID順に並んでいる感じです。

何が悪いのかいろいろ悩んではいるのですが全く分からず、相談に来ました。
いつもお手数をおかけして恐縮ではございますが、診て頂けると助かります…

▼list_order.pl内
    $now = time - $def_dl * 86400;
    &get_file; &list_in;
    $Fm{'ps'} = $admpas;
    
    $TfSkip = "AttackPoint-DefensePoint-ItemBreak-Rate-Bounty-StealFiguar-StolenFigure-Fighter";
    $TvSkip = "BuyFigure-BuyPrice";
    
    foreach (0 .. $#lstlines)
    {
         ($id,$nm,$ps,$jb,$ig,$sp,$bp,$bn,$ak,$dd,$hp,$xp,$ab,$db,$av,$wn,$lz,$dt,$mn,$bg,$xi,$tm,$lf,
        $fe,$cm,$is,$ht,$fg,$rw,$kl,$sex,$itemmakemax,$list,$saying,$tep,$lasttm,$itbreak,$buyfig,$buymon,$steal,$stolen,$karma,$attribute,$fighter,$cm_length,$Dlv,$login,$buybuy) = split(/<>/,$lstlines[$_]);
        next if $Fm{order} ne 'ID' && $sp =~ /-NPC-/;
        if ($TfSkip =~ /$Fm{order}/ && $sp !~ /Tf/){next;}
        if ($TvSkip =~ /$Fm{order}/ && $sp !~ /Tv/){next;}
        $att = $ak + $ab; $def = $dd + $db; $itbreak = 0 if $itbreak !~ /[0-9]/; $buyfig = 0 if $buyfig !~ /[0-9]/; $buymon = 0 if $buymon !~ /[0-9]/; $steal = 0 if $steal !~ /[0-9]/; $stolen = 0 if $stolen !~ /[0-9]/;
            
        if ($Fm{'listtyper'} eq "action")
        {
            if (($Fm{'idbef'} || $Fm{'idaft'}) && $id =~ /[a-zA-Z]/){next;}
            if ($Fm{'idbef'} && $Fm{'idbef'} > $id){next;}
            if ($Fm{'idaft'} && $Fm{'idaft'} < $id){next;}
            if ($Fm{'mnbef'} && $Fm{'mnbef'} > $mn){next;}
            if ($Fm{'mnaft'} && $Fm{'mnaft'} < $mn){next;}
            if ($Fm{'rwbef'} && $Fm{'rwbef'} > $rw){next;}
            if ($Fm{'rwaft'} && $Fm{'rwaft'} < $rw){next;}
            if ($Fm{'atbef'} && $Fm{'atbef'} > $att){next;}
            if ($Fm{'ataft'} && $Fm{'ataft'} < $att){next;}
            if ($Fm{'defbef'} && $Fm{'defbef'} > $def){next;}
            if ($Fm{'defaft'} && $Fm{'defaft'} < $def){next;}
            if ($Fm{'dlvbef'} && $Fm{'Dlvbef'} > $Dlv){next;}
            if ($Fm{'dlvaft'} && $Fm{'Dlvaft'} < $Dlv){next;}

            if ($Fm{'loginbef'} && $Fm{'loginbef'} > $login){next;}
            if ($Fm{'loginaft'} && $Fm{'loginaft'} < $login){next;}
            if ($Fm{'buy_countbef'} && $Fm{'buy_countbef'} > $buy_count){next;}
            if ($Fm{'buy_countaft'} && $Fm{'buy_countaft'} < $buy_count){next;}
            if ($Fm{'buy_totalbef'} && $Fm{'buy_totalbef'} > $buy_total){next;}
            if ($Fm{'buy_totalaft'} && $Fm{'buy_totalaft'} < $buy_total){next;}

            if ($Fm{'mdbef'} && $Fm{'mdbef'} > $md){next;}
            if ($Fm{'mdaft'} && $Fm{'mdaft'} < $md){next;}

            if ($Fm{'av_alive'} && $av eq "alive"){next;}
            if ($Fm{'av_poison'} && $av eq "poison"){next;}
            if ($Fm{'av_withgost'} && $av eq "with ghost"){next;}
            if ($Fm{'av_dead'} && $av eq "dead"){next;}
            
            if ($Fm{'ss_ns'} && $fg eq "NS"){next;}
            if ($Fm{'ss_hs'} && $fg eq "HS"){next;}
            if ($Fm{'ss_ss'} && ($fg eq "SS" || $fg eq "DISCOVERS")){next;}
            if ($Fm{'ss_sn'} && ($fg ne "NS" && $fg ne "HS" && $fg ne "SS" && $fg ne "DISCOVERS")){next;}
            
            if ($sp =~ /Pb/){ $utype = 3; }
            elsif ($ps eq "$admpas" && $id ne "$ad_id"){ $utype = 5; }
            elsif ( $sp =~ /Tf/ && $sp =~ /Tv/) { $utype = 4; }
            elsif ( $sp =~ /Tf/) { $utype = 1; }
            else { $utype = 2; }
            
            if ($Fm{'typef'} && $utype == 1){next;}
            if ($Fm{'typev'} && $utype == 2){next;}
            if ($Fm{'typep'} && $utype == 3){next;}
            if ($Fm{'typefv'} && $utype == 4){next;}
            if ($Fm{'typenpc'} && $utype == 5){next;}
            
            if ($Fm{'listnameha'} && index($nm,$Fm{'listnameha'}) == -1){next;}
            if ($Fm{'listcomha'} && index($cm,$Fm{'listcomha'}) == -1){next;}
            
            if ($Fm{'play_setell'}){
                $stell_check = lc($Fm{'play_setell'});
                if($is !~ /$stell_check/){next}
            }
        }
            if ($itemmakemax !~ /[0-9]/) {$itemmakemax = 0;}
        if($Fm{'order'} eq "Delete"){
            if($ps eq $admpas || $sp =~ /-ND-/){ $time1 = "無期"; }
            else{
             if(!$del_tms || !$lasttm){$times = ($def_dl * 86400) - time + $tm;}
             else{$times = ($def_dl * 86400) - time + $lasttm;}
             $time1 = int(($times) / 86400); $times -= ($time1 * 86400);
             $time2 = int(($times) / 3600); $times -= ($time2 * 3600); $time2 = sprintf("%02d",$time2);
             $time3 = int(($times) / 60); $times -= ($time3 * 60); $time3 = sprintf("%02d",$time3); $times = sprintf("%02d",$times);
             $times = "$time1日$time2:$time3:$times";
             $time1 = "<!--$lasttm-->$times" if $lasttm;
             $time1 = "<!--$tm-->$times" if !$lasttm;
            }
        }
        if($Fm{'order'} eq "Rate" || $Fm{'mode'} eq '' || $Fm{'mode'} eq 'norm_save' || $Fm{'mode'} eq 'hide_save' || $Fm{'mode'} eq 'levy'){    if ($wn) { $rt = &rate($wn,$lz,$kl,$dt) } else { $rt = 0 }    }
     if ($Fm{'mode'} eq '' || $Fm{'mode'} eq 'norm_save' || $Fm{'mode'} eq 'hide_save' || $Fm{'mode'} eq 'levy' || $Fm{'mode'} eq 'con_game')
        {
     &find_del; &find_best;
     if ($fg eq '' || $fg =~ /B/) { $playernow++; $playernow_name .= '<br>' if $playernow_name; $playernow_name .= "<img src=../wakiyaku/itmimg/N_etc/2011-12-23_3-141.gif><b><FONT color=#F0E68C>$nm</FONT></b> が走ってるみたいです。"; }
     }
$cm_length = length($cm);
         %order =
        (
            'ID',$id,
            'Name',$nm,
            'Rate',$rt,
            'Money',$mn,
            'Bounty',$rw,
            'Job',$jb,
            'AttackPoint',$att,
            'DefensePoint',$def,
            'Delete',$time1,
            'DlvMaster',$Dlv,
            'LoginCount',$login,
            'BuyCount',$buy_count,
            'BuyMoney',$buy_total,
            'Mdcoins',$md,
            'ItemMake',$itemmakemax,
            'ItemBreak',$itbreak,
            'BuyFigure',$buymon,
            'BuyPrice',$buyfig,
            'StealFigure',$steal,
            'StolenFigure',$stolen,
            'Fighter',$fighter,
            'Comment',$cm_length
        );
if ($sp =~ /-NPC-/){ next }
            push (@odrlines,"$order{$Fm{'order'}}<>$lstlines[$_]");
    }
    if ($Fm{'order'} ne 'Name' && $Fm{'order'} ne 'Job' && $Fm{'order'} ne 'ID' && $Fm{'order'} ne 'Delete' && $Fm{'order'} ne 'Dlv' && $Fm{'order'} ne 'Mdcoins')
    {
        @odrlines = sort({$b <=> $a} @odrlines);
    }
    else
    {
        @odrlines = sort(@odrlines);
    }

1;
コメントを書く(引用) | スレッド一覧


1818● Re:購入ランキングについて[ moon ] 2014 11/11 20:38
> いつもお世話になっております。
> 購入ランキングについて試行錯誤して、カウントと表示は上手くいくようになり、いよいよリスト表示をさせようと思ったのですが何故かうまく動作してくれず…
>
> ついでにログイン回数のリストも作ろうと思ったのですが、そちらも順位の順番に並ばず…
>
> ログイン回数順の方は、よくわからない順番で並んでいました。
>
> 購入ランキングの回数と金額のリストの方は、ID順に並んでいる感じです。
>
> 何が悪いのかいろいろ悩んではいるのですが全く分からず、相談に来ました。
> いつもお手数をおかけして恐縮ではございますが、診て頂けると助かります…

購入ランキングのほうは、$buy_countと$buy_totalが設定されていないため、というのが1つ目の原因だと思います。
「if ($Fm{'listtyper'} eq "action")」が行われる前に「my ($buy_count, $buy_total) = split(/\Q△\E/o, $buybuy);」を行うようにしてみてください。

2つ目の原因およびログイン回数のほうは、「〜,$fighter,$cm_length,$Dlv,$login,$buybuy) = split(/<>/,$lstlines[$_]);」の部分が実際のデータの並びと異なるため、だと思います。(以前の情報では「〜,$fighter,$Dg,$Dm,$md,$sj,$login) = split(/<>/,$_[0]);」となっていましたので。)
# そうすると$cm_lengthはともかく$Dlvを使っている部分も正常に動作していないということになるかと思います。

あと、今回の件とはまったく関係ないのですが以下の%Fm変数のキーの大文字小文字が&&の前後で異なっていますが大丈夫なのでしょうか?
  if ($Fm{'dlvbef'} && $Fm{'Dlvbef'} > $Dlv){next;}
  if ($Fm{'dlvaft'} && $Fm{'Dlvaft'} < $Dlv){next;}
コメントを書く(引用) | スレッド一覧


1819● Re[2]:購入ランキングについて[ YOUME ] 2014 11/12 13:31
ご指導ありがごうございます!
正常に稼働するようになりました!



> # そうすると$cm_lengthはともかく$Dlvを使っている部分も正常に動作していないということになるかと思います。

改修前から$Dlvは何故か上手く動作しているので、謎です…

> あと、今回の件とはまったく関係ないのですが以下の%Fm変数のキーの大文字小文字が&&の前後で異なっていますが大丈夫なのでしょうか?
御指摘ありがとうございます!
早速修正してきました…

無事に購入価格、個数、ログイン日数のランキングが出せるようになり嬉しいです!

次は…タイムボス(仮)いわゆるレイドボスにチャレンジしようと思います…!(別途改めて質問させてください!)
コメントを書く(引用) | スレッド一覧

CGIROOM