私設SoS2オーナー応援BBS

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

スレッド

└◇1803:
Re[6]:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/20 12:00

 └◇1804:Re[7]:ログインボーナスとタイムボスに購入ランキング [moon] 10/20 19:13
  └◇1805:Re[8]:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/21 11:49
   └◇1806:Re[9]:ログインボーナスとタイムボスに購入ランキング [moon] 10/21 19:37
    └◇1807:Re[10]:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/22 09:49
     └◇1808:Re[11]:ログインボーナスとタイムボスに購入ランキング [moon] 10/22 19:01
      └◇1809:Re[12]:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/23 09:42
       └◇1810:Re[13]:ログインボーナスとタイムボスに購入ランキング [moon] 10/23 19:34
        └◇1811:Re[14]:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/24 11:47


1803● Re[6]:ログインボーナスとタイムボスに購入ランキング[ YOUME ] 2014 10/20 12:00
ご返信感謝です!
早速いろいろ考えながらやってみたのですが、ログインしようとすると500エラーが出てしまい、どこを改善すべきか分からず…

($loginの書き足しは行いました。)

make_con.pl内に、

##ログインボーナス
my $current_text = sprintf('%04d%02d%02d', (gmtime(time + 3600 * 9))[5, 4, 3]);
my $last_text = sprintf('%04d%02d%02d', (gmtime($lasttm + 3600 * 9))[5, 4, 3]);
if($current_text ne $last_text){
$login++;

&splititem('i');
if($login <= 1){
# 1日目
    push(@items, '仮アイテム1△00000010000000CaTi△0△1△img/00.gif');
}
elsif($login == 2){
    push(@items, '仮アイテム2△00000010000000CaTi△0△1△img/00.gif');
}
elsif($login <= 10){
    push(@items, '仮アイテム3△00000010000000CaTi△0△1△img/00.gif');
}
elsif($login <= 100){
    push(@items, '仮アイテム4△00000010000000CaTi△0△1△img/00.gif');
}
else{
    push(@items, '仮アイテム5△00000010000000CaTi△0△1△img/00.gif');
}
&joinitem('i');
}
#ログインボーナス

> >2.1. ログイン時間とログイン日数を更新する。
> >2.2. $loginを更新する。
の処理を追記すべきだったのかも?と思いつつ、その書き方が分からず…

いつもお手数をおかけしてしまい恐縮ではございますが、ご教授頂けたら助かります…
コメントを書く(引用) | スレッド一覧


1804● Re[7]:ログインボーナスとタイムボスに購入ランキング[ moon ] 2014 10/20 19:13
> ご返信感謝です!
> 早速いろいろ考えながらやってみたのですが、ログインしようとすると500エラーが出てしまい、どこを改善すべきか分からず…

