私設SoS2オーナー応援BBS

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

スレッド

└◇1838:
削除順リストを、ログインした順にする方法 [YOUME] 05/08 12:03

 └◇1839:Re:削除順リストを、ログインした順にする方法 [moon] 05/08 20:30
  └◇1840:Re[2]:削除順リストを、ログインした順にする方法 [YOUME] 05/11 09:13<-last


1838● 削除順リストを、ログインした順にする方法[ YOUME ] 2015 05/08 12:03
ご無沙汰しております、YOUMEです。
いつもお世話になっております。

今回も、お知恵を貸して頂ければと思い、やってきました。

かなり前に「削除順」というリスト表示を実装したのですが、ログイン順にしたいと考えております。

言葉だけは「ログイン順」としているのですが、
実際のところ削除日数が近い順番から並んでしまっているのが現状です。

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,$md,$sj,$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]/;
my ($buy_count, $buy_total) = split(/\Q△\E/o, $buybuy);

        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 "ログイン")
        {
            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,
            '名前',$nm,
            'Rate',$rt,
            'G',$mn,
            'ブラックリスト',$rw,
            '職業',$jb,
            '攻撃力',$att,
            '防御力',$def,
            'ログイン',$time1,
            '合成回数',$itemmakemax,
            'ItemBreak',$itbreak,
            'BuyFigure',$buymon,
            'BuyPrice',$buyfig,
            'StealFigure',$steal,
            'StolenFigure',$stolen,
            'Fighter',$fighter,
            'ドラゴンマスターレベル',$Dlv,
            'Mdcoins',$md,
            'ログイン回数',$login,
            '総購入回数',$buy_count,
            '総購入金額',$buy_total,
            'Comment',$cm_length
        );
    if ($sp =~ /-NPC-/){ next }
    push (@odrlines,"$order{$Fm{'order'}}<>$lstlines[$_]");
    }
    if ($Fm{'order'} ne 'Name' && $Fm{'order'} ne '職業' && $Fm{'order'} ne 'ID' && $Fm{'order'} ne 'ログイン' && $Fm{'order'} ne 'Dlv' && $Fm{'order'} ne 'Mdcoins')
    {@odrlines = sort({$b <=> $a} @odrlines);}
    else{@odrlines = sort(@odrlines);}

1;
----------------------
現状こんな感じになっております。

ログインした順番に並び替えることはできるのでしょうか?
今までもいろいろ試したことはあったのですが、まったく再現できず…

もし可能であれば、ご教授頂けたら幸いです…!
コメントを書く(引用) | スレッド一覧


1839● Re:削除順リストを、ログインした順にする方法[ moon ] 2015 05/08 20:30
試していませんが以下のようにするとどうでしょうか?
1. 「'ログイン',$time1,」を「'ログイン' => $ps eq $admpas || index($sp, '-ND-') != -1 ? 0 : $lasttm,」に変更。
    ※ 比較用の値として$lasttmまたは0を指定する処理です。
    ※ キーと値の区切りがカンマだとハッシュであることが認識しづらいので「=>」にしましたが他と合わせるのでしたらカンマでもOKです。
2. 「 && $Fm{'order'} ne 'ログイン'」を削除。
    ※ 降順に並べるために「({$b <=> $a}」のあるsortに処理が行くように、です。
3. 「if($Fm{'order'} eq "ログイン"){〜}」を表示する箇所の直前付近に移動して内容を変更する。
    ※ $lasttmの表示文字列作成を表示の直前に行う、ということです。
コメントを書く(引用) | スレッド一覧


1840● Re[2]:削除順リストを、ログインした順にする方法[ YOUME ] 2015 05/11 09:13
ご指導、感謝です!
無事にログイン順に並びかえることができました!
本当に助かりました!ありがとうございます!
コメントを書く(引用) | スレッド一覧

CGIROOM