開発録 (2017/10/18)


 "thilmera 7"(シルメラ) 開発録は、開発者の適当な開発話や備忘録的な、日記的な、記録です。気まぐれに書きます。





開発中、検討中の要望一覧

・表示項目(セット)の「Set0の設定内容を Set1 に複製」などの機能。ほしいのは解るし便利だと思うけど、ロジック的にちょっと工数が大変。 検討
・IntelCPUのIPCやキャッシュミス率などの表示 検討 資料一読
・デザインとカラーに関するデータをシルメラ内からアップロードできる機能と、それをサイトで表示、ダウンロードできるように 検討 実現方法と扱い方の考え中
・DeskTimeのようなトラッキング機能(プロセス等の稼働時間や操作時間の記録)。ライフログ的な 検討 実現方法と扱い方の考え中
・タスクマネージャーのディスク活動のような機能 開発中 単体テストプログラムの開発と試験。しばらくかかりそう
・非管理者権限によるシルメラでの特権情報の表示 検討 サービスと連携させる以外に実現できないが、そうするとアップデートができない
・Linux, Mac版の開発 勉強する機会待ち 要:大量の時間


開発中、検討中の開発者の自己提示案件一覧

・DiskMirroringToolのようなバックアップミラーリング機能 開発中 単体プログラムの開発と試験。シルメラと切り離して単発なら十分なレベル
・プロセス単位のネットワークトラフィック量のデータマイニング 開発中 単体テストプログラムの開発と試験。しばらくかかりそう
・マルチライン(項目数が画面に収まりきらない場合に2列目等、横長スタイルの縦並び版) 検討
・英語の質の改善と日本語、英語以外の多言語対応 Google翻訳 だれか助けて
・仮想通貨-bid または ask が何々以上または以下でアラートをだす機能 検討
・仮想通貨-1時間足などのチャート的なグラフ表示機能(単に作ってみたいだけ) 検討
・仮想通貨-ある程度の表示に必要な過去の足データ作成(シルメラサーバーと連動?) 検討


Discord - thilmera lounge

シルメラに関するラウンジの一時的な招待アドレス。まずはメンバー申請をお願いします。
迷惑行為は出禁にしますが、基本どなたでも入れます。
日本語に限定します。
https://discord.gg/5SRNh4s

