','〜','','','卵', '座','A','B','C','D','〓','窓','口','券','番','当','K','席','賞','品','O', '個','満','倒','↑','応','援','送','聞','↓','参','案','内','←','解','繁','確', '認','外','様','戻','防','切','替','非','示','設','食','→','呼','止','択','必', '殺','図','修','更','塩','に','ぬ','ね','の','は','ひ','ふ','へ','ほ','ま','み', 'む','め','も','や','ゆ','よ','ら','り','る','れ','ろ','わ','ん','が','ぎ','ぐ', 'げ','ご','ざ','じ','ず','ぜ','ぞ','だ','総','づ','で','ど','ば','び','ぶ','べ', 'ぼ','ぱ','ぴ','ぷ','ぺ','ぽ','ヲ','ァ','ィ','ゥ','ェ','ォ','ャ','ュ','ョ','ッ', 'ー','ア','イ','ウ','エ','オ','カ','キ','ク','ケ','コ','サ','シ','ス','セ','ソ', 'タ','チ','ツ','テ','ト','ナ','ニ','ヌ','ネ','ノ','ハ','ヒ','フ','ヘ','ホ','マ', 'ミ','ム','メ','モ','ヤ','ユ','ヨ','ラ','リ','ル','レ','ロ','ワ','ン','蒸','茶', 'ガ','ギ','グ','ゲ','ゴ','ザ','ジ','ズ','ゼ','ゾ','ダ','ヂ','ヅ','デ','ド','バ', 'ビ','ブ','ベ','ボ','パ','ピ','プ','ペ','ポ','ヴ','。','「','」','、','質','鍋' ); // ※乱数系列の初期化 list($usec, $sec) = explode(' ', microtime()); srand((float) $sec + ((float) $usec * 100000)); // ※アクセス禁止判定 $addr = $_SERVER['REMOTE_ADDR']; if (empty($addr)) $addr = getenv('REMOTE_ADDR'); if (!empty($addr)) { // ※アクセス禁止IPの判定 if (count($KICK_ADDR)) { $ip = explode('.', $addr); foreach ($KICK_ADDR as $val) { $a = explode('.', $val); if (($a[0] == $ip[0] or $ip[0] == '*') and ($a[1] == $ip[1] or $ip[1] == '*') and ($a[2] == $ip[2] or $ip[2] == '*') and ($a[3] == $ip[3] or $ip[3] == '*')) $_GET['Mode'] = 'kick'; } } // ※アクセス禁止ホストの判定 if (count($KICK_HOST)) { $host = gethostbyaddr($addr); foreach ($KICK_HOST as $val) if (strstr($host, $val)) $_GET['Mode'] = 'kick'; } } // ================================================================== // ■ メイン処理 // ================================================================== fncHTML_Header($_GET['Mode'] == 'edit'); switch ($_GET['Mode']) { // ※最初にアクセスされたとき case FALSE: fncHTML_Title('パスワードの入力'); fncHTML_Text1(); fncHTML_PassForm(); break; // ※移住パスが送信されたとき case 'check': fncHTML_Title(); list($Password, $n) = fncDecode($_POST['PassText']); if ($Password == 'NG') { fncHTML_Error1($n); } else { fncDATA2ChrDAT(); if (($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 253) && ($ChrDAT['Type'] == 0)) fncReport2(); else fncReport1(); switch (TRUE) { case (($ReportLv == 'full') and xFLAG_EDITx): fncHTML_EditIn(); break; case ($ChrDAT['Name1'] == 'オルルド' and $ChrDAT['Life'] < 31 and $ChrDAT['Age'] < 29): fncHTML_Medical(); break; } if ($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 252) fncHTML_Text5(); } fncHTML_PassForm($_POST['PassText']); break; // ※オルルド短命バグを治療する case 'cure': fncHTML_Title(); list($Password, $n) = fncDecode($_POST['PassText']); if ($Password == 'NG') { fncHTML_Error1($n); } else { fncDATA2ChrDAT(); if ($ChrDAT['Age'] < 30) { $ChrDAT['Life'] = (30 - $ChrDAT['Age']) * 30; fncChrDAT2DATA(); $Password = fncEncode(); } if (($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 253) && ($ChrDAT['Type'] == 0)) fncReport2(); else fncReport1(); fncHTML_Text2(); } if ($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 252) fncHTML_Text5(); fncHTML_PassForm($Password); break; // ※移住パスの編集モード case 'edit': fncHTML_Title('キャラデータの編集'); list($Password, $n) = fncDecode($_POST['PassText']); if ($Password == 'NG') { fncHTML_Error1($n); } else { fncDATA2ChrDAT(); fncEditMode(); fncHTML_Text3(); } break; // ※編集されたデータを元にパスワードを出力 case 'enter': fncHTML_Title(); fncEdit2ChrDAT(); fncChrDAT2DATA(); $Password = fncEncode(); if (($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 253) && ($ChrDAT['Type'] == 0)) fncReport2(); else fncReport1(); fncHTML_Text4(); if ($ChrDAT['Age'] < 1 or $ChrDAT['Age'] > 252) fncHTML_Text5(); fncHTML_PassForm($Password); break; // ※アクセス禁止ユーザーへの処理 case 'kick': fncHTML_Title('警告'); fncHTML_KickExit(); break; // ※不正なアクセスの場合の処理 default: fncHTML_Title('警告'); fncHTML_ErrorExit(); } fncHTML_Footer(); exit; // ================================================================== // ■ キャラクラの紹介文 // ================================================================== function fncReport1() { global $ChrDAT, $ReportLv, $PATH_FACE, $PATH_ITEM; echo '
'; if ($ChrDAT['Sex']) { echo '
'; } else { echo '
'; } echo ''; switch ($ReportLv) { case 'full': echo ' '.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].'。'.($ChrDAT['Sex'] ? '女性' : '男性').'。'.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才。'.fncNum($ChrDAT['Peak']).'才ピーク。
'; echo ' '.chrRace().'。 顔番号 '.$ChrDAT['FaceID'].'。 顔グループ '.fncNum(substr($ChrDAT['FaceID'],1,1)).'。
'; echo ' '.chrRank().'。 所持金は '.fncNum($ChrDAT['Money']).'プゥ。

'; echo '[性格] '.chrSEIKAKU().'(積極性 '.fncNum($ChrDAT['seiSE'],1).' / 勤勉さ '.fncNum($ChrDAT['seiKI'],1).' / 優しさ '.fncNum($ChrDAT['seiYA'],1).')
'; echo '[幸福度] '.chrHappy().'('.fncNum($ChrDAT['Happy'],1).')  [余命] '.fncNum($ChrDAT['Life']).'日  [人気] '.fncNum($ChrDAT['NINKI'],1).'
'; echo '[レベル] スピード '.fncNum($ChrDAT['Lv0']).' / スタミナ '.fncNum($ChrDAT['Lv1']).' / スピリット '.fncNum($ChrDAT['Lv2']).'
'; echo '[素質] スピード '.fncNum($ChrDAT['So0']).' / スタミナ '.fncNum($ChrDAT['So1']).' / スピリット '.fncNum($ChrDAT['So2']).'
'; echo '[才能] '.chrGift2().'
'; echo '[所持品] '.chrItem(' / ', '', 'なし').'
'; break; case 'half': echo ' '.chrRace().'の'.chrSex().'、'.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].''; if ($ChrDAT['Type'] > 1) echo 'さんです。
'; elseif ($ChrDAT['Sex']) echo 'ちゃんです。
'; else echo 'くんです。
'; echo ' お顔はご覧のとおり。 いわゆる顔番号は '.$ChrDAT['FaceID'].' で、顔グループは '.fncNum(substr($ChrDAT['FaceID'],1,1)).' です。
'; echo ' '.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才。 '.chrLife(); echo '

現在は、'.chrRank().'。
'; echo '性格は「'.chrSEIKAKU().'」で、このところは「'.chrHappy().'」なんだそうです。

