ピアスバグ

読み [ ピアスバグ ]
目次
  1. 概要
  2. 原因

概要

MH3Gでのバグの一つ。
希少交易で「団長船の強化材」を入手してしまうと、
剣聖のピアス」「増弾のピアス」の入手条件を満たしたにも関わらず、
手に入らなくなってしまうというバグ。
「団長船の強化材」は簡単に入手できてしまったので、多くのハンターが被害にあった。
MH3GHDverでは修正されている。

2012年2月19日に判明し、およそ3ヶ月後の2012年5月16日データ修正プログラムが配信された。
それまで公式本にピアスの入手方法は触れなれなかったり、
公式サイトのQ&Aコーナー以外では何の音沙汰もなかったため、
ユーザーからの反応はご想像の通りだった。

ピアスバグの条件を満たした後に修正プログラムを起動することでアイテムBOXにピアスが送られる。
装備BOXに空きが2つないとピアスはBOXに送られないので注意。
「データ修正プログラム」のダウンロード方法


ちなみに発覚から2日後にカプコンからと思われるアクセスがスレにあった。

原因

おそらく同じ変数を使用してしまったのだろう。
変数といっても数学の変数のことではなく、プログラミングの変数のこと。

プログラミングには変数という何でも(数字や文字など)入る箱のようなものがあって、
この変数に何かしたり、人に見えるようにすることができるというもの。

変数の書き方はプログラミング言語(C、Java、Javascript、PHPなど色々あります)によって異なるが、
このサイトに使用されているPHPというプログラミング言語だと、

「$」を先につけて変数を使用する。
(Javascriptだと「$」ではなく「var」)
「$」の後につける文字は英数字であればいい。
「_」などのも使用することができる。

$a = 1;

と書くと「$a」という変数に「1」という数字が入る。
(「;」は文末に書く決まり文句のようなもの。ないとエラーが出る。)

で、このままだとソースコードである「$a = 1;」はソースコード(プログラムを書く所。メモ帳など)
以外には表示されないので、

$a = 1;
echo $a;

もしくは

echo $a = 1;

とすることで、webページを閲覧したユーザーにも表示される。
echo というのはその右側の変数、及び文字の中身を表示させるもの。

次にif文というのがあって
これは、もし~ならばこちらのルートに行くというもの。


if(ここに条件){

条件を満たしているとこちらが適用される

}else{

条件を満たしていないととこちらが適用されない

}


↓こういうのもある

if(ここに条件){

条件を満たしているとこちらが適用される

}


わかりやすく例で説明すると、
キャラクターに話しかけたとき会話文を表示させる処理の場合、

if(話しかけた時){

echo "団長「無事で何より、我らの団ハンター
怪我はないな?」";

}

となる。
「""」は「"」の間の文字が数字以外の文字であることを表す。
こうしないとプログラムは文字として認識してくれず、エラーになる。


他にも最初の条件を満たさなくても次の条件を満たした場合~という設定もできる。
例えばモンハンなら武器で攻撃した時、

if(斬撃属性なら){

斬撃肉質でダメージ計算する

}elseif(打撃属性なら){

打撃肉質でダメージ計算する

}elseif(弾属性なら){

肉質でダメージ計算する

}

といった感じ。
「elseif」はそうでなくて~ならという意味。
一度どこかの条件を満たせばその{}内の処理のみが行われる。
どの条件を満たしていなければ何も起きない。(そうなるとこの場合はバグになっちゃうけど)


で、ピアスの入手する処理は
(※プログラムは基本的に上から下に処理していく。)

専用の別の設定ファイルから読み込んで
「$z」がONならピアスの入手条件を満たしているということにする。
「$z」がsumiならピアスをすでに入手したということにする。
ピアスの入手条件を満たしたら、「$zがsumiでないときのみ」一度だけ「$z」にONが入る。
という仕様にしておく。


if($z == "sumi"){
(「$z == "sumi"」というのは$zがsumiという文字かどうかを表す。
つまりピアスを入手したかどうかということ。)
ここの処理ではすでにピアスを入手しているので何も起きない

}elseif($z == "ON"){
(「$z == "ON"」というのは$zがONという文字かどうかを表す。
つまりこの場合は、上記の条件を満たしておらずピアスの入手条件を満たしているかどうかということ。
ONではない場合ここの処理はスルーされる)

ここでピアスを入手する処理が行われる
(吹き出しマークを出して、専用のセリフを用意し、ピアスをBOXに送り、
もう一度入手しないようにピアスを入手したという条件、別ファイルの$zに「sumi」で上書きしておく)

}

こんな感じ。

今回は「団長船の強化材」を入手してしまうと、
ピアスの入手条件を満たしたことになるというものなので、
「団長船の強化材」を入手した時点で
$zに「sumi」が入ってしまったのだと思われる。たぶん


さあ、これを機にあなたもプログラミングに触れてみませんか?


スポンサードリンク