= $kaisaikikan[$i][0])&&($nowtime <= $kaisaikikan[$i][1])){ //$taikai = $i; //$kikannai = true; break; } } $kikannai = false; //大会レギュレーション switch($taikai){ case 0: $clear_code = array(6,9,2,3); $taikaiVal = "1st_jnm9l"; $hoshu_border = 300; break; case 1: $clear_code = array(2,0,3,8); $taikaiVal = "2nd_flj63"; $hoshu_border = 300; break; case 2: $clear_code = array(2,1,1,8); $taikaiVal = "3rd_7tzgy"; $hoshu_border = 500; break; case 3: $clear_code = array(0,9,0,4); $taikaiVal = "4th_9jvbp"; $hoshu_border = 500; break; case 4: $clear_code = array(7,0,0,9); $taikaiVal = "5th_9dw9h"; $hoshu_border = 800; break; case 5: $clear_code = array(6,3,2,3); $taikaiVal = "6th_bl99r"; $hoshu_border = 300; break; case 6: $clear_code = array(3,8,0,4); $taikaiVal = "7th_0douz"; $hoshu_border = 300; break; case 7: $clear_code = array(0,0,1,7); $taikaiVal = "8th_vezqk"; $hoshu_border = 500; break; case 8: $clear_code = array(6,1,5,6); $taikaiVal = "9th_aadtc"; $hoshu_border = 1000; break; case 9: $clear_code = array(5,9,3,5); $taikaiVal = "10th_hm1o5"; $hoshu_border = 300; break; case 10: $clear_code = array(7,5,6,1); $taikaiVal = "11th_t0j56"; $hoshu_border = 300; break; case 11: $clear_code = array(2,9,5,3); $taikaiVal = "12th_h5x55"; $hoshu_border = 500; break; default: break; } #グローバル変数 $barrels = array("バスタースピリッツ","アサルトレーザー","オメガキャノン","パラボルト","バスターポッド","プロメテウスⅥ"); $areas = array("トライアルエリア1 ファースト","トライアルエリア2 ルーンβ","トライアルエリア3 アステロイズ","トライアルエリア4 プラネットアクア","トライアルエリア5 フレジリア","トライアルエリア6 ダリアス","トライアルエリア7 ダリアス=シティ","トライアルエリア8 ディストラビス"); $filename = 'http://www.grottad.sakura.ne.jp/vrss/datas/'.$taikaiVal.'.csv'; $myData; $vrs; $sankaConditions; $hoshuConditions; //参加条件チェック function getSankaConditions(){ global $vrs,$taikai; if($taikai == 2){ if($vrs["Barrel"] == 1){ return true; }else{ return false; } }else if($taikai == 3){ if($vrs["Area"] == 1){ return true; }else{ return false; } }else if($taikai == 4){ if($vrs["Area"] == 2){ return true; }else{ return false; } }else if($taikai == 6){ if($vrs["Area"] == 2){ return true; }else{ return false; } }else if($taikai == 7){ if($vrs["Barrel"] == 2){ return true; }else{ return false; } }else if($taikai == 11){ if($vrs["Barrel"] == 1){ return true; }else{ return false; } }else{ return true; } //return false; // if($vrs["Barrel"] == "3"){ // return true; // }else{ // return false; // } } //報酬条件 function getHoshuConditions(){ global $vrs,$hoshu_border; if($vrs["Score"] >= $hoshu_border){ return true; }else{ return false; } } function datacheck(){ global $myData,$vrs,$barrels,$areas,$sankaConditions,$hoshuConditions,$clear_code,$taikaiVal,$kikannai; $VRS_KEY = array(0x81,0x8d,0x18,0x70,0x15,0x1a,0x11,0xe7,0xad,0xda,0x0c,0x54,0xa5,0x55,0xe9,0x9c); //$qstr = $_SERVER['QUERY_STRING']; $qstr = $_GET['code']; /* cutされた '='パディングの復活 */ $smod = strlen($qstr) % 4; if($smod){ $smod = 4 - $smod; for($i = 0; $i < $smod; $i++){ $qstr = $qstr . "="; } } /* URL SAFE を戻してから base64 の デコード */ $ustr = (str_replace( array('_','-'), array('/','+'), $qstr)); $dec = base64_decode($ustr); $dlen = strlen($dec); # VRS_KEYで復元 for( $i = 0; $i < $dlen; $i++){ $dec[$i] = chr(ord($dec[$i]) ^ $VRS_KEY[$i&15]); } # 復元データのチェックサムの確認 $chksum = 0; for( $i = 0; $i < $dlen; $i++){ $chksum += ord($dec[$i]); } $chksum = $chksum & 0xff; /* 復元データをすべて足して8bitが0ならOK */ # バイト列から展開 # エリア番号 1バイト # ステージ番号 1バイト # バレル番号 1バイト # 倒した敵の数 2バイト # 総獲得点 4バイト # レベル 1バイト # 称号番号 1バイト $vrs = unpack("CArea/CStage/CBarrel/vHitEnemy/VScore/CLevel/CRank/CSum",$dec); $sankaConditions = getSankaConditions(); $hoshuConditions = getHoshuConditions(); /* 各データを表示してみる */ // echo "====== GET パラメータ ========
"; // echo $_SERVER['QUERY_STRING'] . "
"; // echo "====== パディング 追加後 ========
"; // echo $qstr . "
"; // echo "====== URL SAFE に対応 ========
"; // echo $ustr . "
"; // echo "====== base64 デコード済み ========
"; // echo bin2hex($dec) . "
"; // echo "====== base64 デコード後データ長さ ========
"; // echo $dlen . "
"; // echo "====== unpack data ========
"; // echo "エリア番号 = ".$vrs['Area']." (0x".dechex($vrs['Area']).")
"; // echo "ステージ番号 = ".$vrs['Stage']." (0x".dechex($vrs['Stage'])."
"; // echo "バレル番号 = ".$vrs['Barrel']." (0x".dechex($vrs['Barrel']).")
"; // echo "倒した敵の数 = ".$vrs['HitEnemy']." (0x".dechex($vrs['HitEnemy']).")
"; // echo "総獲得点 = ". $vrs['Score']." (0x".dechex($vrs['Score']).")
"; // echo "レベル = ".$vrs['Level']." (0x".dechex($vrs['Level']).")
"; // echo "称号番号 = ".$vrs['Rank']." (0x".dechex($vrs['Rank']).")
"; // echo "chksum = ".$vrs['Sum']." (0x".dechex($vrs['Sum']).")
"; if($_GET['code'] && $chksum == 0){ echo ''; $myData = '

キミの成績キミの成績

'.$vrs["Score"].' P

'; if($hoshuConditions & $sankaConditions){ $myData .= '
'; $myData .= 'クリア'; $myData .= '
'; for($i = 0;$i < count($clear_code);$i++){ $myData .= ''; } $myData .= '
'; $myData .= '
'; } if($kikannai){ //期間内だったら //echo "チェックサムは問題なさそう
"; if($sankaConditions){ rankCheck(); }else{ echo $myData.'

現在開催中の
ランキングバトルの参加条件を
満たしていません。

'; showRanking(); } }else{ //echo "チェックサムに問題あり
"; showRanking(); } }else{ showRanking(); } } $csv = array(); $arr_result; $arr_tmp; //データ読み込み function loadCsv(){ global $filename,$csv,$arr_result,$arr_tmp; if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { $obj = array("Area" => $data[0],"Stage" => $data[1],"Barrel" => $data[2],"HitEnemy" => $data[3],"Score" => $data[4],"Level" => $data[5],"Rannk" => $data[6],"Name" => $data[7]); $csv[] = $obj; } fclose($handle); } $_csv = $csv; //得点順ソート foreach ($_csv as $key => $value){ $key_id[$key] = $value['Score']; } array_multisort( $key_id , SORT_DESC , $_csv); $csv = $_csv; //重複削除 $arr_tmp = $arr_result = array(); foreach($csv as $num => $value){ if(!in_array($value["Score"],$arr_tmp)){ $arr_tmp[] = $value["Score"]; $arr_result[] = $value; } } datacheck(); } //得点比較 function rankCheck(){ global $csv,$arr_result,$myData,$vrs; //$myScore = 100000; $myScore = $vrs['Score']; if(!count($csv)){ echo $myData; echo '
1位

キミは1位にランクイン!

なまえを入力して登録しよう! (ひらがな6文字以内)
'; }else{ if($arr_result[count($arr_result)-1]["Score"] > $myScore){ $myData .= '

残念!ランクインできません。

10位以内を目指そう!
'; echo $myData; showRanking(); }else{ for($i = 0;$i= $arr_result[$i]["Score"]){ //10位以内だったら if(($i+1) <= 10){ echo $myData; echo '
'.($i+1).'位

キミは'.($i+1).'位にランクイン!

なまえを入力して登録しよう! (ひらがな6文字以内)
登録しないでランキングを見る'; }else{ //echo ($i+1)."------ランク外"; echo $myData; echo '

残念!ランクインできません。

10位以内を目指そう!
'; showRanking(); } break; } } } } } //var_dump($csv); function checkMyRank($score){ global $arr_result; for($i = 0;$i= $arr_result[$i]["Score"]){ return ($i+1); break; } } } //ランキング表示 function showRanking(){ echo '

ランキングランキング

'; global $csv,$arr_result,$barrels,$areas,$kikannai; if(count($csv) > 0){ echo '
    '; for($i = 0;$i

    '.$name.'獲得スコア:'.$score.' P

    • ■レベル

      Lv.'.$level.'

    • ■バレル

      '.$barrels[$barrel-1].'
    • ■エリア

      '.$Areas[$area-1].'
    '; } } echo "
"; }else{ if(!$kikannai){ echo '

開催までお楽しみに!

'; }else{ echo '

登録されているデータがありません。

'; } } echo "
"; } ?> 全国ランキングバトル|VRシューティング スピリッツ | スペシャルサイト | タカラトミーアーツ

ランキングバトルは終了しました。
たくさんのご参加ありがとうございました!

EOT; $nowtime = strtotime("now"); $starttime = strtotime("2019-10-01 00:00:00"); if($nowtime >= $starttime){ echo '

「価格」は、すべてメーカー希望小売価格です。税別記載のない価格は、消費税を含む価格ですので、
2019年10月1日以降ご購入の際は消費税10%で算出された価格になります。ただし、ガチャ筐体、ゲーム筐体で販売される商品は税込価格です。

'; }else{ echo '

「価格」は、すべてメーカー希望小売価格です。税別記載のない価格は、消費税を含む価格ですので、
2014年4月1日以降ご購入の際は消費税8%で算出された価格になります。ただし、ガチャ筐体、ゲーム筐体で販売される商品は税込価格です。

'; } echo << EOT; echo << EOT; ?>