'; echo '現在の武術能力は、スピード'.fncNum($ChrDAT['Lv0']).'、スタミナ'.fncNum($ChrDAT['Lv1']).'、スピリット'.fncNum($ChrDAT['Lv2']).'
'; echo 'ガアチの姓名判断によると、武術に関しては 『 '.chrURANAI().' 』 とのこと。
'; echo 'ピーク時の適正レベルは、スピード'.fncNum($ChrDAT['Te0']).'、スタミナ'.fncNum($ChrDAT['Te1']).'、スピリット'.fncNum($ChrDAT['Te2']).'。
'; switch ($ChrDAT['Age'] - $ChrDAT['Peak']) { case 0: echo 'ちょうど今が成長のピークです'; break; case 1: case 2: case 3: echo 'もうじきピークの'.fncNum($ChrDAT['Peak']).'才になります'; break; default: if ($ChrDAT['Age'] > $ChrDAT['Peak']) echo fncNum($ChrDAT['Peak']).'才のときにピークを迎えました'; else echo fncNum($ChrDAT['Peak']).'才で成長のピークを迎えます'; } echo '。
才能は、'.chrGift().'。
'; echo 'お金は、'.chrMoney().'。
持ち物は、'.chrItem('、', 'を持っています', '何も持っていません').'。
'; break; default: echo ' '.chrRace().'の'.chrSex().'、'.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].''; if ($ChrDAT['Type'] > 1) echo 'さんです。
'; elseif ($ChrDAT['Sex']) echo 'ちゃんです。
'; else echo 'くんです。
'; echo ' お顔はご覧のとおり。 いわゆる顔番号は '.$ChrDAT['FaceID'].' で、顔グループは '.fncNum(substr($ChrDAT['FaceID'],1,1)).' です。
'; echo ' '.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才で、'; switch ($ChrDAT['Age'] - $ChrDAT['Peak']) { case -4: case -3: case -2: echo 'もうじきピークを迎えます'; break; case -1: case 0: case 1: echo '今が最も体力の充実した時期です'; break; case 2: case 3: case 4: echo 'ピークを少し過ぎています'; break; default: if ($ChrDAT['Age'] > $ChrDAT['Peak']) echo '体力が衰えてきています'; else echo 'ピークはまだしばらく先です'; } echo '。

現在は、'.chrRank().'。
'; echo '性格は「'.chrSEIKAKU().'」で、このところは「'.chrHappy().'」なんだそうです。

'; echo '現在の武術能力は、スピード'.fncNum($ChrDAT['Lv0']).'、スタミナ'.fncNum($ChrDAT['Lv1']).'、スピリット'.fncNum($ChrDAT['Lv2']).'
'; echo 'ガアチの姓名判断によると、武術に関しては 『 '.chrURANAI().' 』 とのこと。
'; echo '才能は、'.chrGift().'。
'; echo 'お金は、'.chrMoney().'。
持ち物は、'.chrItem('、', 'を持っています', '何も持っていません').'。
'; break; } echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'.chrPass( 0, 40).'
'.chrPass( 40, 80).'
'.chrPass( 80,120).'
'.chrPass(120,160).'
'; switch ($ChrDAT['Age']) { case 254: echo '
'; echo '上記紹介文は参考資料です。
'; echo '年齢が 254才 のキャラクタをプルトへ移住させた場合は、転生によりデータが上書きされてしまうため、このキャラクタが保持する情報は失われます。'; break; case 255: echo '
'; echo '上記の紹介文は参考資料です。
'; echo '年齢が 255才 のキャラクタをプルトへ移住させた場合、ゲームがフリーズしてしまい、プレイの続行が不可能になります。
'; echo 'したがって、このキャラクタを正常に移住させることはできませんので、上記キャラクタ情報は意味のないものとなります。'; } echo '
'; } // ================================================================== // ■ キャラクラの紹介文(赤ちゃん用) // ================================================================== function fncReport2() { global $ChrDAT, $ReportLv, $PATH_FACE, $PATH_ITEM; echo '
'; if ($ChrDAT['Sex']) { echo '
'; } else { echo '
'; } echo ''; switch ($ReportLv) { case 'full': echo ''; echo ' '.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].'。'.($ChrDAT['Sex'] ? '女性' : '男性').'。'.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才。'.fncNum($ChrDAT['Peak']).'才ピーク。
'; echo ' '.chrRace().'。 顔番号 '.$ChrDAT['FaceID'].'。 顔グループ '.fncNum(substr($ChrDAT['FaceID'],1,1)).'。
'; echo ' '.chrRank().'。 所持金は '.fncNum($ChrDAT['Money']).'プゥ。

'; echo '[性格] '.chrSEIKAKU().'(積極性 '.fncNum($ChrDAT['seiSE'],1).' / 勤勉さ '.fncNum($ChrDAT['seiKI'],1).' / 優しさ '.fncNum($ChrDAT['seiYA'],1).')
'; echo '[幸福度] '.chrHappy().'('.fncNum($ChrDAT['Happy'],1).')  [余命] '.fncNum($ChrDAT['Life']).'日  [人気] '.fncNum($ChrDAT['NINKI'],1).'
'; echo '[レベル] スピード '.fncNum($ChrDAT['Lv0']).' / スタミナ '.fncNum($ChrDAT['Lv1']).' / スピリット '.fncNum($ChrDAT['Lv2']).'
'; echo '[素質] スピード '.fncNum($ChrDAT['So0']).' / スタミナ '.fncNum($ChrDAT['So1']).' / スピリット '.fncNum($ChrDAT['So2']).'
'; echo '[才能] '.chrGift2().'
'; echo '[所持品] '.chrItem(' / ', '', 'なし').'
'; break; case 'half': echo ' '.chrRace().'の'.chrSex().'、'.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].''; if ($ChrDAT['Type'] > 1) echo 'さんです。
'; elseif ($ChrDAT['Sex']) echo 'ちゃんです。
'; else echo 'くんです。
'; echo ' お顔はご覧のとおり。 いわゆる顔番号は '.$ChrDAT['FaceID'].' で、顔グループは '.fncNum(substr($ChrDAT['FaceID'],1,1)).' です。
'; if ($ChrDAT['Age'] == 254) { echo ' '.fncNum($ChrDAT['Birth']).'日に誕生予定の胎児です。 '.chrLife(); } else { echo ' '.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才。 '.chrLife(); } echo '

 '; echo '性格は「'.chrSEIKAKU().'」で、このところは「'.chrHappy().'」なんだそうです。

'; echo ' 今はまだ赤ちゃんですが、将来はきっとこんな感じのお顔になるでしょう。

'; echo '現在の武術能力は、スピード'.fncNum($ChrDAT['Lv0']).'、スタミナ'.fncNum($ChrDAT['Lv1']).'、スピリット'.fncNum($ChrDAT['Lv2']).'
'; echo 'ガアチの姓名判断によると、武術に関しては 『 '.chrURANAI().' 』 とのこと。
'; echo 'ピーク時の適正レベルは、スピード'.fncNum($ChrDAT['Te0']).'、スタミナ'.fncNum($ChrDAT['Te1']).'、スピリット'.fncNum($ChrDAT['Te2']).'。
'; echo fncNum($ChrDAT['Peak']).'才で成長のピークを迎えます。
'; echo '才能は、'.chrGift().'。
'; echo '赤ちゃんなので、お金も持ち物もないですね。
'; break; default: echo ' '.chrRace().'の'.chrSex().'、'.$ChrDAT['Name0'].'・'.$ChrDAT['Name1'].''; if ($ChrDAT['Type'] > 1) echo 'さんです。
'; elseif ($ChrDAT['Sex']) echo 'ちゃんです。
'; else echo 'くんです。
'; echo ' お顔はご覧のとおり。 いわゆる顔番号は '.$ChrDAT['FaceID'].' で、顔グループは '.fncNum(substr($ChrDAT['FaceID'],1,1)).' です。
'; if ($ChrDAT['Age'] == 254) { echo ' '.fncNum($ChrDAT['Birth']).'日に誕生予定の、まだお母さんの中にいる胎児ですね'; } else { echo ' '.fncNum($ChrDAT['Birth']).'日生まれの'.fncNum($ChrDAT['Age']).'才で、'; switch ($ChrDAT['Age'] - $ChrDAT['Peak']) { case -4: case -3: case -2: echo 'もうじきピークを迎えます'; break; case -1: case 0: case 1: echo '今が最も体力の充実した時期です'; break; case 2: case 3: case 4: echo 'ピークを少し過ぎています'; break; default: if ($ChrDAT['Age'] > $ChrDAT['Peak']) echo '体力が衰えてきています'; else echo 'ピークはまだしばらく先です'; } } echo '。

 '; echo '性格は「'.chrSEIKAKU().'」で、このところは「'.chrHappy().'」なんだそうです。

