私設SoS2オーナー応援BBS

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

No.1802  Re[5]:ログインボーナスとタイムボスに購入ランキング
発言者: moon
発言日: 2014 10/17 20:14
> ひとまず1番目からできるように頑張っていきたいと思うのですが、ここで疑問点をひとつひとつ書いて言っても良いでしょうか?

大丈夫です。

> お手数をおかけして恐縮なのですが、
> お時間あるときにご返信いただけたら幸いです。
>
> 現在、改造を施しているのがFQFD様が配布されていたSOS2土台なので、ほとんどの項目がplで分割してあり、独自要素もかなり入っているので混乱しないよう気を付けていきたいと考えているのですが、しょっぱなから頭を抱えてしまいました…。
>
>
> >ユーザーデータに新しいパラメータ(仮に$login)を用意しましてsub make_conのuserout実行前に以下のような処理を行えば良いと思います。
>
> まずはmake_con.pl内をと思ったのですが、
>
> 既存仕様で、ログインするとテントポイントというものが現在付与されるようになっています。
>
> これは保存していた時間に応じて獲得できるポイントで、これといって使い道が無かったので、現在は換金できるようにしてあります。
>
> このテントポイントの処理がかなり入っており、抜粋すると以下のような感じです。
>
>     if ($lasttm && $ss_system){
>         $words = "ログインしました。<br><br> $date";
>         $tentt = time - $lasttm; $lasttm = time;
>         $ten_d = int($tentt / 86400); $tent1 = $tentt - ($ten_d * 86400);
>         $ten_h = int($tent1 / 3600); $tent1 = $tent1 - ($ten_h * 3600);
>         $ten_m = int($tent1 / 60); $ten_s = $tent1 - ($ten_m * 60);
>         $ten_h = sprintf("%02d",$ten_h); $ten_m = sprintf("%02d",$ten_m); $ten_s = sprintf("%02d",$ten_s);
>         $datemsg = "$ten_d日$ten_h時間$ten_m分$ten_s秒";
>         if ($fg eq "NS"){
>             $ad_point = int($tentt * $ss_hn_svp);
>             $words .= "<BR><b>テントポイントを$ad_point獲得した</b></FONT>\n" if $ad_point > 0;
>             $words .= "<BR>テントポイントは増えなかった。\n" if $ad_point == 0;
>             $words .= "<BR>テントポイント$ad_point。\n" if $ad_point < 0;
>         }elsif ($fg eq "HS"){
>             $ad_point = int($tentt * $ss_hh_svp);
>             $words .= "<BR>テントポイントを$ad_point獲得した</b></FONT>\n" if $ad_point > 0;
>             $words .= "<BR>テントポイントは増えなかった。\n" if $ad_point == 0;
>             $words .= "<BR>テントポイント$ad_point。\n" if $ad_point < 0;
>         }elsif ($fg eq "SS" || $fg eq "DISCOVERS"){
>             $ad_point = int($tentt * $ss_hs_svp);
>             $words .= "<BR>テントポイントを$ad_point獲得した</b></FONT>\n" if $ad_point > 0;
>             $words .= "<BR>テントポイントは増えなかった。\n" if $ad_point == 0;
>             $words .= "<BR>テントポイント$ad_point。\n" if $ad_point < 0;
>         }else {$words .= "\n";}
>         $tep = 0 if $tep eq ""; $tep += $ad_point;
>     } else {
>         $words = "ログインしました<br><br> $date";
>     }
>
> 恐らくこの辺までがテントポイントの関わる処理だと認識してます。

そのようですね。

> ログイン時にマイレコードに「ログイン通知とログイン日時、IP、テントポイントの変動が書きこまれるようになっているので、そのソースも含まれてます。
>
> せっかくなので、ログインボーナス獲得情報も一緒に記載したいと考えています。
>
> 現在あるテントポイントの処理を流用してログインボーナス機能を入れるには、一体どうすればいいのか、無い頭をいくら絞っても分からず、前にも同じようなことを無理矢理やろうとして、うまくいかなかったものなので、余計に自信なく…
>
> ステータス足しはテントポイントの$tepがある場所に追記すればいいのかな?と認識しているのですが、
>
> >1. $loginから前回のログイン時間(正確には該当日の最初のログイン時間)とログイン日数を取得する。
> >2. 1.で取得したログイン時間の年月日と現在時間の年月日を比較して異なっていれば処理を行う。
> >2.1. ログイン時間とログイン日数を更新する。
> >2.2. $loginを更新する。
>
> これに関しては、一体どうすれば…と皆目見当もつきません…