各「push(@items, ・・・);」の前に全角空白があるのが原因だと思います。(この掲示板はコードを記載するのには向いていないので全角空白でインデントを表現しています。)
ちなみに、500エラーの時は以下のようにして原因を探すと良いと思います。
1. サーバーのCGIエラーログが見れるのであればそれを確認する。
2. コマンドプロンプトで「perl -wc スクリプトファイルのパス」を実行して文法をチェックする。
3. 上記2つを行っても不明な場合はsos2.cgiの先頭付近(#!の行の直下くらい)に「use CGI::Carp qw(fatalsToBrowser);」を追加してCGIを実行してみる。(これはデバッグ用の記述なので本番用には削除もしくはコメントアウトしておいたほうが良いです。)

> > >2.1. ログイン時間とログイン日数を更新する。
> > >2.2. $loginを更新する。
> の処理を追記すべきだったのかも?と思いつつ、その書き方が分からず…

「$login++;」が該当の処理です。
コメントを書く(引用) | スレッド一覧


1805● Re[8]:ログインボーナスとタイムボスに購入ランキング[ YOUME ] 2014 10/21 11:49
ありがとうございます!
無事にできました!
しばらく動作確認しながら様子を見ています。


次に商品を買った数のカウントについて少し考え始めたのですが、
現状のsub buy_afterは以下のような感じになっています。

# Sub Buy After #
sub buy_after {
    @rcdlines = &get_user("$Fm{'id'}");
    @prclines = &get_partner("$Fm{'pd'}");
    @psaying = split(/△/,$psaying);
@opa = split(/□/,$psaying[26]);
$op = int(rand(@opa));
$psaying[26] = $opa[$op];
    return if $fg ne 'BB';
    &splititem('iI');
    if($psp =~ /Pb/ && $pvu_hm){&buypv_after; return}
    push (@msg,"$pnm「$psaying[26]」") if $psaying[26];
    if($psp !~ /Pb/)
    {
        &sales_make;
        @salesplay = &opendat("$saldir$datedata\sp.dat");
        @salesitem = &opendat("$saldir$datedata\si.dat");
    }

    $space = $xi - $#items - 1;
    foreach (0 .. $#pitems)
    {
        ($item,$sts,$price,$imaxs,$iimg,$yoya) = split(/△/,$pitems[$_]);
        $returnbag = 1;
        if ($Fm{"$_"})
        {
            if ($Fm{"check$_"} ne "$item($price\G)")
            {
                push (@msg,$Fm{"check$_"}."の配列が変わりました。もう1度買ってください。");
            }
            elsif ($price eq "")
            {
                push (@msg,"$itemは価格設定されていません。");
            }
            elsif ($mn >= $price)
            {
                if ($space)
                {
                    $mn -= $price; $pmn += $price; $pbuyfig += $price; $pbuymon++;
                    &sales_data($item,$price) if $psp !~ /Pb/;
                    push (@msg,"$itemを買いました");
            $words .= "<br><FONT color=#6B8E23>[$id] $nmに<b>$item</b>を$price\Gで売りました。</FONT>";
                    push(@items,"$item△$sts△0△1△$iimg△"); $space--; $returnbag = 0;
                }else{
                    push (@msg,"<FONT color=#eead73>$itemを持ちきれません。</FONT>");
                }
            }
            else
            {
                push (@msg,"<FONT color=#eead73>お金が足りません</FONT>");
            }
        }
        if ($returnbag) { push(@newitems,$pitems[$_]) }
    }
    @pitems = @newitems; &joinitem('iI');

    if($psp !~ /Pb/)
    {
        &writedat("$saldir$datedata\sp.dat",@salesplay);
        &writedat("$saldir$datedata\si.dat",@salesitem);
    }
    $fg = '';
    if ($psp !~ /Ng/) {$WORDS = 1;$fg = 'WB'}
    &userout; &add_record($words);
}

新しいパラメーターを「$buybuy」にしようと思っているのですが、
買った時に「買った個数」と「買った値段」を集計して反映したいと考えた時、どうすればいいのか、正直分かりませんでした…。

そして組み込みたいと考えている販売リストも、もともとあるリストが独自な感じになっており、

salesitrank.plとsalesprrank.plで構成されていると認識しており、ここに買った個数と買った値段の、購入者ランキングを追加しようと考えた時、どのようにすればいいのか、分からず…
こちらに追加するのは、難しいでしょうか?

▼salesitrank.pl内
&header;
    &sales_make;
    opendir(DIR,"$saldir") || &error("セールス読みこみエラー");
    @salefile = sort grep /si.dat/,readdir(DIR);
    closedir(DIR);
    
    $canweek = &sales_check;
    
    if($Fm{rtype} eq "daily")
    {
        @salesitem = &opendat("$saldir$Fm{day}\si.dat");
        ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]); splice(@salesitem,0,1);
        $pr_t = "デイリー";
        $pr_d = "$sl_y" . "." . sprintf("%02d",$sl_m) . "." . sprintf("%02d",$sl_d);
        @salesitem = sort({$b cmp $a} @salesitem);
    }
    elsif($Fm{rtype} eq "weekly")
    {
        ($bef,$aft) = split(/to/,$Fm{day2});
        foreach(0 .. $#salefile)
        {
            $bingo = 1 if $salefile[$_] eq "$bef\si.dat";
            if($bingo)
            {
                @salesitemday = &opendat("$saldir$salefile[$_]");
                splice(@salesitemday,0,1);
                push(@salesitem,@salesitemday);
            }
            last if $salefile[$_] eq "$aft\si.dat";
        }
        @salesitem = sort({$b cmp $a} @salesitem);
        $c2 = $c3 = $c4 = $c5 = 0; @new=();
        foreach(0 .. $#salesitem-1)
        {
            ($a1,$a2,$a3,$a4,$a5,$other) = split(/\t/, $salesitem[$_]);
            ($b1,$b2,$b3,$b4,$b5,$other) = split(/\t/, $salesitem[$_+1]);
            if($a1 eq $b1)
            {
                $c2 += $a2; $c3 += $a3;
                $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
                $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
            }
            else
            {
                $a2 += $c2; $c2 = 0;
                $a3 += $c3; $c3 = 0;
                $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
                $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
                push(@new,"$a1\t$a2\t$a3\t$c4\t$c5\t$other");
                $c4=0; $c5=0;
            }
        }
        ($a1,$a2,$a3,$a4,$a5,$other) = split(/\t/, $salesitem[$#salesitem]);
        $a2 += $c2; $c2 = 0;
        $a3 += $c3; $c3 = 0;
        $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
        $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
        push(@new,"$a1\t$a2\t$a3\t$c4\t$c5\t$other");
        $c4=0; $c5=0;
        @salesitem = @new;
        $pr_t = "ウィークリー";
        $pr_d = substr($bef,0,4) . "." . substr($bef,4,2) . "." . substr($bef,6,2) . "〜";
        $pr_d .= substr($aft,0,4) . "." . substr($aft,4,2) . "." . substr($aft,6,2);
    }
    &unlock;
    
    foreach(0 .. $#salesitem)
    {
        ($slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
        $salesitem[$_] = "$slitmax\t$salesitem[$_]" if $Fm{order} eq "fig";
        $salesitem[$_] = "$slitpr\t$salesitem[$_]" if $Fm{order} eq "pri";
    }
    
@salesitem = sort({$b<=>$a} @salesitem);
print qq|<table align=center border=0 bgcolor=$tblbdc cellspacing=1 cellpadding=$tblcpd>\n|;
print qq|<tr><td colspan=7 bgcolor=$tblbdc align=center><b><font color=$scdclr>$pr_tセールスランキング(商品部門):$pr_d</b></font></td></tr>\n|;
print qq|<tr bgcolor=$nmclr><td><font color=$scdclr>順位</font></td><td><font color=$scdclr>商品名</font></td><td><font color=$scdclr>売上数量</font></td><td><font color=$scdclr>総売上価格</font></td><td><font color=$scdclr>平均売上価格</font></td><td><font color=$scdclr>最大単販売額</font></td><td><font color=$scdclr>最低単販売額</font></td></tr>\n|;
foreach (0 .. $#salesitem) {
    ($order,$slitnm,$slitmax,$slitpr,$slitmaxp,$slitminp,$other) = split(/\t/, $salesitem[$_]);
    $avepr = int($slitpr/$slitmax); $rank = $_ + 1 if $order != $bef; $bef = $order;
print qq|<tr bgcolor=#FFFFFF><td>$rank</td><td>$slitnm</td><td>$slitmax\個</td><td>$slitpr\G</td><td>$avepr\G</td><td>$slitmaxp\G</td><td>$slitminp\G</td></tr>\n|;
}
    &form('start');
    print qq|<TR><TD colspan=7>\n|;
    
    print qq|<TABLE width=100%><TR><TD>\n|;
    print"<SELECT name=mode>\n";
    print"<OPTION value=salesitrank SELECTED>商品部門\n";
    print"<OPTION value=salesprrank>販売者部門\n";
    print"</SELECT>\n";
    print"<SELECT name=order>\n";
    if($Fm{order} eq "fig")
    {
        print"<OPTION value=fig SELECTED>売上数量順\n";
        print"<OPTION value=pri>売上総額順\n";
    }
    else
    {
        print"<OPTION value=fig>売上数量順\n";
        print"<OPTION value=pri SELECTED>売上総額順\n";
    }
    print"</SELECT>\n";
    print"</TD><TD>";
    if($Fm{rtype} eq "daily")
    {
        &input('radio','rtype','daily',' checked',"<font color=$scdclr><b>DAILY</b></font><BR>");
        &input('radio','rtype','weekly','',"<font color=$scdclr><b>WEEKLY</b></font><BR>") if $canweek;
    }
    elsif($Fm{rtype} eq "weekly")
    {
        &input('radio','rtype','daily','',"<font color=$scdclr><b>DAILY</b></font><BR>");
        &input('radio','rtype','weekly',' checked',"<font color=$scdclr><b>WEEKLY</b></font><BR>") if $canweek;
    }
    print"</TD><TD>";
    print"<SELECT name=day>\n";
    foreach(0 .. $#salefile)
    {
        $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
        $writeb = substr($salefile[$_],0,8);
        if($Fm{day} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
        else{print"<OPTION value=\"$writeb\">$writea\n";}
    }
    print"</SELECT><BR>\n";
    $writea = $writeb = "";
    
    if($canweek)
    {
        print"<SELECT name=day2>\n";
        foreach(0 .. $#salefile)
        {
            @salesitem = &opendat("$saldir$salefile[$_]");
            $salesitem[0] =~ s/[\n\r]//g;
            ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]);
            if(!$sl_w)
            {
                $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb = substr($salefile[$_],0,8);
            }
            if($sl_w == 6 && $writea)
            {
                $writea .= "〜" . substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb .= "to" . substr($salefile[$_],0,8);
                if($Fm{day2} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
                else{print"<OPTION value=\"$writeb\">$writea\n";}
            }
        }
        print"</SELECT>\n";
    }
    
    print"</TD><TD>";
    print"<input type=submit value=\"表\示\"><BR>\n";
    print qq|</TD></TR></table>\n|;
    
    print qq|</TD></TR></table>\n|;
1;


▼salesprrank.pl内
    &sales_make;
    opendir(DIR,"$saldir") || &error("セールス読みこみエラー");
    @salefile = sort grep /sp.dat/,readdir(DIR);
    closedir(DIR);
    
    $canweek = &sales_check;
    
    if($Fm{rtype} eq "daily")
    {
        @salesitem = &opendat("$saldir$Fm{day}\sp.dat");
        ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]); splice(@salesitem,0,1);
        $pr_t = "デイリー";
        $pr_d = "$sl_y" . "." . sprintf("%02d",$sl_m) . "." . sprintf("%02d",$sl_d);
        @salesitem = sort({$b cmp $a} @salesitem);
    }
    elsif($Fm{rtype} eq "weekly")
    {
        ($bef,$aft) = split(/to/,$Fm{day2});
        foreach(0 .. $#salefile)
        {
            $bingo = 1 if $salefile[$_] eq "$bef\sp.dat";
            if($bingo)
            {
                @salesitemday = &opendat("$saldir$salefile[$_]");
                splice(@salesitemday,0,1);
                push(@salesitem,@salesitemday);
            }
            last if $salefile[$_] eq "$aft\sp.dat";
        }
        @salesitem = sort({$b cmp $a} @salesitem);
        $c2 = $c3 = 0; @new=();
        foreach(0 .. $#salesitem-1)
        {
            ($a1,$a2,$a3,$other) = split(/\t/, $salesitem[$_]);
            ($b1,$b2,$b3,$other) = split(/\t/, $salesitem[$_+1]);
            if($a1 eq $b1)
            {
                $c2 += $a2; $c3 += $a3;
            }
            else
            {
                $a2 += $c2; $c2 = 0;
                $a3 += $c3; $c3 = 0;
                push(@new,"$a1\t$a2\t$a3\t$other");
            }
        }
        ($a1,$a2,$a3,$other) = split(/\t/, $salesitem[$#salesitem]);
        $a2 += $c2; $c2 = 0;
        $a3 += $c3; $c3 = 0;
        push(@new,"$a1\t$a2\t$a3\t$other");
        @salesitem = @new;
        $pr_t = "ウィークリー";
        $pr_d = substr($bef,0,4) . "." . substr($bef,4,2) . "." . substr($bef,6,2) . "〜";
        $pr_d .= substr($aft,0,4) . "." . substr($aft,4,2) . "." . substr($aft,6,2);
    }
    
    &unlock;
    
    foreach(0 .. $#salesitem)
    {
        ($slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
        $salesitem[$_] = "$slitmax\t$salesitem[$_]" if $Fm{order} eq "fig";
        $salesitem[$_] = "$slitpr\t$salesitem[$_]" if $Fm{order} eq "pri";
    }
    
@salesitem = sort({$b<=>$a} @salesitem);
&header;
print qq|<table align=center border=0 bgcolor=$tblbdc cellspacing=1 cellpadding=$tblcpd>\n|;
print qq|<tr><td colspan=4 bgcolor=$tblbdc align=center><b><font color=$scdclr>$pr_tセールスランキング(販売者部門):$pr_d</font></b></td></tr>\n|;
print qq|<tr bgcolor=$nmclr><td><font color=$scdclr>順位</font></td><td><font color=$scdclr>[ID]販売者名</font></td><td><font color=$scdclr>売上数量</font></td><td><font color=$scdclr>総売上価格</font></td></tr>\n|;
foreach (0 .. $#salesitem) {
    ($order,$slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
    $rank = $_ + 1 if $order != $bef; $bef = $order;
print qq|<tr bgcolor=$ltclr><td>$rank</td><td>$slitnm</td><td>$slitmax\個</td><td>$slitpr\G</td></tr>\n|;
}
    &form('start');
    print qq|<TR><TD colspan=4>\n|;
    
    print qq|<TABLE width=100%><TR><TD>\n|;
    print"<SELECT name=mode>\n";
    print"<OPTION value=salesitrank>商品部門\n";
    print"<OPTION value=salesprrank SELECTED>販売者部門\n";
    print"</SELECT>\n";
    print"<SELECT name=order>\n";
    if($Fm{order} eq "fig")
    {
        print"<OPTION value=fig SELECTED>売上数量順\n";
        print"<OPTION value=pri>売上総額順\n";
    }
    else
    {
        print"<OPTION value=fig>売上数量順\n";
        print"<OPTION value=pri SELECTED>売上総額順\n";
    }
    print"</SELECT>\n";
    print"</TD><TD>";
    if($Fm{rtype} eq "daily")
    {
        &input('radio','rtype','daily',' checked',"<b><font color=$scdclr>DAILY</font></b><BR>");
        &input('radio','rtype','weekly','',"<b><font color=$scdclr>WEEKLY</font></b><BR>") if $canweek;
    }
    elsif($Fm{rtype} eq "weekly")
    {
        &input('radio','rtype','daily','',"<b><font color=$scdclr>DAILY</font></b><BR>");
        &input('radio','rtype','weekly',' checked',"<b><font color=$scdclr>WEEKLY</font></b><BR>") if $canweek;
    }
    print"</TD><TD>";
    print"<SELECT name=day>\n";
    foreach(0 .. $#salefile)
    {
        $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
        $writeb = substr($salefile[$_],0,8);
        if($Fm{day} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
        else{print"<OPTION value=\"$writeb\">$writea\n";}
    }
    print"</SELECT><BR>\n";
    $writea = $writeb = "";
    
    if($canweek)
    {
        print"<SELECT name=day2>\n";
        foreach(0 .. $#salefile)
        {
            @salesitem = &opendat("$saldir$salefile[$_]");
            $salesitem[0] =~ s/[\n\r]//g;
            ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]);
            if(!$sl_w)
            {
                $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb = substr($salefile[$_],0,8);
            }
            if($sl_w == 6 && $writea)
            {
                $writea .= "〜" . substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb .= "to" . substr($salefile[$_],0,8);
                if($Fm{day2} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
                else{print"<OPTION value=\"$writeb\">$writea\n";}
            }
        }
        print"</SELECT>\n";
    }

    print"</TD><TD>";
    print"<input type=submit value=\"表\示\"><BR>\n";
    print qq|</TD></TR></table>\n|;
    
    print qq|</TD></TR></table>\n|;
1;
コメントを書く(引用) | スレッド一覧


1806● Re[9]:ログインボーナスとタイムボスに購入ランキング[ moon ] 2014 10/21 19:37
> ありがとうございます!
> 無事にできました!
> しばらく動作確認しながら様子を見ています。

実のところ、厳密に捉えると不具合と言える点が一点あります。
それは、コンティニュー後に日付をまたいで保存するとその日に再度コンティニューしてもログイン回数がカウントされないことです。
これは$lasttmが保存時にも更新されているためなのですが、先の修正内容では簡略化のためにログイン時間として$lasttmを使用したのが原因です。
ですので、きちんとするのであれば一番最初に書いた通りにログイン時間も保存しておく必要がありますのでチャレンジしてみるのも良いと思います。
もしくは発生条件が限定されますので仕様としてプレイヤーに説明する程度でも良いかもしれません。

> 次に商品を買った数のカウントについて少し考え始めたのですが、
> 現状のsub buy_afterは以下のような感じになっています。
>
略...
>
> 新しいパラメーターを「$buybuy」にしようと思っているのですが、
> 買った時に「買った個数」と「買った値段」を集計して反映したいと考えた時、どうすればいいのか、正直分かりませんでした…。

コードは長いので眺めた程度ですが以下のようなことを行えば良いと思います。
  【foreachの前】
    my ($buy_count, $buy_total) = split(/\Q△\E/o, $buybuy); # 個数と合計金額を取得(ここでは、$buybuyは"0△0"のように△区切りとしている)
  【購入処理の場所】
    $buy_count++; # 個数をカウントアップ
    $buy_total += $price; # 合計金額を増加
  【foreachを抜けた後】
    $buybuy = join('△', $buy_count, $buy_total); # 個数と合計金額を結合して$buybuyを更新

> そして組み込みたいと考えている販売リストも、もともとあるリストが独自な感じになっており、
>
> salesitrank.plとsalesprrank.plで構成されていると認識しており、ここに買った個数と買った値段の、購入者ランキングを追加しようと考えた時、どのようにすればいいのか、分からず…
> こちらに追加するのは、難しいでしょうか?

sub buy_afterとsub sales_dataを見た限り、2つのデータファイルに書き出してランキング表示時に使用しているようですね。(各ユーザーデータに保存しているわけではない、ということです。)
表示の処理的にも複雑なようですし、まずはIDや名前などのようにプレイヤーリスト形式で表示するようにしたほうが良いのではないか、と思います。
そのうえで、機能や見た目に不満があるようならランキング形式にチャレンジしてみれば良いと思います。
コメントを書く(引用) | スレッド一覧


1807● Re[10]:ログインボーナスとタイムボスに購入ランキング[ YOUME ] 2014 10/22 09:49
いつもご教授ありがとうございます!

申し訳ないです、ログインボーナスにつきまして
昨日、ログインボーナスを受け取って、
本日、ログインしたところ、また1日目のログインボーナスを受け取ってしまいました。
$loginのカウントも何故か1のままなので、もしかして+1できてないのかなと思ったものの、

##ログインボーナス
my $current_text = sprintf('%04d%02d%02d', (gmtime(time + 3600 * 9))[5, 4, 3]);
my $last_text = sprintf('%04d%02d%02d', (gmtime($lasttm + 3600 * 9))[5, 4, 3]);
if($current_text ne $last_text){
$login++;
&splititem('i');

(以下省略)

この中をどう調整すればいいのか分からず…
いつもお手数をおかけして申し訳ないです…

お時間のある時に教えて頂けたら幸いです。
コメントを書く(引用) | スレッド一覧


1808● Re[11]:ログインボーナスとタイムボスに購入ランキング[ moon ] 2014 10/22 19:01
> 申し訳ないです、ログインボーナスにつきまして
> 昨日、ログインボーナスを受け取って、
> 本日、ログインしたところ、また1日目のログインボーナスを受け取ってしまいました。
> $loginのカウントも何故か1のままなので、もしかして+1できてないのかなと思ったものの、
略...
> この中をどう調整すればいいのか分からず…

$loginのカウントが1であるというのはユーザーデータのファイルの中身を確認してのことでしょうか?
それならば書き込みは大丈夫そうなので読み込み(sub get_user)を疑ったほうが良いかもしれません。

あと、同様にファイルの読み書きなのですがsub get_partnerとsub partneroutにも相手側のログイン用変数($plogin?)の処理が正しく追加されているかどうかも確認したほうが良いです。
コメントを書く(引用) | スレッド一覧


1809● Re[12]:ログインボーナスとタイムボスに購入ランキング[ YOUME ] 2014 10/23 09:42
いつもお世話になります、取り急ぎご報告を…

> $loginのカウントが1であるというのはユーザーデータのファイルの中身を確認してのことでしょうか?

$loginのカウントをステータス欄に表示させて確認したものになります。

そして本日、とりあえずログインしてみたところ
カウントが2に増えていて、ログインボーナスも2日目以降のものに切り替わっていました!
もしかしたら、昨日テストしたタイミングが良くなかったのかもしれません…お騒がせして、申し訳なかったです…

ランキングの処理の方も、ご教授頂いた内容を参考にいろいろ試行錯誤してみたいと思います!

また、聞きに来てしまうかもしれないのですが…
その時はまたお手数をおかけしてしまうのですが宜しくお願いします…!
コメントを書く(引用) | スレッド一覧


1810● Re[13]:ログインボーナスとタイムボスに購入ランキング[ moon ] 2014 10/23 19:34
> いつもお世話になります、取り急ぎご報告を…
>
> > $loginのカウントが1であるというのはユーザーデータのファイルの中身を確認してのことでしょうか?
>
> $loginのカウントをステータス欄に表示させて確認したものになります。
>
> そして本日、とりあえずログインしてみたところ
> カウントが2に増えていて、ログインボーナスも2日目以降のものに切り替わっていました!
> もしかしたら、昨日テストしたタイミングが良くなかったのかもしれません…お騒がせして、申し訳なかったです…

了解しました。
ちなみに、ユーザーデータファイルの$lasttmに対応する部分を書き換えれば一日待たなくてもカウントアップ動作を確認できますよ。
例えば、86400を引いてやれば前日の日付になりますので。

> ランキングの処理の方も、ご教授頂いた内容を参考にいろいろ試行錯誤してみたいと思います!

はい、やってみてわからない点は気兼ねなく質問していただいて構いませんので頑張ってみてください。
コメントを書く(引用) | スレッド一覧


1811● Re[14]:ログインボーナスとタイムボスに購入ランキング[ YOUME ] 2014 10/24 11:47
ログインボーナスについて度々申し訳ないです…
どうしても分からない不具合があり、お伺いにきました。

何故かプレイヤーAが他のプレイヤーBに会いに行くと
プレイヤーBのログイン日数カウントが奇妙な事に変化するのです。
↓こんな感じの記述
1414080452△0△なし△0△0

1414111040△0△△△
など

いろいろ見てはみたのですが分からず…
どういった場合にこうなってしまうことが考えられますでしょうか?
申し訳ないです…
コメントを書く(引用) | スレッド一覧

CGIROOM