'; echo ' 今はまだ赤ちゃんですが、将来はきっとこんな感じのお顔になるでしょう。

'; echo '現在の武術能力は、スピード'.fncNum($ChrDAT['Lv0']).'、スタミナ'.fncNum($ChrDAT['Lv1']).'、スピリット'.fncNum($ChrDAT['Lv2']).'
'; echo 'ガアチの姓名判断によると、武術に関しては 『 '.chrURANAI().' 』 とのこと。
'; echo '才能は、'.chrGift().'。
'; echo '赤ちゃんなので、お金も持ち物もないですね。
'; break; } echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'.chrPass( 0, 40).'
'.chrPass( 40, 80).'
'.chrPass( 80,120).'
'.chrPass(120,160).'
'; echo '
'; } // ================================================================== // ■ キャラクラデータの編集用 // ================================================================== function fncEditMode() { global $ChrDAT, $PATH_FACE, $ChrName; $name = implode(',', $ChrName); if ($ChrDAT['Sex']) { $sex0 = ''; $sex1 = ' selected'; } else { $sex0 = ' selected'; $sex1 = ''; } switch ($ChrDAT['Peak']) { case 15: $peak0 = ' selected'; $peak1 = ''; $peak2 = ''; break; case 20: $peak0 = ''; $peak1 = ' selected'; $peak2 = ''; break; case 25: $peak0 = ''; $peak1 = ''; $peak2 = ' selected'; break; } if ($ChrDAT['Gift'] & 1) $gift_ena = ' checked'; else $gift_ena = ''; if ($ChrDAT['Gift'] & 8) $gift_cok = ' checked'; else $gift_cok = ''; if ($ChrDAT['Gift'] & 4) $gift_jim = ' checked'; else $gift_jim = ''; if ($ChrDAT['Gift'] & 2) $gift_mid = ' checked'; else $gift_mid = ''; $race = array('','','','','',''); $race[$ChrDAT['Race']] = ' selected'; $faceRace = sprintf('%1X', $ChrDAT['Race'] + $ChrDAT['Sex'] * 6); $faceGroup = substr($ChrDAT['FaceID'], 1, 1); $fg = array('','','','','','','',''); $fg[$faceGroup] = ' selected'; $faceNo = substr($ChrDAT['FaceID'], 2, 1); $fn = array('','','','','','','','','','','','','','','',''); $fn[hexdec($faceNo)] = ' checked'; switch (TRUE) { case ($ChrDAT['Type'] < 2): $faceAge = 1; break; case ($ChrDAT['Age'] > 18): $faceAge = 4; break; case ($ChrDAT['Age'] > 12): $faceAge = 3; break; default: $faceAge = 2; } $typeA = array('','',''); $typeA[$ChrDAT['Type']] = ' checked'; $typeB = array('','',''); $typeB[$ChrDAT['Syo']] = ' checked'; $typeC = array('','',''); $typeC[$ChrDAT['Job']] = ' checked'; $item = chrItem(' / ', '', 'なし'); echo <<
■名 前   {$ChrDAT['Name0']}・{$ChrDAT['Name1']} ※変更できません

■性 別     ※左の選択式メニューから、男性か女性を選ぶ

■誕生日    ※範囲は 1〜30 まで。半角の数字で入力

■年 齢     ※範囲は 0〜255 まで。半角の数字で入力

■成長のピーク年齢    ※左の選択式メニューから、いずれかを選ぶ

■人 種     ※左の選択式メニューから、いずれかを選ぶ

■顔グループ    ※左の選択式メニューから、いずれかを選ぶ

■顔番号  ※下の16種類の顔の中から、いずれかを選ぶ

{$faceRace}{$faceGroup}0{$faceAge}

{$faceRace}{$faceGroup}1{$faceAge}

{$faceRace}{$faceGroup}2{$faceAge}

{$faceRace}{$faceGroup}3{$faceAge}

{$faceRace}{$faceGroup}4{$faceAge}

{$faceRace}{$faceGroup}5{$faceAge}

{$faceRace}{$faceGroup}6{$faceAge}

{$faceRace}{$faceGroup}7{$faceAge}

{$faceRace}{$faceGroup}8{$faceAge}

{$faceRace}{$faceGroup}9{$faceAge}

{$faceRace}{$faceGroup}a{$faceAge}

{$faceRace}{$faceGroup}b{$faceAge}

{$faceRace}{$faceGroup}c{$faceAge}

{$faceRace}{$faceGroup}d{$faceAge}

{$faceRace}{$faceGroup}e{$faceAge}

{$faceRace}{$faceGroup}f{$faceAge}

■所 属   ※無所属、学生、成人の中から1つを選択。成人の場合のみ、ショルグとウルグも選ぶ
未成年(無所属)
未成年(学生)
成人

所属ショルグ:コーク  ジマ  ミダ
所属ウルグ:リム  バハ  ガアチ

■所持金  プゥ  ※範囲は 0〜99999 まで。半角の数字で入力

■性 格   積極性   勤勉さ   優しさ 
       ※上のそれぞれの欄に、-1000〜1000 の範囲で、半角の数字で入力

■幸福度    ※範囲は -1000〜1000 まで。半角の数字で入力

■余 命     ※範囲は 0〜30000 まで。半角の数字で入力

■人 気     ※範囲は -30000〜30000 まで。半角の数字で入力

■武術レベル  スピード   スタミナ   スピリット 
       ※上のそれぞれの欄に、0〜255 の範囲で、半角の数字で入力

■武術の素質  スピード   スタミナ   スピリット 
       ※上のそれぞれの欄に、0〜255 の範囲で、半角の数字で入力

■才 能   エナの子  コークの翼  ジマの力  ミダの魂
       ※付与したい素質のチェックボックスをチェック。複数選択可

■所持アイテム ※変更できません
{$item}