処理のイメージとしては以下のようになります。
ログイン時間は$lasttmで代用できそうなので、1.の処理は必要なく日数だけを読み書きすれば良さそうです。
あと、$loginはsub get_userやsub useroutなどのユーザーデータの読み書きを行っている箇所に追加してください。
また、マイレコードにログインボーナス獲得情報を追記する処理は記載する内容により下記のifブロック内で行うほうか適切なのか、ifブロック後に行うほうが適切なのかが変わってきます。

# 2.
my $current_text = sprintf('%04d%02d%02d', (gmtime(time + 3600 * 9))[5, 4, 3]); # 現在の日付の文字列形式(例:"01140917"←上4桁に1900を加えると年、次の2桁に1を加えると月、最後の2桁が日)
my $last_text = sprintf('%04d%02d%02d', (gmtime($lasttm + 3600 * 9))[5, 4, 3]); # 同様に前回の日付の文字列形式
if($current_text ne $last_text){
    # 2.1.と2.2.
    $login++;

    #### 日数判定とアイテム追加を行う箇所 ####
}

なお、この処理は$lasttmを書き換える前に行う必要があります。

> >2.3. ログイン日数に応じて$bgにアイテムを追加する。
>
> 追加する処理くらいは…と思ったのですが分かりそうで分からなかったです…似たような処理を見回してみたのですが…
> Sub Join Item絡みの処理になるのでしょうか?

アイテム追加は他の処理で行っているのと同様にsub splititemとsub joinitemのペアで行っても良いですし、場合によっては直接$bgに追加しても大丈夫です。
日数判定とアイテム追加は以下のようなイメージになります。

&splititem('i');
if($login <= 1){
    # 1日目
    push(@items, 'アイテムデータA');
}
elsif($login == 2){
    # 2日目
    push(@items, 'アイテムデータB');
}
elsif($login <= 10){
    # 10日目まで
    push(@items, 'アイテムデータC');
}
elsif($login <= 100){
    # 100日目まで
    push(@items, 'アイテムデータD');
}
else{
    # それ以降
    push(@items, 'アイテムデータE');
}
&joinitem('i');

▼関連発言

1797:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/15 14:53
 ├1798:Re:ログインボーナスとタイムボスに購入ランキング [moon] 10/15 21:43
 │└1799:Re[2]:ログインボーナスとタイムボスに購入ランキ.. [YOUME] 10/16 09:06
 │ └1800:Re[3]:ログインボーナスとタイムボスに購入ラン.. [moon] 10/16 18:42
 │  └1801:Re[4]:ログインボーナスとタイムボスに購入ラ.. [YOUME] 10/17 16:42
 │   └1802:Re[5]:ログインボーナスとタイムボスに購入.. [moon] 10/17 20:14
 │    └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
 └1812:Re:ログインボーナスとタイムボスに購入ランキング [moon] 10/24 20:46
  └1813:Re[2]:ログインボーナスとタイムボスに購入ランキ.. [YOUME] 10/25 11:12
   └1814:Re[3]:ログインボーナスとタイムボスに購入ラン.. [moon] 10/25 13:58
    └1815:Re[4]:ログインボーナスとタイムボスに購入ラ.. [moon] 10/25 14:21
     └1816:Re[5]:ログインボーナスとタイムボスに購入.. [YOUME] 10/26 18:49<-last

  返信フォーム [引用]
名 前 保存
題 名
発 言
PASSWORD
投稿確認必ずチェックを入れてください。こちらにはチェックを入れないでください。
書き込む
◇題名は、短くわかりやすく書いてください。
◇過去に同じ内容が投稿されていないか検索してから書き込んで下さい。
◇管理人の判断により相応しくない投稿は削除します。

Pass 保存


CGIROOM