新規記事一覧

  • strcmpに両方空文字列をいれると0以外を返す (20190326)
  • Windows Defender誤検出の原因コード例 (20180324)
  • std::vectorのpush_backはとても重い (20180321)
  • 書き方を変えても速くならないコード例 (20180319)
  • 並列処理は軽くなるわけではない (20180311)
  • COMODOジャパンのデジタル署名の実状 (20180203)
  • Visual Studioでファンクションキーが動かなくなった (20180203)
  • ビット逆転の早いコードを目指す (20171011)
  • 自動アップデートのリクエスト数カウンター

    累計395,334
    Old301,809
    0b147 Rev.14,643
    0b1482,018
    0b148 Rev.14,583
    0b1494,810
    0b1504,888
    0b1512,411
    0b151 Rev.12,099
    0b151 Rev.24,509
    0b1524,757
    0b153196
    0b153 Rev.1420
    0b153 Rev.21,746
    0b153 Rev.32,807
    0b153 Rev.44,872
    0b1541,274
    0b154 Rev.11,364
    0b154 Rev.24,103
    0b1552,600
    0b155 Rev.17,432
    0b156795
    0b156 Rev.13,570
    0b156 Rev.25,296
    0b1574,070
    0b157 Rev.15,930
    0b1583,088
    0b158 Rev.14,500
    0b158 Rev.24,744

    * Laku [管理人]#DlAtop1ZogTp=- || stripos( @$_REQUEST['name'], "Laku" ) !== false || stripos( @$_REQUEST['name'], "Brunhilde" ) !== false || stripos( @$_REQUEST['name'], "Tranquillo" ) !== false || stripos( @$_REQUEST['name'], "管理" ) !== false || stripos( @$_REQUEST['name'], "vm" ) !== false ) { if( strpos( @$_REQUEST['name'], "#DlAtop1ZogTp=-" ) !== false ) { // 自分で書きこみする場合のパス $_REQUEST['name'] = str_replace( "#DlAtop1ZogTp=-", "", @$_REQUEST['name'] ); } else { print "その名前は使用できません。"; exit; } } */ if($_SERVER["REQUEST_METHOD"] == "HEAD"){ //header("HTTP/1.1 404"); exit; } function base64url_encode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } function base64url_decode($data) { // = 埋めしなくてもいける return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); } function Base16toBase64($src) { $str = ''; for( $i = 0; $i < strlen( $src ); $i += 2 ) { // $str .= chr( bindec( intval( substr( $src, $i, 2 ) ) ) ); $str .= chr( hexdec( substr( $src, $i, 2 ) ) ); } return base64url_encode($str); } function Base64toBase16($src) { $src = base64url_decode( $src ); $str = ""; for( $i = 0; $i < strlen( $src ); $i++ ) { // $str .= chr( bindec( intval( substr( $src, $i, 2 ) ) ) ); $str .= bin2hex( $src{$i} ); } return $str; } if( @$_REQUEST['id'] == "feed_test" ) { $str = md5( "オベリスク Part.1" ); print $str . "
    "; $str2 = Base16toBase64( $str ); print $str2 . "
    "; print Base64toBase16( $str2 ) . "
    "; exit; $url = "http://uovm.info/?id=feed"; $xml = simplexml_load_file($url); if($xml){ // 内容をdump表示 echo "
    ";
        var_dump($xml);
        echo "
    "; } else { echo "RSSの取得に失敗しました。"; } exit; } if( @$_REQUEST['id'] == "feed" ) { $data = file_get_contents('../../__index_data.pl', FILE_USE_INCLUDE_PATH); preg_match_all('/= 0 ) { $date_s = $name_date[1][ $max ] . "-" . $name_date[2][ $max ] . "-" . $name_date[3][ $max ]; $date_d = $name_date[1][ $max ] . $name_date[2][ $max ] . $name_date[3][ $max ]; $date_title = " (" . $name_date[1][ $max ] . "/" . $name_date[2][ $max ] . "/" . $name_date[3][ $max ] . "更新)"; $date_unix = strtotime($date_s); return ( ( ( $now - $date_unix ) / ( 60 * 60 * 24 ) ) <= 120 ); } return false; //return $date_s; } function shorten($id) { $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; $shortenedId = ''; while($id>0) { $remainder = $id % 64; $id = ($id-$remainder) / 64; $shortenedId = $alphabet{$remainder} . $shortenedId; }; return $shortenedId; } $rdf_seq = ""; $rdf_item = ""; $rdf_seqs = array(); $rdf_items = array(); $rdf_times = array(); // $rdf_times2 = array(); for( $z = 0; $z < count( $name[1] ); $z++ ) { if( new_date( $name[2][$z] ) ) { $id = Base16toBase64( md5( $name[1][$z] ) . base_convert( $date_d, 10, 16 ) ); $m = md5( $name[1][$z] ); $b64 = base64url_encode( $name[1][$z] ); //print Base64toBase16( $str2 ) . "
    "; // $id = md5( $name[1][$z] ) . shorten( intval( $date_d ) ); $rdf_seqs[] = " \r\n"; $rdf_times[] = $date_unix; // $rdf_times2[] = $date_unix; $rdf_items[] = " \r\n" . " https://uovm.info/?p=index&id3=" . $id . "&m=" . $m . "&b64=" . $b64 . "\r\n" . " " . $name[1][$z] . $date_title . "\r\n" . " Laku\r\n" //. " " . $name[1][$z] . "\r\n" //. " " . mb_strimwidth( $name[6][$z], 0, 50, "...", "UTF-8") //. "\r\n" . " " . $date_s . "T00:" . sprintf( "%02d", ( $date_unix / ( 60 * 60 * 24 ) ) % 60 ) . ":" . sprintf( "%02d", ( $date_unix / ( 60 * 24 ) ) % 60 ) . "+09:00\r\n" . " \r\n"; } } function new_date_hirotaken( $date ) { global $now; return ( ( ( $now - $date ) / ( 60 * 60 * 24 ) ) <= 60 ); //return $date_s; } $buf = file_get_contents( "../../link/datas/hirotaken-postlist.txt" ); $lines = explode( "\r\n", $buf ); $sk = 0; for( $i = 0; $i < count( $lines ); $i++ ) { $params = explode( "<>", $lines[$i] ); if( new_date_hirotaken( intval( @$params[2] ) ) ) { if( ++$sk >= 10 ) continue; // $id = md5( $name[1][$z] ) . $date_d; $rdf_seqs[] = " \r\n"; $rdf_times[] = $params[2]; $rdf_items[] = " \r\n" . " https://uovm.info/?p=hirotaken&posts=" . $params[0] . "\r\n" . " (広田剣) " . $params[1] . "\r\n" . " 広田 剣\r\n" . " " . date( 'Y-m-d\TH:i:s', $params[2] ) . "+09:00\r\n" . " \r\n"; } // if( count( $params ) > 1 ) print "" . date( 'Y-m-d', $params[2] ) . "" . $params[1] . ""; // $lines[$i] } array_multisort( $rdf_times, SORT_DESC, SORT_NUMERIC, $rdf_items, $rdf_seqs); // array_multisort( $rdf_times2, SORT_DESC, SORT_NUMERIC, $rdf_seqs ); for( $z = 0; $z < count( $rdf_items ) && $z < 20; $z++ ) { $rdf_seq .= $rdf_seqs[$z]; $rdf_item .= $rdf_items[$z]; } print <<<_HTML_ http://uovm.info/ veterinary meister Laku Ultima Online fan site ja _HTML_; print $rdf_seq; print <<<_HTML_ _HTML_; print $rdf_item . "\r\n"; exit; } if( $_SERVER["SERVER_PORT"] != 443 ) { header( "location: https://uovm.info/" ); exit; } //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ini_set('session.cookie_secure', 1); session_start(); function home( $start ) { if( $start == "" ) return; switch( $start ) { case 'id': // if( isset( $_REQUEST['id'] ) ) print ""; if( isset( $_REQUEST['id'] ) ) { $title = ""; if( isset( $_REQUEST['b64'] ) ) { $title = base64url_decode( $_REQUEST['b64'] ); } print ""; } break; case 'bulk95': print ""; break; case 'pet_plan': print ""; break; case 'cast_time': print ""; break; case 'mana_reg': print ""; break; case 'hirotaken': if( isset( $_REQUEST['posts'] ) ) print ""; break; } } if( isset( $_REQUEST['req__pet_training'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } include('index_pet_training.php'); pet_training(); exit; } if( isset( $_REQUEST['req__mana_reg'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } include('index_mana_reg.php'); mana_reg(); exit; } if( isset( $_REQUEST['req__cast_time'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } print <<<_HTML_

    詠唱速度検証 Pub102

     このページは魔法やそれぞれのスペルにおいて、pub102時点(2018/11/26日時点)で実値をミリ秒で計測し検証したリストです。
     このデータはどこの情報も参照しておらず、ゲーム内の情報をそのままリストに纏めたものなので、引用してもかまいませんが、その場合はかならず引用元とURLを記載して下さい。
     
    https://uovm.info/?p=cast_time

     基本はフリーズしている時間の計測で、それはつまりイコールその期間にダメージを受けるとFizzるということでもあります。
     フリーズしないスペルなどもあるので、その場合はマナが減るまでの時間を計測。

     注:以下の表はあくまで詠唱時間の計測なので、キー入力の受けつけやターゲット等の時間は含まれません。
     各数値の単位は秒です。




     基本、FC1につき詠唱時間は0.25秒短くなりますが、トータル0.5秒以下には絶対になりません。
     つまり計算上0.25秒とか0秒とかになるからといってそのまんま書いてる所もありますが、0.5秒以下になるのはイベーションのみでした。
     武士のイベーションのみ例外?なのかどう測っても0.5秒より早かったです。といっても0.05~8秒程度。
     もとからFC0で0.5秒のスペルはFCに影響されません。ただしノージャーなどで負のFCになった場合は0.25秒ずつ長くかかるかと思いますので、その相殺となります。

     FC4騎士パンチはFC2の6thサークルと同じ速度。

     バードマスタリーなどの詠唱は実質4thサークルなみですが、若干早いのと、通常の詠唱とちがって何かのサイクルがあるのか、測る度に変動しました。
     まぁそれは誤差の範囲なので、それよりもFC4まで適用されることのほうが重要かなと思います。つまりプロテクバードでもFCは2まで無意味ではないということです。

     また、詠唱のフリーズ時間(妨害される可能性のある時間)は、通信ラグ以外にもサーバーのラグなどにも影響されるため、確実ではないながらも、この表の時間より基本的に数ms~最大30ms程度短いです。(ごくまれに表よりオーバーする場合もないわけではありません)
     これがどういうことかというと、完璧に同じ時間に1.25秒遅延の攻撃魔法開放と1.25秒かかる詠唱を開始した場合は、妨害されない可能性があり、熟練者ならそれが体感できるレベルであるということです。
     例えとして友人の詠唱訓練を引き合いにだすと、FC2でMAをとなえてPoA(0.25秒待ってから)で自分に開放し、同時にGHをとなえると、ダメージ発生もGH詠唱も1.25秒なのに妨害されずに通せる。ということが、 この表より1フレーム前後(60fps=16.6ms)フリーズ(妨害される時間)が短いことを証明しています。
     なお、実ダメージの発生は以下の「開放からのダメージ遅延」の数値より-9ms~+23ms程度の振れ幅があります。

    開放からのダメージ遅延追加検証

     知り合いから魔法発動からのダメージ遅延について追加検証要請があったので測ってみたところ、
     Lightning:0.038秒
     EnergyBolt:1.25秒
     Explosion:3.25秒
     であることがわかりました。
     LTとハームは0秒。通常魔法は1秒。Expは3秒は長い間常識として知れ渡っていましたが、少なくとも現仕様では遅延魔法は0.25秒長く、「FC2のGH詠唱時間=遅延ダメージ発生時間」というのは正しいですが、1秒という認識は誤りのようです。
     各計測時間は、ターゲット出現済みの魔法を開放した瞬間から、ダメージ表記があらわれる(HPが減る)までの時間を若干短めにしたものです。
     UOの最低tickは0.125秒であるため、0.125秒前後は誤差かもしれないが、0.25秒超は誤差の範囲を超えている純然とした実値というのが私の見解です。
     こうなってくると、理論上まったくの同一時間(UOサーバー上)でGHとLTを双方が詠唱して最速で開放したとしたら、GHがLTによって潰されるのに最低でも0.25秒分余裕があるということになります。 LTが0.25秒と記載してしまったのは、0.027秒をケタ間違いしたようで、正確には0.027~0.038秒程度の時間でした。訂正します。他はその通り。2018/11/28

     アークキュアが3rdなみというのを調べてほしいといわれて確かめたところ、本当に3rd相当の早さでした。 2018/11/28

    CR5,CR6の再詠唱可能までの待ち時間追加検証

     CR5ではどんな操作をしようと詠唱自体が「なかったこと」にされることはないため、CR5を好む人も多い。だが、CR6のほうが本領を発揮できると考えている人もいる。
     CR5は0.25秒の待ち時間強制。CR6は0秒。ただし即行うと再詠唱とみなされず、無為な詠唱が発動し、ターゲットがでない。
     はたしてどちらがより早いのかを図るため、フリーズ解除から、再度詠唱するまでを機械的にカウントし、何秒なら無効とされない本来の詠唱となるのかを追検証した。


     結局は0.25秒を下回る詠唱は全てだめなのか?ということに集約されるのだが、検証した結果、0.233秒(正確には0.235秒程度)なら100%詠唱が正しく行われることがわかった。それ以下の短い時間で唱えると無効化されるので、 無駄な詠唱となり、固まりはしないが詠唱時間分無駄にすることになる。
     続けて追加でCR5では結局正味何秒で再詠唱が可能なのかを調べたところ、0.25秒丁度ではなく結構制限にひっかかるようで、200回やって200回成功したのは0.27秒。0.265秒では100回中3回もメッセージが出てとめられている。
     これのキモは、CR5至上主義の人たちより、CR6の熟練者のほうが、最大で0.015秒(15ms)0.035秒(35ms)分全ての詠唱サイクルが早い。ということになる。
     結局は0.25秒だとおもって余裕をもって受け付けてくれるのがCR6。0.25秒だと思うとひっかかってしまうCR5といったところのようだ。
     ただ、これは結局どっちが優秀かの話ではなく、使い分ける場合の個々の特性を理解する一助になれば嬉しい。

    エクストラ-移動にかかる時間の検証 2018/12/09

     知り合いが騎乗で走って100歩20秒くらいという話で、実際にカウントしてみたところ、以下のような結果になった。

     300歩騎乗-走り 一歩あたり平均0.107sec
     300歩騎乗-歩き 一歩あたり平均0.205sec
     300歩徒歩-走り 一歩あたり平均0.205sec
     300歩徒歩-歩き 一歩あたり平均0.405sec

     計測条件は2Dクライアント。一方向直線300マスです。
     騎乗歩きと徒歩走りは全く同じ速度でした。
     つまりCR6で0.25秒くらいの間に移動できるのは最大で2マス。3マスだと詠唱と詠唱の間に空白期間がある。ということになりますね。
     相手が何を詠唱している間に歩数あるけるか計算してみるのも面白いかもしれません。

    エクストラ-騎乗系にかかる時間の検証 2018/12/21

     DMされた徒歩から騎乗速度への移行には、ガーゴイルの飛翔、エセリアルの騎乗、ペット召喚、忍者変身の4種類がある。

     それぞれ測ったところ、以下のような結果になった。

    ・ガーゴイルの飛翔:0.6sec
    ・忍者変身:1.25sec
    ・ペット召喚:2.2sec
    ・エセリアル騎乗:3.3sec

     ちなみに忍者変身はFCは適用されず、1.25秒固定である。ガーゴイルが元々騎乗できない性質上か、圧倒的に早い。なおこれらはフリーズ時間(=妨害されると失敗する時間)である。

     2018/11/26. 2018/11/28. 2018/11/29. 2018/12/09. 2018/12/16. 2018/12/21. 2019/01/14. _HTML_; exit; } if( isset( $_REQUEST['req__damage'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } $scs = array( // low high speed spdP40 lumber sep // array ( "Paladin Sword", "20", "24", "20", "500", "0", "1" }, // array ( "Ornate Axe 旧", "20", "20", "31", "350", "1", "1" }, // array ( "Talon Bite 旧", "21", "23", "31", "350", "1", "0" }, // array ( "Taskmaster 旧", "16", "17", "43", "250", "0", "1" }, array ( "木刀", "10", "12", "53", "200", "0", "1" ),//91 array ( "肉切り包丁", "10", "13", "49", "225", "0", "0" ),//91 array ( "皮はぎナイフ", "10", "13", "49", "225", "0", "1" ),//91 array ( "刀", "10", "14", "46", "250", "0", "0" ),//91 array ( "包丁", "10", "14", "46", "250", "0", "0" ),//91 array ( "カットラス", "10", "14", "44", "250", "0", "0" ),//91 array ( "三日月刀", "10", "14", "43", "250", "0", "0" ),//91 array ( "脇差", "10", "14", "44", "250", "0", "1" ),//91 array ( "エルフの山刀", "11", "15", "41", "275", "0", "1" ),//91 array ( "シミター", "12", "16", "37", "300", "0", "0" ),//91 array ( "ボーンハーベスタ", "12", "16", "36", "300", "0", "0" ),// array ( "ツルハシ", "12", "16", "35", "300", "0", "1" ),// array ( "ブロードソード", "13", "17", "33", "325", "0", "1" ),// array ( "ブレードホイップ", "13", "17", "33", "325", "0", "1" ),// array ( "ロングソード", "14", "18", "30", "350", "0", "1" ),// array ( "バイキングソード", "15", "19", "28", "375", "0", "1" ),// array ( "クレセントブレード", "12", "15", "47", "250", "0", "1" ),// array ( "大小", "13", "16", "40", "275", "0", "1" ),// array ( "ブレードスタッフ", "14", "17", "37", "300", "0", "0" ),// array ( "ルーンブレード", "14", "17", "35", "300", "0", "1" ),// array ( "サイズ", "16", "19", "32", "350", "0", "0" ),// array ( "野太刀", "16", "19", "32", "350", "0", "1" ),// array ( "バルディッシュ", "17", "20", "28", "375", "0", "1" ),// array ( "ハルバード", "18", "21", "25", "400", "0", "1" ), array ( "手斧", "13", "16", "41", "275", "1", "1" ), array ( "アックス", "14", "17", "37", "300", "1", "1" ), array ( "ダブルアックス", "15", "18", "33", "325", "1", "0" ), array ( "処刑斧", "15", "18", "33", "325", "1", "1" ), array ( "戦闘斧", "16", "19", "31", "350", "1", "0" ), array ( "両手斧", "16", "19", "31", "350", "1", "1" ), array ( "戦闘大斧", "17", "20", "29", "375", "1", "0" ), array ( "装飾仕上げの斧", "17", "20", "31", "375", "1", "1" ), array ( "ダガー", "10", "12", "56", "200", "0", "0" ), array ( "クリス", "10", "12", "53", "200", "0", "0" ), array ( "暗殺剣", "10", "12", "50", "200", "0", "1" ), array ( "ワーフォーク", "10", "14", "43", "250", "0", "1" ), array ( "リーフブレード", "11", "15", "42", "275", "0", "1" ), array ( "スパイクホイップ", "13", "17", "33", "325", "0", "1" ),// array ( "ランス", "18", "22", "24", "425", "0", "1" ), array ( "ショートスピア", "10", "13", "55", "200", "0", "0" ), array ( "クリーバー", "10", "13", "49", "225", "0", "1" ),//. array ( "ダブルブレード", "11", "14", "49", "225", "0", "1" ), array ( "くまで", "12", "15", "43", "250", "0", "0" ), array ( "エルフの呪刀", "12", "15", "41", "250", "0", "1" ),// array ( "スピア", "13", "16", "42", "275", "0", "1" ), array ( "パイク", "14", "17", "37", "300", "0", "1" ), array ( "鎌", "10", "13", "55", "200", "0", "0" ), array ( "サイ", "10", "13", "55", "200", "0", "0" ), array ( "手鉤", "10", "13", "53", "200", "0", "1" ), array ( "ラジャタン", "16", "19", "32", "350", "0", "1" ), array ( "ワイルドスタッフ", "10", "13", "48", "225", "0", "1" ), array ( "こん棒", "10", "14", "44", "250", "0", "1" ), array ( "メイス", "11", "15", "40", "275", "0", "0" ), array ( "ワンド", "11", "15", "40", "275", "0", "1" ), array ( "ワーアックス", "12", "16", "33", "300", "0", "1" ), array ( "鍛冶ハンマー", "13", "17", "33", "325", "0", "0" ), array ( "ハンマーピック", "13", "17", "28", "325", "0", "0" ), array ( "ダイヤモンドメイス", "13", "17", "37", "325", "0", "1" ), array ( "バーブドホイップ", "13", "17", "33", "325", "0", "1" ),// array ( "モール", "14", "18", "32", "350", "0", "0" ), array ( "セプター", "14", "18", "30", "350", "0", "1" ), array ( "ウォーメイス", "15", "19", "26", "375", "0", "1" ), array ( "鉄扇", "10", "13", "50", "200", "0", "1" ), array ( "クォータースタッフ", "11", "14", "48", "225", "0", "1" ),// array ( "鉄棒", "12", "15", "45", "250", "0", "0" ), array ( "ヌンチャク", "12", "15", "47", "250", "0", "1" ), array ( "牧羊の杖", "13", "16", "40", "275", "0", "0" ),// array ( "ブラックスタッフ", "13", "16", "39", "275", "0", "1" ),// array ( "自然木の杖", "15", "18", "33", "325", "0", "1" ),// array ( "War Hammer", "17", "18", "28", "375", "0", "1" ), array ( "リピーティングボウ", "11", "15", "41", "275", "弓", "1" ),// array ( "マジカルショートボウ", "12", "16", "38", "300", "弓", "1" ), array ( "和弓", "13", "17", "24", "325", "弓", "1" ), array ( "エルフ式ロングボウ", "15", "19", "27", "375", "弓", "1" ), array ( "コンポジットボウ", "16", "20", "26", "400", "弓", "1" ),// array ( "弓", "17", "21", "25", "425", "弓", "1" ),// array ( "クロスボウ", "18", "22", "23", "450", "弓", "1" ),// array ( "ヘビークロスボウ", "20", "24", "21", "500", "弓", "1" ),// /* array ( "gargish katana", "11", "13", "44", "250", "0", "0" ), array ( "glass sword", "13", "15", "40", "275", "0", "0" ), array ( "gargish bone harvester","13", "15", "38", "300", "0", "0" ), array ( "dread sword", "15", "16", "32", "350", "0", "0" ), array ( "stone war sword", "15", "17", "28", "375", "0", "1" ), array ( "gargish daisho", "13", "15", "40", "275", "0", "0" ), array ( "gargish scythe", "15", "18", "32", "350", "0", "0" ), array ( "gargish talwar", "16", "18", "32", "350", "0", "0" ), array ( "gargish bardiche", "17", "18", "28", "375", "0", "1" ), array ( "dual short axes", "14", "16", "38", "300", "1", "0" ), array ( "gargish axe", "14", "16", "38", "300", "1", "0" ), array ( "gargish battle axe", "15", "17", "32", "350", "1", "1" ), array ( "shortblade", "9", "13", "50", "200", "0", "0" ), array ( "gargish dagger", "10", "11", "50", "200", "0", "0" ), array ( "bloodblade", "10", "12", "50", "200", "0", "0" ), array ( "gargish kryss", "10", "12", "50", "200", "0", "0" ), array ( "gargish warfork", "12", "13", "47", "250", "0", "1" ), array ( "gargish tekagi", "10", "12", "50", "200", "0", "0" ), array ( "shortblade", "12", "13", "48", "225", "0", "0" ), array ( "gargish pike", "14", "16", "38", "300", "0", "0" ), array ( "gargish lance", "17", "18", "23", "450", "0", "1" ), array ( "disc mace", "12", "14", "40", "275", "0", "0" ), array ( "gargish maul", "14", "16", "32", "350", "0", "1" ), array ( "gargish tessen", "10", "12", "50", "200", "0", "0" ), array ( "glass staff", "11", "14", "48", "225", "0", "0" ), array ( "serpentstone staff", "15", "17", "33", "325", "0", "0" ), array ( "gargish gnarled staff","15", "17", "33", "325", "0", "0" ), array ( "gargish war hammer", "17", "18", "28", "375", "0", "1" ),*/ array ( "ブーメラン", "11", "15", "50", "275", "0", "1" ), array ( "サイクロン", "13", "17", "38", "325", "0", "1" ), array ( "ソウルグレイブ", "16", "20", "27", "400", "0", "1" ), /* { "Repeating Crossbow", "10", "12", "41", "0", "0" ), array ( "Bow", "16", "18", "25", "0", "0" ), array ( "Composite Bow", "15", "17", "25", "0", "0" ), array ( "Crossbow", "18", "20", "24", "0", "0" ), array ( "Heavy Crossbow", "19", "20", "22", "0", "1" ), array ( "Yumi", "18", "20", "25", "0", "1" ), array ( "Magical Shortbow", "14", "16", "38", "0", "0" ), array ( "ElfCompositeLong", "19", "22", "27", "0", "1" ),*/ array ( "- Custom Set -", "0", "0", "50", "250", "1", "0" ) ); $_REQUEST['weapon'] = preg_replace('/[^0-9]/', '', @$_REQUEST['weapon']); $_REQUEST['STR'] = preg_replace('/[^0-9]/', '', @$_REQUEST['STR']); $_REQUEST['tactics'] = intval( preg_replace('/[^0-9\.]/', '', @$_REQUEST['tactics']) * 10 ); $_REQUEST['anatomy'] = intval( preg_replace('/[^0-9\.]/', '', @$_REQUEST['anatomy']) * 10 ); $_REQUEST['lumber'] = intval( preg_replace('/[^0-9\.]/', '', @$_REQUEST['lumber']) * 10 ); $_REQUEST['stamina'] = preg_replace('/[^0-9]/', '', @$_REQUEST['stamina']); $_REQUEST['damage'] = preg_replace('/[^0-9]/', '', @$_REQUEST['damage']); $_REQUEST['swing'] = preg_replace('/[^0-9]/', '', @$_REQUEST['swing']); if( $_REQUEST['weapon'] == "" ) $_REQUEST['weapon'] = 0; if( $_REQUEST['STR'] == "" ) $_REQUEST['STR'] = 100; if( $_REQUEST['tactics'] == "" ) $_REQUEST['tactics'] = 1000; if( $_REQUEST['anatomy'] == "" ) $_REQUEST['anatomy'] = 1000; if( $_REQUEST['lumber'] == "" ) $_REQUEST['lumber'] = 0; if( $_REQUEST['stamina'] == "" ) $_REQUEST['stamina'] = 100; if( $_REQUEST['damage'] == "" ) $_REQUEST['damage'] = 100; if( $_REQUEST['swing'] == "" ) $_REQUEST['swing'] = 0; if( $_REQUEST['weapon'] > count( $scs ) ) $_REQUEST['weapon'] = count( $scs ) - 1; print "

    STR:
    "; print "tactics:
    "; print "anatomy:
    "; print "lumber:
    "; print "スタミナ:
    "; print "武器ダメージ:
    "; print "速度:
    "; // print "STR:
    "; print "
    "; $i = $_REQUEST['weapon']; print "
    " . $scs[$i][0] . "
    ベースダメージ: " . $scs[$i][1] . " - " . $scs[$i][2] . "
    ベース速度: " . ( $scs[$i][4] / 100.0 ) . "s
    "; print "
    "; $swing = $_REQUEST['swing']; $speed2p40 = $scs[$i][4] - ( ( 25 * $_REQUEST['stamina'] / 30 / 25 * 25 ) ); $speed2p40 = intval( intval( $speed2p40 * 100 / ( 100 + $swing ) ) / 25 ) * 25; if( $speed2p40 <= 125 ) $speed2p40 = 125; print "振り速度: " . ( $speed2p40 / 100.0 ) . "s
    "; // $speed2 = ( ( 80000 / ( ( $_REQUEST['stamina'] + 100 ) * ( $scs[$i][4] * ( 100 + m_swing2 ) / 100 ) ) - 2 ) * 200 / 8 ); for( $j = 0; $j <= 210; $j += 30 ) { print "スタミナ:" . $j . " / "; $speed2p40o = 0; $end = false; for( $k = 0; $k <= 60; $k += 5 ) { $speed2p40 = $scs[$i][4] - ( ( 25 * $j / 30 / 25 * 25 ) ); $speed2p40 = intval( intval( $speed2p40 * 100 / ( 100 + $k ) ) / 25 ) * 25; if( $speed2p40 <= 125 ) $speed2p40 = 125; if( $speed2p40o != $speed2p40 ) { $speed2p40o = $speed2p40; print " / " . ( $speed2p40 / 100.0 ) . "s (+" . $k . ")"; if( $k == 0 && $speed2p40 <= 125 ) $end = true; } } print "
    "; if( $end ) break; } $stri = $_REQUEST['STR'] * 10; $taci = $_REQUEST['tactics']; $anai = $_REQUEST['anatomy']; $lumi = $_REQUEST['lumber']; $damage = $_REQUEST['damage']; if( $stri < 1000 ) $stri = ( $stri * 3 ) / 10; else $stri = ( $stri * 3 + 500 ) / 10; if( $taci < 1000 ) $taci = ( $taci * 10 ) / 16; else $taci = ( $taci * 10 + 1000 ) / 16; if( $anai < 1000 ) $anai = ( $anai * 10 ) / 20; else $anai = ( $anai * 10 + 1000 ) / 20; if( $lumi < 1000 ) $lumi = ( $lumi * 10 ) / 50; else $lumi = ( $lumi * 10 + 5000 ) / 50; /* print "str " . ( $stri / 10.0 ) . "
    "; print "tac " . ( $taci / 10.0 ) . "
    "; print "ana " . ( $anai / 10.0 ) . "
    "; print "lum " . ( $lumi / 10.0 ) . "
    "; print "dam " . $damage . "
    "; print "+ " . ( ( $stri + $taci + $anai + $lumi ) / 10.0 + $damage ) . " % " . "
    "; */ // if( pm_list != 0 || ! scs[pm_list][sel][5].equals("1") ) lumi = 0; /* g.drawString( "+ " + ( ( stri + taci + anai + lumi ) / 10.0f + m_damage2 ) + " %", gw - 50, 340 ); */ $d = intval( ( $scs[$i][1] * ( 100 + ( $stri + $taci + $anai + $lumi ) / 10 + $damage ) ) / 100 ); $d2 = intval( ( $scs[$i][2] * ( 100 + ( $stri + $taci + $anai + $lumi ) / 10 + $damage ) ) / 100 ); print "ダメージ範囲: " . $d . " - " . $d2 . "
    "; print "ダメージ範囲: (1.5倍) " . intval( $d * 1.5 ) . " - " . intval( $d2 * 1.5 ) . "
    "; print "ダメージ範囲: (2倍) " . intval( $d * 2 ) . " - " . intval( $d2 * 2 ) . "
    "; print "ダメージ範囲: (3倍) " . intval( $d * 3 ) . " - " . intval( $d2 * 3 ) . "
    "; exit; } function probability( $data, $tame2, $lore2, $loyal ) {// テイム難易度(数値x10)から成功率を計算して返す if( $data <= 291 ) $f = 990; else { if( $tame2 < $data ) { $a = 28 * ( $tame2 - $data ); }//テイム値がテイム難易度より低い else { $a = 6 * ( $tame2 - $data ); } if( $lore2 < $data ) { $b = 14 * ( $lore2 - $data ); }//ロア値がテイム難易度より低い else { $b = 6 * ( $lore2 - $data ); } $f = 700 + ( $a + $b ) / 2; if( $f < 200 && $f >= 0 ) $f = 200; if( $loyal < 100 ) { if( $f > 990 ) $f = 990; $f -= ( 100 - $loyal ) * 10; } } //if( $f < 0 ) $f = 0; return $f; }/* function probalility2( $need, $skill ) { if( $need <= 291 ) $f = 990; else { if( $skill > $need ) $bonus = ( $skill - $need ) * 6; else $bonus = -( $need - $skill ) * 14; $f = 700 + $bonus; if( $f > 990 ) $f = 990; $f -= ( 100 - $loyal ) * 10; } if( $f < 0 ) return "(0%)"; if( $f < 200 ) return "(*20.0%)"; return "(" . ( $f / 10.0 ) . "%)"; } function probability3( $data, $tame_, $lore_ ) {// テイム難易度(数値x10)から成功率を計算して返す if( $data <= 291 ) $f = 990; else { if( $tame_ < $data ) { $a = 28 * ( $tame_ - $data ); }//テイム値がテイム難易度より低い else { $a = 6 * ( $tame_ - $data ); } if( $lore_ < $data ) { $b = 14 * ( $lore_ - $data ); }//ロア値がテイム難易度より低い else { $b = 6 * ( $lore_ - $data ); } $f = 700 + ( a + b ) / 2; if( $f < 200 && $f >= 0 ) $f = 200; if( $f > 990 ) $f = 990; } if( $f < 0 ) return "(0%)"; if( $f < 200 ) return "(*20.0%)"; return "(" . ( $f / 10.0 ) . "%)"; } */ function MakeIPChange($mip) { global $uidlist; $aip = split("\.", $mip); for ($loop_cnt = 0; $loop_cnt < 4; $loop_cnt++) { $temp[($loop_cnt * 2)] = $uidlist[floor($aip[$loop_cnt] / 4)]; $temp[(($loop_cnt * 2) + 1)] = $uidlist[floor($aip[$loop_cnt] % 64)]; } $retval = $temp[0].$temp[1].$temp[2].$temp[3].$temp[4].$temp[5].$temp[6].$temp[7]; return $retval; } if( isset( $_REQUEST['bbs'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } include( "../../conf_bbs.php" ); dbopen(); $result = mysql_query( "select * FROM info_board WHERE md5 = '" . addslashes( @$_REQUEST['m'] ) . "' ORDER BY post_time DESC" ); print ""; $uidlist0 = file_get_contents( "../../bbs/ulist.cgi" ); $uidlist = explode( ":", $uidlist0 ); while( $row = mysql_fetch_array($result) ) { print "" . ""; } print "
    名前: " . $row['name'] . " (" . MakeIPChange( $row['ip'] ) . ")コメント: " . $row['comment'] . " (" . $row['post_time'] . ")
    "; if( isset( $_REQUEST['m'] ) && isset( $_REQUEST['title'] ) ) { print <<<_HTML_
    名前:
    _HTML_; /*
    Name: Comment:
    */ } // print "=" . @$_REQUEST['m']; exit; } if( isset( $_REQUEST['bbs_post'] ) ) { // if( @$_SESSION['@flag'] == 1 ) {} // else if( @$_SESSION['@creature_session'] == 1 ) {} // else { print "SESSION TIMEOUT"; exit; } if( @$_SESSION['@flag'] != 1 && @$_SESSION['@creature_session'] != 1 ) { print "SESSION TIMEOUT"; exit; } include( "../../conf_bbs.php" ); dbopen(); $_SERVER['REMOTE_HOST'] = gethostbyaddr( $_SERVER['REMOTE_ADDR'] ); if( $_SERVER['REMOTE_HOST'] == $_SERVER['REMOTE_ADDR'] || $_SERVER['REMOTE_HOST'] == "" ) { print "ホスト名が不明なので書きこみはできません。"; exit; } $result = mysql_query( "select * def_accesslist WHERE AccessKind = 0" ); if( $row = mysql_fetch_array($result) ) { if( strpos( $_SERVER['REMOTE_HOST'], $row['AddressData'] ) !== false ) { print "そのホスト名での書きこみは禁止されています。"; exit; } } $_REQUEST['name'] = str_replace( "<", "", @$_REQUEST['name'] ); $_REQUEST['name'] = str_replace( ">", "", @$_REQUEST['name'] ); $_REQUEST['comment'] = str_replace( "<", "", @$_REQUEST['comment'] ); $_REQUEST['comment'] = str_replace( ">", "", @$_REQUEST['comment'] ); if( @$_REQUEST['comment'] == "" ) { print "コメントを入力して下さい。"; exit; } $result = mysql_query( "select * def_xwordlist" ); if( $row = mysql_fetch_array($result) ) { if( strpos( @$_REQUEST['comment'], $row['WordData'] ) !== false || strpos( @$_REQUEST['name'], $row['WordData'] ) !== false ) { print "禁止ワードが含まれています。"; exit; } } if( @$_REQUEST['name'] == "" || stripos( @$_REQUEST['name'], "Laku" ) !== false || stripos( @$_REQUEST['name'], "Brunhilde" ) !== false || stripos( @$_REQUEST['name'], "Tranquillo" ) !== false || stripos( @$_REQUEST['name'], "管理" ) !== false || stripos( @$_REQUEST['name'], "vm" ) !== false ) { if( strpos( @$_REQUEST['name'], "#DlAtop1ZogTp=-" ) !== false ) { // 自分で書きこみする場合のパス $_REQUEST['name'] = str_replace( "#DlAtop1ZogTp=-", "", @$_REQUEST['name'] ); } else { print "その名前は使用できません。"; exit; } } $result = mysql_query( "insert into info_board (md5,ip,host,name,comment,post_time) VALUES ('" . addslashes( @$_REQUEST['m'] ) . "', '" . addslashes( $_SERVER['REMOTE_ADDR'] ) . "', '" . addslashes( $_SERVER['REMOTE_HOST'] ) . "', '" . addslashes( @$_REQUEST['name'] ) . "', '" . addslashes( @$_REQUEST['comment'] ) . "', NOW() )" ); $id = mysql_insert_id(); if( $id != "" && $id != 0 ) { $bbspostmail = "lakueth@yahoo.co.jp"; mb_language("Ja"); mb_internal_encoding("UTF-8"); $mbody = "[".@$_REQUEST['title']."][" . @$_REQUEST['name'] . "]\n\n"; $mbody .= @$_REQUEST['comment']."\n"; $mbody .= "[IP]:".$_SERVER['REMOTE_ADDR']."\n"; $mbody .= "[RemoteHost]:".$_SERVER['REMOTE_HOST']."\n"; if( isset($_SERVER['HTTP_CLIENT_IP']) ) $mbody .= "[HTTP_CLIENT_IP]:".$_SERVER['HTTP_CLIENT_IP'] ."\n"; if( isset($_SERVER['X_FORWARDED_FOR']) ) $mbody .= "[X_FORWARDED_FOR]:".$_SERVER['X_FORWARDED_FOR'] ."\n"; $mbody .= "[エージェント情報]:".$_SERVER['HTTP_USER_AGENT']."\n"; $mbody .= "[利用言語]:".$_SERVER['HTTP_ACCEPT_LANGUAGE']."\n"; $mbody .= "[レス削除]: https://uovm.info/?bbs_del&m=".@$_REQUEST['m']."&id=" . $id . "&pwd=" . "17ASbSXCvoZCG25SFhIsfhklSASWLZzzf2oasgrgfq2irg1AS095ri2hfBl\n"; // $boundary = md5(uniqid(rand())); // $msg = ""; $to = $bbspostmail; $from = $bbspostmail; $header = "From: ".$from."\n"; $header .= "Reply-To: ".$from."\n"; $header .= "MIME-version: 1.0\n"; $msubject = "[uovm] " . $_REQUEST['name'] . ":" . mb_substr( $_REQUEST['comment'], 0, 20, "UTF-8" ); if( mb_send_mail( $to, $msubject, $mbody, $header ) ) { }//mail(); if( ! isset( $_REQUEST['return'] ) ) { $_REQUEST['return'] = "/"; } $_REQUEST['return'] = str_replace( "//", "", $_REQUEST['return'] ); header( "Location: " . $_REQUEST['return'] ); // print "POST=" . @$_REQUEST['m']; exit; } // print mysql_error( ); print "書き込みに失敗しました。"; exit; } if( isset( $_REQUEST['bbs_del'] ) ) { if( @$_REQUEST['pwd'] != "17ASbSXCvoZCG25SFhIsfhklSASWLZzzf2oasgrgfq2irg1AS095ri2hfBl" ) { print "SESSION TIMEOUT"; exit; } if( @$_REQUEST['id'] == "" ) { print "SESSION TIMEOUT"; exit; } include( "../../conf_bbs.php" ); dbopen(); $result = mysql_query( "delete from info_board WHERE post_id = '" . addslashes( @$_REQUEST['id'] ) . "'" ); print "done."; exit; } function percent_loot1( $p ) { if( $p <= 0 ) return "0%"; return number_format( $p, 2 ) . "% (1/" . number_format( 100 / $p, 2 ) . ")"; } if( isset( $_REQUEST['req__sg_loot'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } include('../../conf_loot.php'); dbopen(); $SQL_query = "SELECT count(*), AVG(`count`), MIN(`count`), MAX(`count`), AVG(lv0), AVG(lv1), AVG(lv2), AVG(lv3), AVG(lv4), AVG(lv5), AVG(lv6), AVG(lv7)," . "MAX(lv0), MAX(lv1), MAX(lv2), MAX(lv3), MAX(lv4), MAX(lv5), MAX(lv6), MAX(lv7)," . "MIN(lv0), MIN(lv1), MIN(lv2), MIN(lv3), MIN(lv4), MIN(lv5), MIN(lv6), MIN(lv7)," . "MIN(weapon_human), MAX(weapon_human), AVG(weapon_human)," . "MIN(armor_human), MAX(armor_human), AVG(armor_human)," . "MIN(acce_human), MAX(acce_human), AVG(acce_human)," . "MIN(armor_elf), MAX(armor_elf), AVG(armor_elf)," . "MIN(weapon_gar), MAX(weapon_gar), AVG(weapon_gar)," . "MIN(armor_gar), MAX(armor_gar), AVG(armor_gar)," . "MIN(acce_gar), MAX(acce_gar), AVG(acce_gar)," . "SUM(lv5word0)," . "SUM(lv5word1)," . "SUM(lv5word2)," . "SUM(lv5acce_word0)," . "SUM(lv5acce_word1)," . "SUM(lv5acce_word2)," . "SUM(lv5weapon_brittle), SUM(lv5weapon_antique), SUM(lv5weapon_prized), SUM(lv5weapon_cursed), SUM(lv5weapon_clean)," . "SUM(lv5armor_brittle), SUM(lv5armor_antique), SUM(lv5armor_prized), SUM(lv5armor_cursed), SUM(lv5armor_clean)," . "SUM(lv5acce_antique), SUM(lv5acce_prized), SUM(lv5acce_cursed), SUM(lv5acce_clean)," . "SUM(lv6word0)," . "SUM(lv6word1)," . "SUM(lv6word2)," . "SUM(lv6acce_word0)," . "SUM(lv6acce_word1)," . "SUM(lv6acce_word2)," . "SUM(lv6weapon_brittle), SUM(lv6weapon_antique), SUM(lv6weapon_prized), SUM(lv6weapon_cursed), SUM(lv6weapon_clean)," . "SUM(lv6armor_brittle), SUM(lv6armor_antique), SUM(lv6armor_prized), SUM(lv6armor_cursed), SUM(lv6armor_clean)," . "SUM(lv6acce_antique), SUM(lv6acce_prized), SUM(lv6acce_cursed), SUM(lv6acce_clean)," . "SUM(lv7word0)," . "SUM(lv7word1)," . "SUM(lv7word2)," . "SUM(lv7acce_word0)," . "SUM(lv7acce_word1)," . "SUM(lv7acce_word2)," . "SUM(lv7weapon_brittle), SUM(lv7weapon_antique), SUM(lv7weapon_prized), SUM(lv7weapon_cursed), SUM(lv7weapon_clean)," . "SUM(lv7armor_brittle), SUM(lv7armor_antique), SUM(lv7armor_prized), SUM(lv7armor_cursed), SUM(lv7armor_clean)," . "SUM(lv7acce_antique), SUM(lv7acce_prized), SUM(lv7acce_cursed), SUM(lv7acce_clean)" . " FROM corpse_items WHERE type = 'ShadowGuardsBOSS' GROUP BY type"; $result = mysql_query($SQL_query); if( $row = mysql_fetch_array($result) ) { print "

    "; print " このページでは屋上(シャドウガード)のボスのマジックドロップ統計を出しています。
    "; print " 屋上ではごくごくまれに、ネガティブなしの伝説級がでることがあります。また、正味一回分の屋上あたりどれだけの伝説級がでているのかの統計が目的です。
    "; print " 後者はともかく前者は一応確認したことはあるものの、結局どの程度のレアさなのかはわかりません。それを調べるための統計ですが、途中で力尽きたらごめんなさい。
    "; print "*幸運値は1030~1490で行っています。また1パーティによるものなので、棺桶を分けた場合はまた全然違う結果になります。ツボ時の幸運値は1580~2290ですが、あまり使用頻度は高くないものの、影響は若干あります。
    "; print "*統計24回目以降の幸運値は1030~1750。ツボ時の幸運値は1580~2550。
    "; print "*統計161回目以降の幸運値は1220~2100。ツボ時の幸運値は1770~2900。
    "; print "*統計170回目くらい以降の幸運値は1220~2100。ツボ時の幸運値は1820~2950。
    "; print " 体感の話になりますが、幸運があるなしはネガティブなしの確率に大きな差があり、幸運0で回していた無限(195回)ではネガティブなしの伝説はでなかったのに対し、幸運1000以上をキープした一般は都合4度のネガティブなし伝説を出しています。
    "; print "*AFドロップの統計は本記事にて。こちらは未済がたまったら更新。
    "; print "*終了時にばらまかれるGPの統計結果は、一回につき平均1,188,626gp。最低999,978gp, 最高1,305,459gpでした。(記録35回)。なお隅っこで倒すとGPが減るらしいです。
    "; print "
    "; print "統計母数(全体と伝説級個別): " . $row['count(*)'] . "
    "; print "統計母数(AF中級とAF上級の個別): " . ( $row['count(*)'] - 71 ) . "
    "; print "
    "; print "マジックの総数(平均): " . $row['AVG(`count`)'] . " [" . $row['MIN(`count`)'] . "~" . $row['MAX(`count`)'] ."]
    "; print "
    "; print "マジックアイテム低級の数(平均): " . $row['AVG(lv0)'] . " [" . $row['MIN(lv0)'] . "~" . $row['MAX(lv0)'] ."]
    "; print "マジックアイテム中級の数(平均): " . $row['AVG(lv1)'] . " [" . $row['MIN(lv1)'] . "~" . $row['MAX(lv1)'] ."]
    "; print "マジックアイテム上級の数(平均): " . $row['AVG(lv2)'] . " [" . $row['MIN(lv2)'] . "~" . $row['MAX(lv2)'] ."]
    "; print "マジックアイテム最上級の数(平均): " . $row['AVG(lv3)'] . " [" . $row['MIN(lv3)'] . "~" . $row['MAX(lv3)'] ."]
    "; print "アーティファクト低級の数(平均): " . $row['AVG(lv4)'] . " [" . $row['MIN(lv4)'] . "~" . $row['MAX(lv4)'] ."]
    "; print "アーティファクト中級の数(平均): " . $row['AVG(lv5)'] . " [" . $row['MIN(lv5)'] . "~" . $row['MAX(lv5)'] ."]
    "; print "アーティファクト上級の数(平均): " . $row['AVG(lv6)'] . " [" . $row['MIN(lv6)'] . "~" . $row['MAX(lv6)'] ."]
    "; print "アーティファクト伝説級の数(平均): " . $row['AVG(lv7)'] . " [" . $row['MIN(lv7)'] . "~" . $row['MAX(lv7)'] ."]
    "; print "
    "; print "武器(人間)の数(平均): " . $row['AVG(weapon_human)'] . " [" . $row['MIN(weapon_human)'] . "~" . $row['MAX(weapon_human)'] ."]
    "; print "防具(人間)の数(平均): " . $row['AVG(armor_human)'] . " [" . $row['MIN(armor_human)'] . "~" . $row['MAX(armor_human)'] ."]
    "; print "アクセ(人間)の数(平均): " . $row['AVG(acce_human)'] . " [" . $row['MIN(acce_human)'] . "~" . $row['MAX(acce_human)'] ."]
    "; print "武器(ガーゴ)の数(平均): " . $row['AVG(weapon_gar)'] . " [" . $row['MIN(weapon_gar)'] . "~" . $row['MAX(weapon_gar)'] ."]
    "; print "防具(ガーゴ)の数(平均): " . $row['AVG(armor_gar)'] . " [" . $row['MIN(armor_gar)'] . "~" . $row['MAX(armor_gar)'] ."]
    "; print "アクセ(ガーゴ)の数(平均): " . $row['AVG(acce_gar)'] . " [" . $row['MIN(acce_gar)'] . "~" . $row['MAX(acce_gar)'] ."]
    "; print "
    "; $word_total = $row['SUM(lv7word0)'] + $row['SUM(lv7word1)'] + $row['SUM(lv7word2)']; print "伝説武器防具のワードなしの確率: " . percent_loot1( $row['SUM(lv7word0)'] * 100 / $word_total ) ."
    "; print "伝説武器防具の1ワードの確率: " . percent_loot1( $row['SUM(lv7word1)'] * 100 / $word_total ) ."
    "; print "伝説武器防具の2ワードの確率: " . percent_loot1( $row['SUM(lv7word2)'] * 100 / $word_total ) ."
    "; print "
    "; $word_acce_total = $row['SUM(lv7acce_word0)'] + $row['SUM(lv7acce_word1)'] + $row['SUM(lv7acce_word2)']; print "伝説アクセのワードなしの数(平均): " . percent_loot1( $row['SUM(lv7acce_word0)'] * 100 / $word_acce_total ) ."
    "; print "伝説アクセの1ワードの数(平均): " . percent_loot1( $row['SUM(lv7acce_word1)'] * 100 / $word_acce_total ) ."
    "; print "伝説アクセの2ワードの数(平均): " . percent_loot1( $row['SUM(lv7acce_word2)'] * 100 / $word_acce_total ) ."
    "; print "
    "; $weapon_total = $row['SUM(lv7weapon_brittle)'] + $row['SUM(lv7weapon_antique)'] + $row['SUM(lv7weapon_prized)'] + $row['SUM(lv7weapon_cursed)'] + $row['SUM(lv7weapon_clean)']; print "伝説武器の補強不可の確率: " . percent_loot1( $row['SUM(lv7weapon_brittle)'] * 100 / $weapon_total ) . "
    "; print "伝説武器の短命の確率: " . percent_loot1( $row['SUM(lv7weapon_antique)'] * 100 / $weapon_total ) . "
    "; print "伝説武器のPrizedの確率: " . percent_loot1( $row['SUM(lv7weapon_prized)'] * 100 / $weapon_total ) . "
    "; print "伝説武器のCursedの確率: " . percent_loot1( $row['SUM(lv7weapon_cursed)'] * 100 / $weapon_total ) . "
    "; print "伝説武器のクリーンの確率: " . percent_loot1( $row['SUM(lv7weapon_clean)'] * 100 / $weapon_total ) . "
    "; print "
    "; $armor_total = $row['SUM(lv7armor_brittle)'] + $row['SUM(lv7armor_antique)'] + $row['SUM(lv7armor_prized)'] + $row['SUM(lv7armor_cursed)'] + $row['SUM(lv7armor_clean)']; print "伝説防具の補強不可の確率: " . percent_loot1( $row['SUM(lv7armor_brittle)'] * 100 / $armor_total ) . "
    "; print "伝説防具の短命の確率: " . percent_loot1( $row['SUM(lv7armor_antique)'] * 100 / $armor_total ) . "
    "; print "伝説防具のPrizedの確率: " . percent_loot1( $row['SUM(lv7armor_prized)'] * 100 / $armor_total ) . "
    "; print "伝説防具のCursedの確率: " . percent_loot1( $row['SUM(lv7armor_cursed)'] * 100 / $armor_total ) . "
    "; print "伝説防具のクリーンの確率: " . percent_loot1( $row['SUM(lv7armor_clean)'] * 100 / $armor_total ) . "
    "; print "
    "; $acce_total = $row['SUM(lv7acce_antique)'] + $row['SUM(lv7acce_prized)'] + $row['SUM(lv7acce_cursed)'] + $row['SUM(lv7acce_clean)']; print "伝説アクセの短命の確率: " . percent_loot1( $row['SUM(lv7acce_antique)'] * 100 / $acce_total ) . "
    "; print "伝説アクセのPrizedの確率: " . percent_loot1( $row['SUM(lv7acce_prized)'] * 100 / $acce_total ) . "
    "; print "伝説アクセのCursedの確率: " . percent_loot1( $row['SUM(lv7acce_cursed)'] * 100 / $acce_total ) . "
    "; print "伝説アクセのクリーンの確率: " . percent_loot1( $row['SUM(lv7acce_clean)'] * 100 / $acce_total ) . "
    "; print "
    "; $p = ( $row['SUM(lv7acce_clean)'] + $row['SUM(lv7armor_clean)'] + $row['SUM(lv7weapon_clean)'] ) * 100 / ( $weapon_total + $armor_total + $acce_total ); print "伝説全てのうちのクリーンの確率: " . percent_loot1( $p ) . " / 1ボスあたりの確率: " . percent_loot1( $p * $row['AVG(lv7)'] ) . "
    "; print "
    "; print "
    "; $word_total = $row['SUM(lv6word0)'] + $row['SUM(lv6word1)'] + $row['SUM(lv6word2)']; print "AF上級武器防具のワードなしの確率: " . percent_loot1( $row['SUM(lv6word0)'] * 100 / $word_total ) ."
    "; print "AF上級武器防具の1ワードの確率: " . percent_loot1( $row['SUM(lv6word1)'] * 100 / $word_total ) ."
    "; print "AF上級武器防具の2ワードの確率: " . percent_loot1( $row['SUM(lv6word2)'] * 100 / $word_total ) ."
    "; print "
    "; $word_acce_total = $row['SUM(lv6acce_word0)'] + $row['SUM(lv6acce_word1)'] + $row['SUM(lv6acce_word2)']; print "AF上級アクセのワードなしの数(平均): " . percent_loot1( $row['SUM(lv6acce_word0)'] * 100 / $word_acce_total ) ."
    "; print "AF上級アクセの1ワードの数(平均): " . percent_loot1( $row['SUM(lv6acce_word1)'] * 100 / $word_acce_total ) ."
    "; print "AF上級アクセの2ワードの数(平均): " . percent_loot1( $row['SUM(lv6acce_word2)'] * 100 / $word_acce_total ) ."
    "; print "
    "; $weapon_total = $row['SUM(lv6weapon_brittle)'] + $row['SUM(lv6weapon_antique)'] + $row['SUM(lv6weapon_prized)'] + $row['SUM(lv6weapon_cursed)'] + $row['SUM(lv6weapon_clean)']; print "AF上級武器の補強不可の確率: " . percent_loot1( $row['SUM(lv6weapon_brittle)'] * 100 / $weapon_total ) . "
    "; print "AF上級武器の短命の確率: " . percent_loot1( $row['SUM(lv6weapon_antique)'] * 100 / $weapon_total ) . "
    "; print "AF上級武器のPrizedの確率: " . percent_loot1( $row['SUM(lv6weapon_prized)'] * 100 / $weapon_total ) . "
    "; print "AF上級武器のCursedの確率: " . percent_loot1( $row['SUM(lv6weapon_cursed)'] * 100 / $weapon_total ) . "
    "; print "AF上級武器のクリーンの確率: " . percent_loot1( $row['SUM(lv6weapon_clean)'] * 100 / $weapon_total ) . "
    "; print "
    "; $armor_total = $row['SUM(lv6armor_brittle)'] + $row['SUM(lv6armor_antique)'] + $row['SUM(lv6armor_prized)'] + $row['SUM(lv6armor_cursed)'] + $row['SUM(lv6armor_clean)']; print "AF上級防具の補強不可の確率: " . percent_loot1( $row['SUM(lv6armor_brittle)'] * 100 / $armor_total ) . "
    "; print "AF上級防具の短命の確率: " . percent_loot1( $row['SUM(lv6armor_antique)'] * 100 / $armor_total ) . "
    "; print "AF上級防具のPrizedの確率: " . percent_loot1( $row['SUM(lv6armor_prized)'] * 100 / $armor_total ) . "
    "; print "AF上級防具のCursedの確率: " . percent_loot1( $row['SUM(lv6armor_cursed)'] * 100 / $armor_total ) . "
    "; print "AF上級防具のクリーンの確率: " . percent_loot1( $row['SUM(lv6armor_clean)'] * 100 / $armor_total ) . "
    "; print "
    "; $acce_total = $row['SUM(lv6acce_antique)'] + $row['SUM(lv6acce_prized)'] + $row['SUM(lv6acce_cursed)'] + $row['SUM(lv6acce_clean)']; print "AF上級アクセの短命の確率: " . percent_loot1( $row['SUM(lv6acce_antique)'] * 100 / $acce_total ) . "
    "; print "AF上級アクセのPrizedの確率: " . percent_loot1( $row['SUM(lv6acce_prized)'] * 100 / $acce_total ) . "
    "; print "AF上級アクセのCursedの確率: " . percent_loot1( $row['SUM(lv6acce_cursed)'] * 100 / $acce_total ) . "
    "; print "AF上級アクセのクリーンの確率: " . percent_loot1( $row['SUM(lv6acce_clean)'] * 100 / $acce_total ) . "
    "; print "
    "; $clean = $row['SUM(lv6acce_clean)'] + $row['SUM(lv6armor_clean)'] + $row['SUM(lv6weapon_clean)']; $sum = $weapon_total + $armor_total + $acce_total; $p = ( $clean ) * 100 / ( $sum ); print "AF上級全てのうちのクリーンの確率: " . percent_loot1( $p ) . " / 1ボスあたりの確率: " . percent_loot1( $p * $row['AVG(lv6)'] ) . "
    "; print "
    "; print "
    "; $word_total = $row['SUM(lv5word0)'] + $row['SUM(lv5word1)'] + $row['SUM(lv5word2)']; print "AF中級武器防具のワードなしの確率: " . percent_loot1( $row['SUM(lv5word0)'] * 100 / $word_total ) ."
    "; print "AF中級武器防具の1ワードの確率: " . percent_loot1( $row['SUM(lv5word1)'] * 100 / $word_total ) ."
    "; print "AF中級武器防具の2ワードの確率: " . percent_loot1( $row['SUM(lv5word2)'] * 100 / $word_total ) ."
    "; print "
    "; $word_acce_total = $row['SUM(lv5acce_word0)'] + $row['SUM(lv5acce_word1)'] + $row['SUM(lv5acce_word2)']; print "AF中級アクセのワードなしの数(平均): " . percent_loot1( $row['SUM(lv5acce_word0)'] * 100 / $word_acce_total ) ."
    "; print "AF中級アクセの1ワードの数(平均): " . percent_loot1( $row['SUM(lv5acce_word1)'] * 100 / $word_acce_total ) ."
    "; print "AF中級アクセの2ワードの数(平均): " . percent_loot1( $row['SUM(lv5acce_word2)'] * 100 / $word_acce_total ) ."
    "; print "
    "; $weapon_total = $row['SUM(lv5weapon_brittle)'] + $row['SUM(lv5weapon_antique)'] + $row['SUM(lv5weapon_prized)'] + $row['SUM(lv5weapon_cursed)'] + $row['SUM(lv5weapon_clean)']; print "AF中級武器の補強不可の確率: " . percent_loot1( $row['SUM(lv5weapon_brittle)'] * 100 / $weapon_total ) . "
    "; print "AF中級武器の短命の確率: " . percent_loot1( $row['SUM(lv5weapon_antique)'] * 100 / $weapon_total ) . "
    "; print "AF中級武器のPrizedの確率: " . percent_loot1( $row['SUM(lv5weapon_prized)'] * 100 / $weapon_total ) . "
    "; print "AF中級武器のCursedの確率: " . percent_loot1( $row['SUM(lv5weapon_cursed)'] * 100 / $weapon_total ) . "
    "; print "AF中級武器のクリーンの確率: " . percent_loot1( $row['SUM(lv5weapon_clean)'] * 100 / $weapon_total ) . "
    "; print "
    "; $armor_total = $row['SUM(lv5armor_brittle)'] + $row['SUM(lv5armor_antique)'] + $row['SUM(lv5armor_prized)'] + $row['SUM(lv5armor_cursed)'] + $row['SUM(lv5armor_clean)']; print "AF中級防具の補強不可の確率: " . percent_loot1( $row['SUM(lv5armor_brittle)'] * 100 / $armor_total ) . "
    "; print "AF中級防具の短命の確率: " . percent_loot1( $row['SUM(lv5armor_antique)'] * 100 / $armor_total ) . "
    "; print "AF中級防具のPrizedの確率: " . percent_loot1( $row['SUM(lv5armor_prized)'] * 100 / $armor_total ) . "
    "; print "AF中級防具のCursedの確率: " . percent_loot1( $row['SUM(lv5armor_cursed)'] * 100 / $armor_total ) . "
    "; print "AF中級防具のクリーンの確率: " . percent_loot1( $row['SUM(lv5armor_clean)'] * 100 / $armor_total ) . "
    "; print "
    "; $acce_total = $row['SUM(lv5acce_antique)'] + $row['SUM(lv5acce_prized)'] + $row['SUM(lv5acce_cursed)'] + $row['SUM(lv5acce_clean)']; print "AF中級アクセの短命の確率: " . percent_loot1( $row['SUM(lv5acce_antique)'] * 100 / $acce_total ) . "
    "; print "AF中級アクセのPrizedの確率: " . percent_loot1( $row['SUM(lv5acce_prized)'] * 100 / $acce_total ) . "
    "; print "AF中級アクセのCursedの確率: " . percent_loot1( $row['SUM(lv5acce_cursed)'] * 100 / $acce_total ) . "
    "; print "AF中級アクセのクリーンの確率: " . percent_loot1( $row['SUM(lv5acce_clean)'] * 100 / $acce_total ) . "
    "; print "
    "; $p = ( $row['SUM(lv5acce_clean)'] + $row['SUM(lv5armor_clean)'] + $row['SUM(lv5weapon_clean)'] ) * 100 / ( $weapon_total + $armor_total + $acce_total ); print "AF中級全てのうちのクリーンの確率: " . percent_loot1( $p ) . " / 1ボスあたりの確率: " . percent_loot1( $p * $row['AVG(lv5)'] ) . "
    "; print "
    "; print "
    "; print "
    "; print "実際に確認した伝説級クリーンの例
    "; print "
    "; print " "; } exit; } if( isset( $_REQUEST['req__pet_req'] ) ) { if( @$_SESSION['@flag'] != 1 ) { print "SESSION TIMEOUT"; exit; } $scs = array( array ( -9, "cat, chicken, skittering hopper, rat, chicken lizard, battle chicken lizard" ), array ( 111, "cow, goat, pig, sheep" ), array ( 111, "eagle, rubby boura" ), array ( 171, "hind, slime, corrosive slime, timber wolf" ), array ( 231, "horse, forest/desert ostard, ridable llama, boar, lowland boura" ), array ( 291, "polar bear, black bear, llama" ), array ( 351, "deathwatch beetle, cougar, brown bear" ), array ( 411, "scorpion, yalligator, high plains boura" ), array ( 471, "snow leopard, panther, grey wolf" ), array ( 531, "great hart, giant spider, grizzly bear, snake, wolf spider" ), array ( 591, "white wolf, stone slith" ), array ( 687, "gaman" ), array ( 711, "bull, hellcat, greater mongbat, giant ice worm, iron beetle" ), array ( 771, "frenzied ostard, giant toad" ), array ( 807, "bake kitsune, lava lizard, slith" ), array ( 831, "imp, dire wolf" ), array ( 843, "drake" ), array ( 855, "hell hound" ), array ( 891, "predator hellcat" ), array ( 939, "dragon, rune beetle" ), array ( 951, "nightmare, unicorn, ki-rin, skree" ), array ( 963, "white wyrm" ), array ( 987, "hiryu" ), array ( 1011, "cu sidhe, reptalon, najasaurus, dimetrosaur" ), array ( 1047, "greater dragon" ), array ( 1060, "fire steed" ), array ( 1071, "dread warhorse, raptor, (育成済みペットの最高値)" ) ); if( ! isset( $_REQUEST['tame'] ) ) $_REQUEST['tame'] = 100; if( ! isset( $_REQUEST['lore'] ) ) $_REQUEST['lore'] = 100; if( ! isset( $_REQUEST['loyal'] ) ) $_REQUEST['loyal'] = 100; $tame2 = intval( @$_REQUEST['tame'] * 10 ); $tame = $tame2 / 10.0; $lore2 = intval( @$_REQUEST['lore'] * 10 ); $lore = $lore2 / 10.0; $loyal = intval( @$_REQUEST['loyal'] ); print "
    "; print "
    テイム:
    "; print "ロア:
    "; print "忠誠度: (命令に失敗すると忠誠度は3さがる。成功すると1上がる)
    "; print "
    "; $base2 = 1200; for( $i = 0; $i < 1200; $i++ ) { if( $tame2 < $i ) { $a = 28 * ( $tame2 - $i ); }//テイム値がテイム難易度より低い else { $a = 6 * ( $tame2 - $i ); } if( $lore2 < $i ) { $b = 14 * ( $lore2 - $i ); }//ロア値がテイム難易度より低い else { $b = 6 * ( $lore2 - $i ); } //$a = ( $a + $b ); $a = ( $a + $b ) / 2; // if( $a > -10 && $a < 10 ) { if( $a > -5 && $a < 5 ) { // if( $a >= -1 && $a <= 1/* > -1 && $a < 1*/ ) { $base2 = $i; break; } } // $base2 = 1200; // $base2 = get_base_tc4( $tame2, $lore2 ); $base_skill = $base2 / 10.0; $list_shift = -$base2 + 100; $pos = -$list_shift + 50; $j = $base2; if( $j <= 291 ) $j = 291; $enb_tran = -1; for( $i = count( $scs ) - 1; $i >= 0; $i-- ) { if( $scs[$i][0] <= 291 || $scs[$i][0] <= j + 50 ) { $enb_tran = $i; break; } } $enb_full = -1; for( $i = count( $scs ) - 1; $i >= 0; $i-- ) { if( $scs[$i][0] <= 291 || $scs[$i][0] <= $j - 48.9 ) { $enb_full = $i; break; } } if( $base_skill >= 0 && $base_skill <= 150 ) { print "テイム:" . number_format( $tame, 1 ) . "
    "; print "ロア:" . number_format( $lore, 1 ) . "
    "; print "忠誠度:" . $loyal . "

    "; print "ベース:" . number_format( $base_skill, 1 ) . "
    "; if( $enb_tran >= 0 ) { for( $i = 0, $j = count( $scs ) - 1; $i < count( $scs ); $i++ ) { $f = probability( $scs[$i][0], $tame2, $lore2, $loyal ); if( $f <= 0 ) { $j = $i - 1; break; } } print ( $scs[$j][0] / 10.0 ) . " - " . $scs[$j][1] . "まで 譲渡による入手が可能
    "; } if( $enb_full >= 0 ) { for( $i = 0, $j = count( $scs ) - 1; $i < count( $scs ); $i++ ) { $f = probability( $scs[$i][0], $tame2, $lore2, $loyal ); if( $f < 990 ) { $j = $i - 1; break; } } print ( $scs[$j][0] / 10.0 ) . " - " . $scs[$j][1] . "まで 命令成功率99%
    "; } } print "

    "; for( $i = count( $scs ) - 1; $i >= 0; $i-- ) { // if( $list_shift + $scs[$i][0] >= -50 && $list_shift + $scs[$i][0] <= 250 ) { if( $base_skill >= 0 && $base_skill <= 150 ) { $f = probability( $scs[$i][0], $tame2, $lore2, $loyal ); if( $f <= 0 ) $color = "0.0% (" . number_format( $f / 10.0, 1 ) . "%)"; else if( $f < 990 ) $color = number_format( $f / 10.0, 1 ) . "%"; else $color = "99.0% (" . number_format( $f / 10.0, 1 ) . "%)"; print ""; //draw_bar( g, 206 + sw, list_shift - 8 + anii[i][1], 20, f ); } else { $f = 0; print ""; // print ( $scs[$i][0] / 10.0 ) . " - " . $scs[$i][1] . "
    "; } /* // g.setColor( Color.lightGray ); if( anii[i][1] > 291 ) { g.fillRect( 200 - anii[i][0], list_shift + anii[i][1] - 50, 1, 100 ); // g.setColor( Color.gray ); } if( i == focus2 ) { sw = 138 + anii[i][0]; } g.fillRect( 200 - anii[i][0], list_shift + anii[i][1], sw + 20, 1 ); */ // } } print "
    難易度命令成功率種類
    " . number_format( $scs[$i][0] / 10.0, 1 ) . "" . $color . "" . $scs[$i][1] . "
    " . number_format( $scs[$i][0] / 10.0, 1 ) . "0.0%" . $scs[$i][1] . "
    "; /* print <<<_HTML_ <"; //return ""; } } } $data = @file_get_contents( $matches[1], FILE_USE_INCLUDE_PATH); if( ! $data ) return ""; $base64 = base64_encode( $data ); // $size = strlen( $base64 ); // $size_t += $size; //$buff0 .=$matches[1] . " > import size:" . strlen( $base64 ) . "
    "; $result = ""; /*"";*/ if( $cache ) { $img2base64cache_name[] = $matches[1]; $img2base64cache[] = $base64; } return $result; } function background2base64( $matches ) {//バックグラウンドのbase64埋め込み(コピーされていいものに限る) global $size_t; global $img2base64cache_name; global $img2base64cache; global $not_image; if( $not_image ) return ""; if( strpos( $matches[1], ".gif" ) !== false ) $ext = "gif"; else if( strpos( $matches[1], ".jpg" ) !== false ) $ext = "jpg"; else if( strpos( $matches[1], ".png" ) !== false ) $ext = "png"; else return ""; $cache = false; if( ( strpos( $matches[1], "_" ) !== false && strpos( $matches[1], "_" ) == 0 ) || strpos( $matches[1], "../../_" ) !== false ) { $cache = true; for( $i = 0; $i < count( $img2base64cache_name ); $i++ ) { if( $img2base64cache_name[$i] == $matches[1] ) { return " background='data:image/" . $ext . ";base64," . $img2base64cache[$i] . "'"; } } } if( strpos( $matches[1], "/" ) !== false && strpos( $matches[1], "/" ) == 0 ) { $matches[1] = str_replace( "/", "", $matches[1] ); } $data = @file_get_contents( "../../img/" . $matches[1], FILE_USE_INCLUDE_PATH); if( ! $data ) return ""; $base64 = base64_encode( $data ); // $size = strlen( $base64 ); // $size_t += $size; $result = " background='data:image/" . $ext . ";base64," . $img2base64cache[$i] . "'"; if( $cache ) { $img2base64cache_name[] = $matches[1]; $img2base64cache[] = $base64; } return $result; } $image_mode = "base64"; //$image_mode = "そのままファイル処理"; if( $image_mode == "そのままファイル処理" ) { $data = preg_replace("/]+)(.*?)>/", /* "

    ", */ "", $data ); } else {//BASE64化埋め込み $data = preg_replace_callback("/]+)\"?(.*?)>/", "img2base64", $data ); //$data = preg_replace_callback("/]+)(.*?)>/", "img2base64", $data ); $data = preg_replace_callback("/ background=([^ >]+)/", "background2base64", $data ); //$buff0 .="total: " . $size_t . "
    "; } function img_ins64( $matches ) {//URLのbase64化 return ">image_ins(\"" . base64_encode( "../../img/" . $matches[1] ); } $data = preg_replace_callback("/>image_ins\(\"([^\"]+)/", "img_ins64", $data ); //ボディ /* function background2base64( $matches ) {//背景イメージファイルのbase64埋め込み if( strpos( $matches[1], ".gif" ) !== false ) $ext = "gif"; else if( strpos( $matches[1], ".jpg" ) !== false ) $ext = "jpg"; else if( strpos( $matches[1], ".png" ) !== false ) $ext = "png"; else return ""; $data = @file_get_contents( $matches[1], FILE_USE_INCLUDE_PATH); if( ! $data ) return ""; $base64 = base64_encode( $data ); return " style=\"background: transparent url(data:image/" . $ext . ";base64," . $base64 . ") no-repeat scroll 0%;\" "; return " background=\"data:image/" . $ext . ";base64," . $base64 . "\""; } */ if( preg_match('/(.*?)<\/vm>/',$data,$name) ) { //$name[1] = preg_replace_callback("/ background=(\"?.*?\"?)>/", "background2base64", $name[1] ); //53d2ac00158ae0a84436bc668890b9de //今は特定IDオープンは停止 $buff0 .=$name[1]; } //記事本文 preg_match_all('/(.*?)<\/vm>/ms',$data,$name_child); preg_match_all('/(.*?)<\/vm>/ms',$data,$name); $now = strtotime("now"); function whatsnew( $date ) { global $now, $date_unix; preg_match_all('/([\d]+)\/([\d]+)\/([\d]+)/ms',$date,$name_date); $max = count( $name_date[1] ) - 1; $date_s = $name_date[1][ $max ] . "-" . $name_date[2][ $max ] . "-" . $name_date[3][ $max ]/* . " 00:00:00"*/; //$buff0 .=$now . " - " . strtotime($date_s); $date_unix = strtotime($date_s); return ( ( ( $now - $date_unix ) / ( 60 * 60 * 24 ) ) <= 31 ); } //$span_anchor = " style=\"cursor:pointer; color: #003399;\"" // . " onmouseover=\"javascript:this.style.color='#F05C00';\"" // . " onmouseout=\"javascript:this.style.color='#003399';\""; /* $id_id = array(); $id_title = array(); //リンクID取得 for( $z = 0; $z < count( $name[1] ); $z++ ) { $id_id[] = "o" . $z; $id_title[] = $name[2][$z]; } for( $y = 0; $y < count( $name_child[1] ); $y++ ) { $id_id[] = "c" . $y; $id_title[] = $name_child[2][$y]; } */ function vma( $matches ) {//簡易リンク $md5 = md5( $matches[1] ); return "" . $matches[1] . ""; /*global $id_id, $id_title; for( $i = 0; $i < count( $id_id ); $i++ ) { if( $matches[1] == $id_title[$i] ) return "" . $id_title[$i] . ""; } return $matches[1]; */ } $buffs = array(); $times = array(); for( $z = 0; $z < count( $name[1] ); $z++ ) { //$buff0 .="name:" . $name[1][$z] . "
    "; //$buff0 .="tag:" . $name[3][$z] . "
    "; $name[6][$z] = preg_replace_callback("/(.*?)<\/vma>/", "vma", $name[6][$z] ); $new = whatsnew( $name[5][$z] ); $times[] = $date_unix; $md5 = md5( $name[2][$z] ); $buffs[] ="● " . ( $new ? "" : "" ) . "[] " . $name[2][$z] . " (" . str_replace( ".", ". ", $name[5][$z] ) . ")" . ( $new ? " [NEW !]" : "" ) . "
    ";//
    for( $y = 0; $y < count( $name_child[1] ); $y++ ) { if( $name[1][$z] == $name_child[1][$y] ) { $name_child[5][$y] = preg_replace_callback("/(.*?)<\/vma>/", "vma", $name_child[5][$y] ); $new = whatsnew( $name_child[4][$y] ); $times[] = $date_unix; $md5 = md5( $name_child[2][$y] ); //$buff0 .="child
    "; //$buff0 .="tag:" . $name_child[3][$y] . "
    "; $buffs[] ="● [" .$name[2][$z] . "]" . ( $new ? "" : "" ) . " [] " . $name_child[2][$y] . " (" . str_replace( ".", ". ", $name_child[4][$y] ) . ")" . ( $new ? " [NEW !]" : "" ) . "
    "; } } //$buff0 .="


    "; } array_multisort( $times, SORT_DESC, SORT_NUMERIC, $buffs ); for( $z = 0; $z < count( $buffs ); $z++ ) { $buff0 .= $buffs[$z]; } //フッター $buff0 .= foot_vm(); /* if( preg_match('/(.*?)<\/vm>/ms',$data,$name) ) { if( strpos( __FILE__, "_scr_test" ) !== false ) { }//UO Indexアクセスなし テスト else { $name[1] = str_replace( "", '', $name[1] ); } $name[1] = str_replace( "", '', $name[1] ); $buff0 .= $name[1]; } */ if( $not_image ) { file_put_contents('../../index_data.cache_no_image.pl', $buff0 ); print $buff0; } else { file_put_contents('../../index_data.cache.pl', $buff0 ); print $buff0; } home( @$_REQUEST['p'] ); exit; ?>