End_of_DATA; } // ================================================================== // ■ 補助関数群 // ================================================================== function fncInt($l, $h) { return $h < 128 ? $h*256+$l : $h*256+$l-65536; } function fncLv0($n) { return $n < 0 ? 0 : 1; } function fncLv1($n) { return $n < 1000 ? floor($n/500)+2 : 3; } function fncNum($n, $f = 0) { $a = array('0','1','2','3','4','5','6','7','8','9'); $b = ''; if ($n < 0) { $c = '−'; $n = -$n; } else { $c = ($f and $n > 0) ? '+' : ''; } do { $b = $a[$n % 10].$b; $n = floor($n/10); } while ($n); return $c.$b; } function chrRace() { global $ChrDAT; $a = array('純粋な北方系','純粋な南方系','南方系と北方系のハーフ','純粋な東方系','北方系と東方系のハーフ','南方系と東方系のハーフ'); return $a[$ChrDAT['Race']]; } function chrSex() { global $ChrDAT; return ($ChrDAT['Sex'] ? '女' : '男').($ChrDAT['Type'] < 2 ? 'の子' : '性'); } function chrLife() { global $ChrDAT; if ($ChrDAT['Life'] < 31) { if ($ChrDAT['Name1'] == 'オルルド' and $ChrDAT['Age'] < 29) return '移住バグによる短命の疑いがあります。'; if ($ChrDAT['Type'] < 2) return '結婚は難しいかもしれません。'; return 'お気の毒ですが、あとわずかの命かも…。'; } if ($ChrDAT['Life'] < 150) { if ($ChrDAT['Type'] < 2) return '毎日を大切に生きてください。'; return '赤ちゃんは授からないかもしれません。'; } if ($ChrDAT['Type'] < 2 and ($ChrDAT['Age'] < 6 or $ChrDAT['Age'] > 253)) $i = 6; else $i = $ChrDAT['Age']; $n = floor($ChrDAT['Life']/30) + $i; if ($n < 13) return 'ウミカイの卵をせっせと食べましょう。'; if ($n < 20) return '引継ぎの時期に気をつけましょう。'; if ($n < 25) return 'それほど長生きではなさそうです。'; if ($n > 30) { if ($i > 24) return 'ゴシップランキングの長寿1位になれるかも?'; if ($i > 12) return 'これからの人生、まだ先は長そうです。'; return '時間はたっぷりあるので、記録を狙ってみましょう。'; } else { if ($i > 12) return '年齢を考えて日々を送りましょう。'; return 'まだ十分な時間が残されています。'; } } function chrRank() { global $ChrDAT, $ReportLv, $PATH_ITEM; switch ($ChrDAT['Type']) { case 0: if ($ReportLv == 'full') return '子供(無所属)'; if ($ChrDAT['Age'] > 6) return 'この年齢で子供というのも変ですが、未就学の子供です'; if ($ChrDAT['Age'] > 3) return '入学式をサボったのかな? まだ就学前の子供ですね'; return 'まだ ‘ バグウェルごっこ ’ で無邪気に遊ぶ、就学前の子供です'; case 1: if ($ReportLv == 'full') return '子供(学生)'; if ($ChrDAT['Age'] > 6) return '卒業できなかったのでしょうか、まだ学生ですね'; return 'ギタの学舎に籍をおく、学生さんですね'; default: $n = array('コーク', 'ジマ', 'ミダ', 'リム', 'バハ', 'ガアチ'); $a = ' '; $b = $n[$ChrDAT['Syo']].'ショルグ'; $c = ' '; $d = $n[$ChrDAT['Job']+3].'ウルグ'; return ($ReportLv != 'full') ? "$a$b と $c$d に所属しています" : $a.$b.'、'.$c.$d.'所属'; } } function chrSEIKAKU() { global $ChrDAT; if ($ChrDAT['Type'] < 2) { $n = fncLv0($ChrDAT['seiSE']) * 4 + fncLv0($ChrDAT['seiKI']) * 2 + fncLv0($ChrDAT['seiYA']); $a = array('ワルガキ','お花が好き','勉強大好き','いい子','おちょうし者','遊びのリーダー','大人っぽい', '人気者'); } else { $n = fncLv1($ChrDAT['seiKI']) * 4 + fncLv1($ChrDAT['seiYA']); switch (fncLv1($ChrDAT['seiSE'])) { case 0: $a = array('ろくでなし','優柔不断','のんびり','イムみたいな性格','ぶっきらぼう','引っ込み思案','泣き虫','照れ屋さん','ポーカーフェイス','落ち着いた性格','物静か','奥ゆかしい','ケチ','忍耐強い','とっても謙虚','信心深い'); break; case 1: $a = array('ラムサラ好き','ぐうたら','マイペース','ロマンチスト','一匹狼','クール','おだやか','お人好し','厳格な性格','なんとなく地味','繊細なムード','しなやかな魅力','頑固一徹','ちょっと神経質','きちょうめん','思いやりがある'); break; case 2: $a = array('おおざっぱ','自由気まま','おおらか','遊び好き','不器用な性格','むじゃき','飾らない性格','社交的','冷静沈着','世渡り上手','まじめ','誠実そのもの','こびない性格','仕事好き','責任感がある','良く気がきく'); break; case 3: $a = array('超ワイルド','せっかち','好奇心旺盛','おしゃべり','わがまま','元気先行','竹を割ったよう','おせっかい','合理主義','行動的','さわやかな性格','良く出来た性格','負けず嫌い','訓練好き','まさに優等生','みんなのアイドル'); break; } } return $a[$n]; } function chrHappy() { global $ChrDAT; $a = array('不幸のどん底','とことん不幸','不幸','ちょっぴり不幸','ふつう','ちょっぴり幸せ','幸せ','とことん幸せ','こわいほど幸せ'); return $a[floor(($ChrDAT['Happy']+1000)/230)]; } function chrURANAI() { global $ChrDAT; $a = array('努力が報われない','あまり良くない','良くも悪くもない','良い素質を持っている','めぐまれた素質がある'); $n = $ChrDAT['So0'] + $ChrDAT['So1'] + $ChrDAT['So2'] - 200; $n = max(0, floor($n / 100)); $n = min(4, $n); return $a[$n]; } function chrGift() { global $ChrDAT; switch ($ChrDAT['Gift']) { case 0: return 'とくに何も持っていません'; case 1: return '「エナの子」を持っていますね。恋愛には有利でしょう'; case 15: return 'すばらしい。4つの才能を全て持っています'; } $n = ($ChrDAT['Gift'] & 1) ? '「エナの子」と、さらに' : ''; if ($ChrDAT['Gift'] & 8) $n .= '「コークの翼」'; if ($ChrDAT['Gift'] & 4) $n .= '「ジマの力」'; if ($ChrDAT['Gift'] & 2) $n .= '「ミダの魂」'; return $n.'を持っています'; } function chrGift2() { global $ChrDAT; if ($ChrDAT['Gift'] & 8) $n = 'コークの翼'; else $n = ''; if ($ChrDAT['Gift'] & 4) $n .= $n ? ' / ジマの力' : 'ジマの力'; if ($ChrDAT['Gift'] & 2) $n .= $n ? ' / ミダの魂' : 'ミダの魂'; if ($ChrDAT['Gift'] & 1) $n .= $n ? ' / エナの子' : 'エナの子'; return $n ? $n : 'なし'; } function chrMoney() { global $ChrDAT; $n = ''.fncNum($ChrDAT['Money']).'プゥ'; switch (TRUE) { case ($ChrDAT['Money'] > 29999): return $n.'も持っているので、とってもお金持ちですね'; case ($ChrDAT['Money'] > 9999): return $n.'も持っているので、とくに不自由はしないでしょう'; case ($ChrDAT['Money'] > 2999): return $n.'持っているので、とりあえず心配はなさそうです'; case ($ChrDAT['Money'] > 699): return $n.'持っていますね'; case ($ChrDAT['Money'] > 0 and $ChrDAT['Type'] < 2): return $n.'持っていますね'; case ($ChrDAT['Money'] > 0): return $n.'持っていますが、あまり余裕はないですね'; case ($ChrDAT['Type'] < 2): return 'まったく持っていませんが、子供なので大丈夫でしょう'; default: return 'まったく持っていませんが、まあ何とかなるでしょう'; } } function chrItem($a, $b, $c) { global $ChrDAT, $PATH_ITEM; $n = ''; for ($i = 0; $i < 4; $i++) { if ($ChrDAT[$i] < 189) $n .= ($n ? $a : '').''.fncITEM($ChrDAT[$i]).''.fncITEM($ChrDAT[$i]); } return $n ? $n.$b : $c; } function fncITEM($n) { if ($n == 189) return ''; switch (floor($n/21)) { case 0: $a = array('チグリ','ワパフサ草','カボイ根','ラフィアの花','宝珠の果実','マルムル茸','シジ茸','黒茸','テコン岩石','タル石','いにしえの石','ハッカ石','聖なる瞳','ロート石','ラチャ石','チタル鉱','ヴィチ','カイモドキ','ヌヌギ','ワタワタ','王魚'); break; case 1: $a = array('イェル貝','ハカロ貝','ペド貝','カビチ','ワパヌヌ','モソムル','ブレスソード','ハードナックル','マジックゲイン','ラフィアの涙','宝王のしずく','D・ドロップ','イムティ','ロン酒','龍の盾','心のくま','月の花束','レストのしらべ','太陽の鏡','セイシルの芳香','1ギブル'); break; case 2: $a = array('2ギブル','3ギブル','4ギブル','5ギブル','6ギブル','7ギブル','8ギブル','9ギブル','塩','ウミカイの卵','ラムサラ','イムのふん','絵本の箱','ミニカラの箱','積み貝の箱','ウミカイのカラ','龍想花','龍草花','女神のこしかけ','女神の香り茸','ナッツサラダ'); break; case 3: $a = array('きのこサラダ','花のサラダ','フルーツサラダ','海の幸サラダ','焼ききのこ','焼きヴィチ','焼きヌヌギ','焼きワタワタ','焼き王魚','焼き貝','焼きワパヌヌ','卵焼き','魚の茸焼き','野菜炒め','カビチ炒め','ワパフサソテー','貝と野菜のソテー','茸と貝のソテー','ワパヌヌソテー','ワパヌヌフライ','貝のフリッター'); break; case 4: $a = array('魚のムニエル','茸のグラタン','魚のグラタン','蒸しチグリ','蒸し魚','蒸しカビチ','蒸しワパヌヌ','貝の酒蒸し','カビチーネ','野菜カビチーネ','花のカビチーネ','宝珠カビチーネ','茸のカビチーネ','魚のカビチーネ','貝のカビチーネ','野菜オムレツ','きのこオムレツ','魚のオムレツ','王魚のオムレツ','貝のオムレツ','くさいオムレツ'); break; case 5: $a = array('きのこシチュー','魚のシチュー','王魚のシチュー','貝のシチュー','カビチシチュー','茶がゆ','カボイ煮','山海煮','ワパヌヌの貝煮','ワパヌヌの茸煮','野菜のイム煮','山の幸の煮物','煮込みワパヌヌ','ポトフ','山海のポトフ','きのこ鍋','貝鍋','体力鍋','塩スープ','木の実のスープ','花のスープ'); break; case 6: $a = array('海の幸のスープ','王魚のスープ','魚と茸のスープ','ワパヌヌスープ','卵スープ','ポットパイ','くさいスープ','イムスープ','ブイヨン','カボイパイ','フルーツパイ','きのこパイ','フィッシュパイ','夜のパイ','貝のパイ','手作りパン','木の実パン','野菜パン','花パン','宝珠パン','イムティロール'); break; case 7: $a = array('大人のパン','ジャムパン','野菜サンド','花サンド','フルーツサンド','きのこサンド','魚バーガー','貝サンド','カビチサンド','ワパヌヌサンド','トースト','ナッツトースト','卵トースト','宝珠トースト','ジャムトースト','パンケーキ','フルーツケーキ','クッキー','ジャムクッキー','宝珠クッキー','ジャムクレープ'); break; case 8: $a = array('宝珠クレープ','花茶','宝珠茶','きのこ茶','デヴォニアン','フルーツティー','ほろ苦い酒','宝珠酒','きのこ酒','イムティ割り','ソルティム','デヴォンの酒','卵酒','花のジャム','フルーツフィル','パンのもと','花色ゆで卵','イムフード','失敗した料理','ふしぎなもの','ラムサラ?'); break; } return $a[$n % 21]; } function chrPass($s, $r) { global $Password; $n = ''; for ($i = $s; $i < $r; $i += 2) { if (strlen($Password) > $i) $a = substr($Password, $i, 2); else $a = ' '; $n .= strstr('が,ぎ,ぐ,げ,ご,ざ,じ,ず,ぜ,ぞ,だ,で,ど,ば,び,ぶ,べ,ぼ', $a) ? "$a" : $a; if ($i % 10 == 8 and $i % 40 != 38) $n .= ' '; } return $n; } // ================================================================== // ■ 移住パスワード→キャラデータへの変換処理 // ================================================================== function fncDecode($pw) { global $DATA; $pw = str_replace('☆', '★', $pw); // ※パスワード文字の精製とデコード preg_match_all('/べ|し|ゆ|め|い|な|き|げ|び|は|が|ね|よ|え|つ|だ|ぜ|せ|ろ|ぎ|や|に|た|ず|く|へ|ぼ|ざ|む|ま|と|ど|ん|す|れ|も|お|ふ|こ|ご|あ|ひ|か|の|み|ぬ|て|で|ば|そ|わ|ぐ|り|う|ち|ぞ|け|ほ|★|じ|る|ら|さ|ぶ/', $pw, $ptn); if (count($ptn[0]) < 1) return array('NG', 0); $i = 0; $j = 0; $k = 0; $dat = array(); $pw = ''; foreach ($ptn[0] as $str) { $i = strpos('べ|し|ゆ|め|い|な|き|げ|び|は|が|ね|よ|え|つ|だ|ぜ|せ|ろ|ぎ|や|に|た|ず|く|へ|ぼ|ざ|む|ま|と|ど|ん|す|れ|も|お|ふ|こ|ご|あ|ひ|か|の|み|ぬ|て|で|ば|そ|わ|ぐ|り|う|ち|ぞ|け|ほ|★|じ|る|ら|さ|ぶ', $str); if ($i !== FALSE) { $pw .= $str; $i /= 3; switch ($j++ % 4) { case 0: $dat[$k] = $i; break; case 1: $dat[$k++] += ($i & 3) * 64; $dat[$k] = $i >> 2; break; case 2: $dat[$k++] += ($i & 15) * 16; $dat[$k] = $i >> 4; break; case 3: $dat[$k++] += $i * 4; } } } // ※暗号化解除とビット形式データの作成 $bin = ''; for ($i = 2; $i < $dat[1] + 2; $i++) { $dat[$i] ^= $dat[0]; $bin .= sprintf('%08d', decbin($dat[$i])); } // ※ビット形式データの展開 $DATA = array(); $ptn = array(); $pos = 0; $old = 'non'; while (count($DATA) < 48) { switch (getDat($bin, $pos, 1)) { case 0: $now = getDat($bin, $pos, 8); if ($now < 0) return array('NG', 1); else break; case 1: $val = getDat($bin, $pos, strlen(decbin(count($ptn)))); if (!isset($ptn[$val])) return array('NG', 1); else $now = $ptn[$val]; } $dat = explode(':', $now); $DATA = array_merge($DATA, $dat); //パターンテーブルの更新 if ($old !== 'non') { $str = ','.implode(',', $ptn).','; foreach ($dat as $val) { $old .= ':'.$val; if (strstr($str, ','.$old.',') === FALSE) { $ptn[] = $old; $str .= $old.','; } } } $old = $now; } // ※チェックサムデータの確認 $cs1 = $DATA[9]; $cs2 = $DATA[46]; $cs3 = $DATA[47]; $DATA[9] = 0; $DATA[46] = 0; $DATA[47] = 0; $key = 0; $i = 0; while ($i < 46) { $key += $DATA[$i++]; $DATA[46] += $DATA[$i++]; } $DATA[9] = $key & 255; $DATA[46] &= 255; $key = 0; for ($i = 0; $i < 46; $i += 3) $key += $DATA[$i]; $DATA[47] = $key & 255; if ($DATA[9] != $cs1 or $DATA[46] != $cs2 or $DATA[47] != $cs3) return array('NG', 1); $pos = ($pos + 15) >> 3; $val = $pos + floor($pos / 3) + 2; $val += $val; if (strlen($pw) < $val) return array('NG', 1); return array(substr($pw, 0, $val), 0); } // ■デコード用の補助関数 function getDat(&$str, &$pos, $len) { $result = (strlen($str) < $pos+$len) ? -1 : bindec(substr($str, $pos, $len)); $pos += $len; return $result; } // ================================================================== // ■ キャラデータ→移住パスワードへの変換処理 // ================================================================== function fncEncode() { global $DATA; // ※ビット形式データの作成 $hex = ''; for ($i = 0; $i < 48; $i++) $hex .= sprintf('%02X', $DATA[$i]); $bin = sprintf('0%08d0%08d', decbin($DATA[0]), decbin($DATA[1])); $ptn = array(substr($hex, 0, 4)); $old = substr($hex, 2, 2); $i = 4; while ($i < 96) { $chk = substr($hex, $i); $n = -1; for ($j = count($ptn) - 1; $j >= 0; $j--) { if (strpos($chk, $ptn[$j]) === 0) { $n = $j; break; } } if ($n < 0) { $bin .= sprintf('0%08d', decbin($DATA[$i >> 1])); $now = substr($hex, $i, 2); } else { $bin .= '1'.substr('000000'.decbin($n), -strlen(decbin(count($ptn)))); $now = $ptn[$n]; } $chk = ','.implode(',', $ptn).','; for ($j = 0; $j < strlen($now); $j += 2) { $old .= substr($now, $j, 2); if (strstr($chk, ','.$old.',') === FALSE) { $ptn[] = $old; $chk .= $old.','; } } $i += strlen($now); $old = $now; } // ※ビット形式データの数値化と暗号化 $dat = array(rand(0, 65535) & 255, ceil(strlen($bin) / 8)); $i = 0; $j = 2; while ($j < $dat[1] + 2) { $dat[$j++] = bindec(substr($bin.'0000000', $i, 8)) ^ $dat[0]; $i += 8; } $bin = ''; for ($i = 0; $i < count($dat); $i++) $bin = sprintf('%08d', decbin($dat[$i])).$bin; // ※パスワード文字列への変換 $str = array('べ','し','ゆ','め','い','な','き','げ','び','は','が','ね','よ','え','つ','だ','ぜ','せ','ろ','ぎ','や','に','た','ず','く','へ','ぼ','ざ','む','ま','と','ど','ん','す','れ','も','お','ふ','こ','ご','あ','ひ','か','の','み','ぬ','て','で','ば','そ','わ','ぐ','り','う','ち','ぞ','け','ほ','★','じ','る','ら','さ','ぶ'); $pw = ''; for ($i = strlen($bin); $i > 0; $i -= 6) { $pw .= $str[bindec(substr('000000'.$bin, $i, 6))]; } return $pw; } // ================================================================== // ■ キャラデータ→各ステータスデータへの変換処理 // ================================================================== function fncDATA2ChrDAT() { global $DATA, $ChrDAT, $NameStr, $ChrName; $ChrDAT = array($DATA[24], $DATA[25], $DATA[26], $DATA[27]); $bin = sprintf('%08d%08d', decbin($DATA[8]), decbin($DATA[7])); $ChrDAT['Job'] = bindec(substr($bin, 0, 2)); $ChrDAT['Sex'] = bindec(substr($bin, 2, 1)); $ChrDAT['Birth'] = bindec(substr($bin, 3, 5)) + 1; $ChrDAT['Peak'] = bindec(substr($bin, 8, 2)) * 5 + 15; $bin = sprintf('%08d%08d%08d%08d%08d', decbin($DATA[4]), decbin($DATA[3]), decbin($DATA[2]), decbin($DATA[1]), decbin($DATA[0])); $ChrDAT['Gift'] = bindec(substr($bin, 3, 4)); $ChrDAT['Type'] = bindec(substr($bin, 7, 1).substr($bin, 2, 1)); $ChrDAT['Syo'] = bindec(substr($bin, 8, 2)); $ChrDAT['Age'] = bindec(substr($bin, 10, 8)); $ChrDAT['Money'] = bindec(substr($bin, 18, 20)); if ($ChrDAT['Type'] < 2) $n = ($DATA[10] & 240) | 1; elseif ($ChrDAT['Age'] > 18) $n = ($DATA[10] & 240) | 4; elseif ($ChrDAT['Age'] > 12) $n = ($DATA[10] & 240) | 3; else $n = ($DATA[10] & 240) | 2; $ChrDAT['FaceID'] = ucfirst(sprintf("%04x", $n + $DATA[11] * 256)); $ChrDAT['Race'] = ($DATA[11] >> 4) % 6; $ChrDAT['Life'] = $DATA[12] + $DATA[13] * 256; $ChrDAT['NINKI'] = fncInt($DATA[14], $DATA[15]); $ChrDAT['Happy'] = fncInt($DATA[16], $DATA[17]); $ChrDAT['seiYA'] = fncInt($DATA[18], $DATA[19]); $ChrDAT['seiSE'] = fncInt($DATA[20], $DATA[21]); $ChrDAT['seiKI'] = fncInt($DATA[22], $DATA[23]); $n = 75 + $ChrDAT['Peak']; $dat = array(); $a = array(26, 28,30,32,33,35,37,38,39,41,43, 43,45,46,48,49,49,51,53,55,55, 56,58,58,59,61,62,64,66,66,66, 67,69,71,71,71,71,73,75,76,76, 76,76,77,79,80,82,83,83,83,83, 83,85,86,88,89,90,90,90,90,90, 90,92,93,94,96,97,98,99,99,99, 99,99,99,99,100,101,103,104,105,106, 107,109,110,111,111,111,111,111,111,111, 111,111,112,113,114,115,116,117,118,119, 120,122,123); for ($i = 0; $i < 3; $i++) { $b = floor($DATA[31+$i]*$n/100); if ($b > 124) $b--; elseif ($b < 9) $b = 9; elseif ($b >112) $b = 124; else $b = $a[$b-9]; $dat[$i] = $b; } $ChrDAT['Lv0'] = $DATA[28]; $ChrDAT['So0'] = $DATA[31]; $ChrDAT['Te0'] = $dat[0]; $ChrDAT['Lv1'] = $DATA[29]; $ChrDAT['So1'] = $DATA[32]; $ChrDAT['Te1'] = $dat[1]; $ChrDAT['Lv2'] = $DATA[30]; $ChrDAT['So2'] = $DATA[33]; $ChrDAT['Te2'] = $dat[2]; $ChrName = array(); $ChrDAT['Name0'] = ''; $ChrDAT['Name1'] = ''; for ($i = 34; $i < 40; $i++) { $ChrDAT['Name0'] .= $NameStr[$DATA[$i]]; $ChrName[] = $DATA[$i]; } for ($i = 40; $i < 46; $i++) { $ChrDAT['Name1'] .= $NameStr[$DATA[$i]]; $ChrName[] = $DATA[$i]; } } // ================================================================== // ■ 各ステータスデータ→キャラデータへの変換処理 // ================================================================== function fncChrDAT2DATA() { global $DATA, $ChrDAT, $NameStr, $ChrName; $DATA = array(); $DATA[0] = ($ChrDAT['Money'] & 63) * 4; $DATA[1] = ($ChrDAT['Money'] / 64) & 255; $DATA[2] = ($ChrDAT['Money'] >> 14) | (($ChrDAT['Age'] & 3) * 64); $DATA[3] = ($ChrDAT['Age'] >> 2) | ($ChrDAT['Syo'] * 64); $DATA[4] = (($ChrDAT['Type'] & 1) * 32) | (($ChrDAT['Type'] & 2) >> 1) | (($ChrDAT['Gift'] & 15) * 2); $DATA[5] = 0; $DATA[6] = 0; $DATA[7] = (($ChrDAT['Peak'] - 15) / 5) * 64; $DATA[8] = ($ChrDAT['Job'] * 64) | ($ChrDAT['Sex'] * 32) | (($ChrDAT['Birth'] - 1) & 31); $DATA[9] = 0; $DATA[10] = hexdec(substr($ChrDAT['FaceID'], 2, 2)); $DATA[11] = hexdec(substr($ChrDAT['FaceID'], 0, 2)); $DATA[12] = $ChrDAT['Life'] & 255; $DATA[13] = $ChrDAT['Life'] >> 8; $DATA[14] = $ChrDAT['NINKI'] & 255; $DATA[15] = ($ChrDAT['NINKI'] >> 8) & 255; $DATA[16] = $ChrDAT['Happy'] & 255; $DATA[17] = ($ChrDAT['Happy'] >> 8) & 255; $DATA[18] = $ChrDAT['seiYA'] & 255; $DATA[19] = ($ChrDAT['seiYA'] >> 8) & 255; $DATA[20] = $ChrDAT['seiSE'] & 255; $DATA[21] = ($ChrDAT['seiSE'] >> 8) & 255; $DATA[22] = $ChrDAT['seiKI'] & 255; $DATA[23] = ($ChrDAT['seiKI'] >> 8) & 255; $DATA[24] = $ChrDAT[0]; $DATA[25] = $ChrDAT[1]; $DATA[26] = $ChrDAT[2]; $DATA[27] = $ChrDAT[3]; $DATA[28] = $ChrDAT['Lv0']; $DATA[29] = $ChrDAT['Lv1']; $DATA[30] = $ChrDAT['Lv2']; $DATA[31] = $ChrDAT['So0']; $DATA[32] = $ChrDAT['So1']; $DATA[33] = $ChrDAT['So2']; for ($i = 0; $i < 12; $i++) $DATA[$i + 34] = $ChrName[$i]; $DATA[46] = 0; $DATA[47] = 0; // ※チェックサムデータの設定 $DATA[9] = 0; $DATA[46] = 0; $DATA[47] = 0; $key = 0; $i = 0; while ($i < 46) { $key += $DATA[$i++]; $DATA[46] += $DATA[$i++]; } $DATA[9] = $key & 255; $DATA[46] &= 255; $key = 0; for ($i = 0; $i < 46; $i += 3) $key += $DATA[$i]; $DATA[47] = $key & 255; } // ================================================================== // ■ エディットで送信されたデータ→ステータスデータへの変換処理 // ================================================================== function fncEdit2ChrDAT() { global $_POST, $DATA, $ChrDAT, $NameStr, $ChrName; $ChrDAT = explode(',', $_POST['Item']); $ChrName = explode(',', $_POST['Name']); $ChrDAT['Name0'] = ''; $ChrDAT['Name1'] = ''; for ($i = 0; $i < 6; $i++) $ChrDAT['Name0'] .= $NameStr[$ChrName[$i]]; for ($i = 6; $i < 12; $i++) $ChrDAT['Name1'] .= $NameStr[$ChrName[$i]]; $ChrDAT['Sex'] = $_POST['Sex'] & 1; $ChrDAT['Birth'] = min(max( (int) $_POST['Birth'], 1), 30); $ChrDAT['Age'] = min(max( (int) $_POST['Age'], 0), 255); switch ($_POST['Peak']) { case 15: case 20: case 25: $ChrDAT['Peak'] = $_POST['Peak']; break; default: $ChrDAT['Peak'] = 15; } $ChrDAT['Race'] = min(max( (int) $_POST['Race'], 0), 5); $ChrDAT['FaceID'] = sprintf('%1X', $ChrDAT['Race'] + $ChrDAT['Sex'] * 6).min(max( (int) $_POST['FaceGroup'], 0), 7).$_POST['FaceNo']; $ChrDAT['Type'] = min(max( (int) $_POST['Type'], 0), 2); $ChrDAT['Job'] = min(max( (int) $_POST['Job'], 0), 2); $ChrDAT['Syo'] = min(max( (int) $_POST['Syo'], 0), 2); switch (TRUE) { case ($ChrDAT['Type'] < 2): $ChrDAT['FaceID'] .= '1'; break; case ($ChrDAT['Age'] > 18): $ChrDAT['FaceID'] .= '4'; break; case ($ChrDAT['Age'] > 12): $ChrDAT['FaceID'] .= '3'; break; default: $ChrDAT['FaceID'] .= '2'; } $ChrDAT['Money'] = min(max( (int) $_POST['Money'], 0), 99999); $ChrDAT['seiSE'] = min(max( (int) $_POST['seiSE'], -1000), 1000); $ChrDAT['seiKI'] = min(max( (int) $_POST['seiKI'], -1000), 1000); $ChrDAT['seiYA'] = min(max( (int) $_POST['seiYA'], -1000), 1000); $ChrDAT['Happy'] = min(max( (int) $_POST['Happy'], -1000), 1000); $ChrDAT['Life'] = min(max( (int) $_POST['Life'], 0), 30000); $ChrDAT['NINKI'] = min(max( (int) $_POST['NINKI'], -30000), 30000); $ChrDAT['Lv0'] = min(max( (int) $_POST['Lv0'], 0), 255); $ChrDAT['Lv1'] = min(max( (int) $_POST['Lv1'], 0), 255); $ChrDAT['Lv2'] = min(max( (int) $_POST['Lv2'], 0), 255); $ChrDAT['So0'] = min(max( (int) $_POST['So0'], 0), 255); $ChrDAT['So1'] = min(max( (int) $_POST['So1'], 0), 255); $ChrDAT['So2'] = min(max( (int) $_POST['So2'], 0), 255); $ChrDAT['Gift'] = 0; if (isset($_POST['Gift0'])) $ChrDAT['Gift'] |= 1; if (isset($_POST['Gift1'])) $ChrDAT['Gift'] |= 2; if (isset($_POST['Gift2'])) $ChrDAT['Gift'] |= 4; if (isset($_POST['Gift3'])) $ChrDAT['Gift'] |= 8; $n = 75 + $ChrDAT['Peak']; $dat = array($ChrDAT['So0'], $ChrDAT['So1'], $ChrDAT['So2']); $a = array(26, 28,30,32,33,35,37,38,39,41,43, 43,45,46,48,49,49,51,53,55,55, 56,58,58,59,61,62,64,66,66,66, 67,69,71,71,71,71,73,75,76,76, 76,76,77,79,80,82,83,83,83,83, 83,85,86,88,89,90,90,90,90,90, 90,92,93,94,96,97,98,99,99,99, 99,99,99,99,100,101,103,104,105,106, 107,109,110,111,111,111,111,111,111,111, 111,111,112,113,114,115,116,117,118,119, 120,122,123); for ($i = 0; $i < 3; $i++) { $b = floor($dat[$i]*$n/100); if ($b > 124) $b--; elseif ($b < 9) $b = 9; elseif ($b >112) $b = 124; else $b = $a[$b-9]; $dat[$i] = $b; } $ChrDAT['Te0'] = $dat[0]; $ChrDAT['Te1'] = $dat[1]; $ChrDAT['Te2'] = $dat[2]; } // ================================================================== // ■ HTMLヘッダー出力 ※共通 // ================================================================== function fncHTML_Header($flg = FALSE) { global $PATH_CSS, $PATH_FACE; echo << プルト移住パスワード確認所 End_of_DATA; } // ================================================================== // ■ ページタイトルの出力 // ================================================================== function fncHTML_Title($str = '') { if (empty($str)) { global $ReportLv; switch ($ReportLv) { case 'none': $str = '入力キャラの情報  表示レベル:標準'; break; case 'half': $str = '入力キャラの情報  表示レベル:ネタバレ'; break; case 'full': $str = '入力キャラの情報  表示レベル:激ネタバレ'; break; default: $str = '入力キャラの情報  表示レベル:不明'; break; } } echo "

プルト移住パスワード確認所    − {$str} −

\n\n"; } // ================================================================== // ■ 移住パスワードの入力フォーム出力 // ================================================================== function fncHTML_PassForm($str = '') { global $ReportLv; switch ($ReportLv) { case 'none': $a1 = ' checked'; $a2 = ''; $a3 = ''; break; case 'half': $a1 = ''; $a2 = ' checked'; $a3 = ''; break; case 'full': $a1 = ''; $a2 = ''; $a3 = ' checked'; break; } if (empty($str)) { $btn = ''; } else { $btn = '  '; } echo <<
キャラクタ紹介文の表示レベル 標準   ネタバレ  激ネタバレ
$btn
End_of_DATA; } // ================================================================== // ■ オルルド短命バグへの対処用リンク表示 // ================================================================== function fncHTML_Medical() { global $Password, $ReportLv; echo <<
このキャラクタはPS版オルルドのバグによる短命の疑いがあります。
延命治療を行う場合は、下の「延命治療を希望する」ボタンをクリックしてください。
余命を一定の年齢まで引き伸ばした移住パスワードを、新たに発行します。
End_of_DATA; } // ================================================================== // ■ データエディット用のリンク表示(※激ネタバレのみ) // ================================================================== function fncHTML_EditIn() { global $Password, $ReportLv; echo <<
このキャラクタのデータをエディットする場合は、下のボタンをクリックしてください。
※パスエディットは改造と同義であると了解の上、個人の責任においてご利用下さい。
End_of_DATA; } // ================================================================== // ■ ウェルカムメッセージの出力 // ================================================================== function fncHTML_Text1() { echo << 『 World Neverland 2 〜プルト共和国〜』 で使用する「移住パスワード」の確認所です。                                  
おもに以下のような用途に使用できます。

  • ネット上で公開されているパスワードの正当性を調べる
  • ゲーム画面から転記したパスワードが間違っていないかを調べる
  • キャラクタの余命や素質を調べる

下にあるフォームに移住パスワードの文字列を入力して「パスワードの確認」ボタンをクリックして使います。
(ファンサイトなどで公開されているパスワードの文字列を丸ごとコピー&ペーストでOKです)

End_of_DATA; } // ================================================================== // ■ オルルド短命バグへの処置後メッセージ // ================================================================== function fncHTML_Text2() { echo <<
延命治療が終わりました。
現在表示されているパスワードをご利用ください。
End_of_DATA; } // ================================================================== // ■ キャラデータ編集時の注意書き // ================================================================== function fncHTML_Text3() { global $Password, $ReportLv; echo <<
《 エディットの説明と注意 》

あくまでデータの一部を変更する目的での使用を前提としているため、名前と所持アイテムについては変更できないようにしてあります。
また、プログラムの負荷軽減もあり、範囲外の値が設定されていた場合には、下限もしくは上限の値が指定されたものとして処理します。

○選択できる顔画像について
選択できる顔画像は16種類ですが、性別・人種・顔グループ・所属により変化します。
この部分は JavaScript によるプログラムで処理しているため、JavaScript の実行が制限されている場合や、ブラウザのバージョンによっては正常に動作しない可能性があります。
(顔番号の表示にはDOMを利用しています。IE5.0以上、NN6.0以上で動作します)

○所属について
所属ショルグと所属ウルグの指定は、キャラクタが未成年の場合でも、移住パスワードにも反映するようにしてあります。
ただし、それによる実質的な影響は、たぶんなかったはずです。(忘れました…)

○余命の上限について
余命の上限は 30000 (1000 年ぶん)としてありますが、そこまで巨大な値を実際に試したことはありませんので、あまりに巨大な値にした場合の結果については保証できません。

○人気のパラメータについて
全ての住民には「人気」のパラメータがあります。これを「人気」と呼ぶのが正しいかどうかは不明で、詳しい働きもわかっていません。
しかし、人気ランキングに影響を与え、自身を友人と思ってくれているキャラの人数ぶん数値が加算されるなど、わかっている範囲の働きから、ここでは便宜上「人気」としてあります。
詳細不明なパラメータですが、研究熱心なプレイヤーの研究材料となることを考慮し、公開するとともに編集を可としました。

ま、要するに、「人気って何ですか?」と訊ねられても、詳しいことはお答えできませんので、ご自身で研究なさってください、ということです。

○エディットを中止するには…
エディットを中止する場合には、下のボタンをクリックしてください。
下のボタンをクリックすると、入力キャラの情報ページに戻ります。

○エディット機能を利用する際の注意
このエディット機能を用いて作成された移住パスワードは、実際にプルト共和国への移住に使われることを想定し、設計していますが、完全にそれを保証するものではありませんのでご注意ください。
移住パスワードの改ざんは、ゲームへのチート行為に当たります。エディット機能をご利用の際は、そのことに十分留意し、自己責任のもとでおこなってください。

○禁止行為
このエディット機能で作成した移住パスワードを、正規のパスワードと偽って配布する行為は固く禁じます。
もしそのような行為が横行するようであれば、エディット機能の削除はもちろんのこと、移住パスワード確認所そのものを廃止して対処する可能性もあります。

End_of_DATA; } // ================================================================== // ■ エディット終了時のメッセージ // ================================================================== function fncHTML_Text4() { echo <<
キャラクタデータのエディットが完了しました。
現在表示されているパスワードをご利用ください。
End_of_DATA; } // ================================================================== // ■ 正規移住ができないキャラ用メッセージ // ================================================================== function fncHTML_Text5() { echo <<
○この移住パスワードについて
これは特殊なキャラクタの移住パスワードです。
赤ちゃん、および254〜255才のキャラクタで移住を行うと、移住後すぐに操作不能となります。
253才の場合も、移住後に254才の誕生日を迎えた時点で操作不能となります。
これらのパスワードは、バグ技である 「キャラクタの転生」 を利用する際に用いられ、それは全て自己責任となります。
これについての具体的な説明はここでは省きますが、わかる人だけが利用するもの、と解釈してください。
不用意に移住させた場合、その後のプレイに支障をきたす可能性もあるので、十分にご注意ください。
End_of_DATA; } // ================================================================== // ■ 送信された移住パスが正しくない場合 // ================================================================== function fncHTML_Error1($n = -1) { switch ($n) { case 0: $n = '移住パスワードが入力されていません'; break; case 1: $n = '入力された移住パスワードが正しくありません'; break; case 2: $n = '不明な問題が発生したため、その移住パスワードは処理できません'; break; default: $n = '何らかの原因により、処理が中断されました'; break; } echo "
{$n}

\n"; echo <<
移住パスワードに使用可能な文字を、パスワードの前または途中に付け加えた場合、それらを含めてパスワードとして処理されますので、ご注意ください。
また、以下のような仕様を含みますので、それについてもご注意ください。
  • 「☆」は「★」として扱われます
  • 「☆」以外の、パスワードに使用されない文字については無視されます
  • 半角カナ文字には対応していません
End_of_DATA; } // ================================================================== // ■ 不正なアクセスがあった場合 // ================================================================== function fncHTML_ErrorExit() { echo "
警告:アクセスが不正です

\n"; echo <<
悪質と判断された場合には、アクセスの禁止処置をおこなう場合があります。
管理者により用意されている方法でのみ、アクセスしてください。
End_of_DATA; } // ================================================================== // ■ アクセス禁止者へのメッセージ // ================================================================== function fncHTML_KickExit() { echo "
警告:アクセスが禁止されています

\n"; echo <<
アクセス禁止リストに登録されているため、ご利用いただけません。
詳しくは、サイト管理者までお問い合わせください。
End_of_DATA; } // ================================================================== // ■ HTMLフッター出力 ※共通 // ================================================================== function fncHTML_Footer() { echo <<

□ 『 プルト移住パスワード確認所 』 について
本コンテンツの制作および責任は、私ことお茶!にあり、サイト管理者であるとめちさんにはありません。
具体的な構造や仕組み等について、とめちさんはご存知ありませんので、質問等を送らないでください。
また、私がそれらをお教えすることはしませんので、予めご了承の上、ご利用ください。  (お茶!)


画像の転載、配布、営利目的での使用は一切禁止します。
(C)2002 althi Inc. / (C)1999 Riverhillsoft Inc. WorldNeverland.info


End_of_DATA; } ?>