なんかのトップロード

横積み厳禁・精密機器在中

征覇60攻略ログ

ハマーン様万歳!!

 

クリティカル回避大もちユニット+味方の回避率向上持ち複数で試すも、

敵ユニットに撃墜されること数回。

 

結局、持ってなかったパイロットパーツ「ハマーン様」を使うことで攻略しました。

  1. 拳 キュベレイ [鉄壁](南原しずる)
  2. 拳 七星まあち(マキシマムモード) [集中](カミナギ・リョーコ
  3. 射 ウォクス・リンファ◇ [激励+Ω](ラピス・ラズリ)
  4. 射 セラフィムガンダム [感応](ロイド・アスプルンド
  5. 射 ガイアガンダム [感応](ミケーネたん)
  6. 拳 タウバーン・コンパートメント [直感](キラ・ヤマト

 

[wave1]

 まあちに関しては敵攻撃がそこそこあたります。フル改造してるんですが、

 攻撃を受けるケースがあるので、キュベレイ・まあち・タウコンを戦艦に

 退避しながら敵を殲滅していきます。

 

[wave2]

 基本的には同じ流れ。

 

[wave3]

 基本的には同じ流れですが、通常攻撃のダメージも上がってるのか、

 放っておくと、まあちが落ちる可能性があります。

 まあ、次のジ・オはタウコン一人でもなんとかなるんですが、時間かかるしね。

 

[wave4]

  敵はクリティカル攻撃ばかりなので、戦艦を攻撃されると下手すりゃ落ちます。

 射撃隊の迎撃力が物をいいます。

 

 あとはタウコンのタコ殴り。時間との勝負ですが、

 いつ落とされるかもしれない、落とされたらそこで試合終了のヒヤヒヤ感が

 半端なかったです。

 

ハマーン様パイロットパーツがない状態だと正直無理でした。

リーダースキルって大事ですね。

 

それより征覇65がなー。うーん。

征覇50攻略ログ

実は結構難しく感じたステージです。征覇50。

マスターガンダム+多数のデスアーミー+ミニマスター。

  1. 拳 タウバーン [希望](南原しずる)
  2. 射 光武二式(紅蘭機)◇ [補給Ω](タップ・オセアノ)
  3. 射 ウォクス・リンファ◇ [激励+Ω](ラピス・ラズリ)
  4. ブラ 炎竜 [補給Ω](リーナ・ルーン)
  5. ブラ ZZガンダム [ド根性Ω](ミケーネたん)
  6. 拳 ボルテスV [激励+Ω](タルホ・ユーキ)

[wave1]

 マスターに対してはタウバーンで攻撃、HPが少なくなったらボルテスVと交代。

 ブラスター2機で動きを固定することも必要。

 

 ワラワラ出てくるデスアーミーは光武二式とリンファで対応。

 正直、機体によりけりなんですが、光武二式とリンファがそれぞれ限界突破3回で

 攻撃力8500近くあるので、デスアーミーを1発で倒せることもあります。

 このあたり、ガンダムWカスタム(EW版)の精密射撃があれば、かなり楽ですね。

征覇48攻略ログ

征覇48はちゃんと手順が踏めれば攻略できる…はず。

  1. 拳 ランスロット・グレイル [信頼](ミケーネたん)
  2. ブラ 炎竜 [補給Ω](なぜかライガ様)
  3. ブラ ZZガンダム [ド根性Ω](ロンド・ミナ・サハク)
  4. 射 光武二式(紅蘭機)◇ [補給Ω](ラピス・ラズリ)
  5. 拳 月下(藤堂機) [直撃](米田一基)
  6. ファ ゴールドフレーム天☆ [闘志](南原しずる)

 

[wave1]

 基本の動きはブラスター2機をマジンガー系前に並べて、

 他機体で攻撃する。ランスロット、月下、ゴールドフレームのスタン効果で

 コンスタントにダメージ与えられるはず。ここは簡単。

 途中出てくるボスボロットは光武で。

 

[wave2]

 ほぼ変わらないけど、グレートマジンガーとグレンダイザー1機ずつ潰す。

 ブラスターが動かないように手動のほうがいいのかも。

 途中出てくるボスボロットは光武で。

 

 敵必殺を食らうと戦略見直しに迫られるので、極力回避する。

 途中HPがなくなってきたら戦艦で回復をする。この繰り返し。
 

[wave3]

 マジンカイザーの必殺に注意する。

 あとは単機なのでブラスター2機で近づいてこれないはず。

 

 

ちょっと手間取ったけど、手動を使えばなんとかなるレベル。

でも手持ち機体によるのかな。征覇47が難しすぎたからなー。

征覇47攻略ログ

征覇47のダントツ難しい難易度っぷり。超絶難しかった。

  1. 射 ウォクス・リンファ◇ [激励Ω](ライっち)
  2. 射 ブラックサレナ◇ [絆Ω](キラ・ヤマト
  3. 盾 クィン・マンサ [感応Ω](ミケーネたん)
  4. 射 エヴァ2号機 [ド根性Ω](スミス・トーレン)
  5. 射 バンシィ・ノルン(デストロイモード) [直感Ω](北小介)
  6. 射 コン・バトラーV [熱血Ω](ロンド・ミナ・サハク)

 戦艦 ナデシコC

 

[wave1]

 クィン・マンサとブラックサレナを突っ込ませつつ、

 キュベレイMkⅡの燃焼ファンネルは絆(サレナ)で対処する。

 クィン・マンサの肩部メガ粒子偏向器が対ビームに強すぎる。ほぼノーダメージ。

 

[wave2]

 ブラックサレナとエヴァ2号機をクシャトリヤに特攻。

 必殺はブラックサレナを手動で避ける。エヴァのHPはド根性で回復させる。

 エヴァが落ちたらバンシィ・ノルンを特攻。極力位置は変わらないように。

 

 帯同してるキュベレイMkⅡについては当面無視する。

 キュベレイとクシャトリアの位置が離れてきたらクィン・マンサキュベレイに。

 ブラックサレナが落ちたらリンファを特攻。

 

 キュベレイVSクィン・マンサ クシャトリアVSリンファ&ノルンと味方エリアに

 コン・バトラーVという配置になるはず。

 

 ノルンが落ちてリンファが落ちそうになったらコンV近くまで配置。

 激励Ωをやって落ちたらコンVで熱血+超電磁スピン2回。

 

 ほぼほぼこれで落ちるはず。

 

 あとはキュベレイクィン・マンサで封殺して終わり。

 

 何回やったかわからないし、次やってクリアできるかわからないわ…。

3.1系???

・・・おや!? 3.0系のようすが・・・!

ptix.co

EC-CUBE3で遊ぼう3日目

EC-CUBE3で遊ぼう3日目

プラグインジェネレーター コマンドのバグを直そう。

いきなりハードルを上げた感がありますが、今回は画面がどうとか、機能がどうとかではなくて、純粋なコアコードのバグ修正(機能改善?)です。

前回プラグインジェネレーターを用いて管理画面の機能を追加しましたが、その中に[lower_code]なる記述が残っていたと思います。

NewSample0001ServiceProviderから抜粋
    public function register(BaseApplication $app)
    {
            // プラグイン用設定画面
        $app->match('/'.$app['config']['admin_route'].'/plugin/NewSample0001/config', 'Plugin\NewSample0001\Controller\ConfigController::index')->bind('plugin_NewSample0001_config');

        // 独自コントローラ
        $app->match('/plugin/[lower_code]/hello', 'Plugin\NewSample0001\Controller\NewSample0001Controller::index')->bind('plugin_NewSample0001_hello');

の独自コントローラの部分ですが、[lower_code]となっています。これ本来の処理を考えると「$app->match(‘/plugin/newsample0001/hello’, ‘Plugin\NewSample0001\Controller\NewSample0001Controller::index’)->bind(‘plugin_NewSample0001_hello’);」となるべきだと思いますが、置き換えられていません。それを修正しましょう。

ec-cube3のソースコード全体から[lower_code]を検索した場合、以下のファイルのみがヒットします。 f:id:rock-3:20170216102414j:plain [src/Eccube/Command/PluginCommand/Resource/ServiceProvider.php]内のみですね。

プラグインジェネレータを実行すると、[src/Eccube/Command/PluginCommand/PluginGenerator.php]が動作します。そこで[src/Eccube/Command/PluginCommand/Resource/ServiceProvider.php]を用いて新しいプラグインのServiceProviderを構成しています。ここを改修しましょう。

ここで選択肢として考えるべきなのは

  • ServiceProviderに[lower_code]を変換する処理を追記・修正する。
  • そもそも[lower_code]という表現がここでしか使われてないので、別の内容に書き換える。

のいずれにするかという事です。いずれの案でも動くように対応してみましょう。

ServiceProviderに[lower_code]を変換する処理を追記・修正する。

プラグインジェネレーターコマンドを実行して、新プラグインディレクトリ内に各種ファイルを構成するのは[src/Eccube/Command/PluginCommand/PluginGenerator.php]のcreateFilesAndFoldersメソッドです。

メソッド内で[src/Eccube/Command/PluginCommand/Resource]以下のファイルをそれぞれ読み出し、新プラグイン用に変換したのちに書き出しを行っています。EC-CUBE3.0.13では、260行目前後に以下のような処理がありServiceProviderを作っているので、そこに新しい項目を追加します。

[src/Eccube/Command/PluginCommand/PluginGenerator.phpの260行目付近]
// ここからが既存の処理
// ServiceProvider
$pluginFileBefore = file_get_contents($this->app['config']['root_dir'] . '/src/Eccube/Command/PluginCommand/Resource/ServiceProvider.php');
$from = '/\[code\]/';
$pluginFileAfter = preg_replace($from, $code, $pluginFileBefore);
$from = '/\[author\]/';
$pluginFileAfter = preg_replace($from, $author, $pluginFileAfter);
$from = '/\[year\]/';
$pluginFileAfter = preg_replace($from, $year, $pluginFileAfter);
// ここまでが既存処理

// ここに以下の処理を追加する
$from = '/\[lower_code\]/';
$pluginFileAfter = preg_replace($from, mb_strtolower($code), $pluginFileAfter);

ServiceProviderのファイル内容を読み出したのち、[]で囲まれた文字列があれば置き換える処理に[lower_code]を加えています。

[lower_code]を別の表現に書き換える。

そもそも[lower_code]はServiceProviderでしか使われていない指定文字列です。PluginGenerator.phpのControllerやForm作成処理の中で[code_name]を小文字のプラグイン名に変更している処理が存在しています。ServiceProvider側を変更してみましょう。

[src/Eccube/Command/PluginCommand/PluginGenerator.phpの260行目付近]
// ここからが既存の処理
// ServiceProvider
$pluginFileBefore = file_get_contents($this->app['config']['root_dir'] . '/src/Eccube/Command/PluginCommand/Resource/ServiceProvider.php');
$from = '/\[code\]/';
$pluginFileAfter = preg_replace($from, $code, $pluginFileBefore);
$from = '/\[author\]/';
$pluginFileAfter = preg_replace($from, $author, $pluginFileAfter);
$from = '/\[year\]/';
$pluginFileAfter = preg_replace($from, $year, $pluginFileAfter);
// ここまでが既存処理

// ここに以下の処理を追加する
$from = '/\[code_name\]/';
$pluginFileAfter = preg_replace($from, mb_strtolower($code), $pluginFileAfter);
[src/Eccube/Command/PluginCommand/Resource/ServiceProvider.phpの[lower_code]]
// 独自コントローラ
$app->match('/plugin/[lower_code]/hello', 'Plugin\[code]\Controller\[code]Controller::index')->bind('plugin_[code]_hello');

// ログファイル設定
$app['monolog.logger.[lower_code]'] = $app->share(function ($app) {

    $logger = new $app['monolog.logger.class']('[lower_code]');

    $filename = $app['config']['root_dir'].'/app/log/[lower_code].log';
    $RotateHandler = new RotatingFileHandler($filename, $app['config']['log']['max_files'], Logger::INFO);
    $RotateHandler->setFilenameFormat(
        '[lower_code]_{date}',
        'Y-m-d'
    );

    $logger->pushHandler(
        new FingersCrossedHandler(
            $RotateHandler,
            new ErrorLevelActivationStrategy(Logger::ERROR),
            0,
            true,
            true,
            Logger::INFO
        )
    );

    return $logger;
});

以下のように変更する。

// 独自コントローラ
$app->match('/plugin/[code_name]/hello', 'Plugin\[code]\Controller\[code]Controller::index')->bind('plugin_[code]_hello');

// ログファイル設定
$app['monolog.logger.[code_name]'] = $app->share(function ($app) {

    $logger = new $app['monolog.logger.class']('[code_name]');

    $filename = $app['config']['root_dir'].'/app/log/[code_name].log';
    $RotateHandler = new RotatingFileHandler($filename, $app['config']['log']['max_files'], Logger::INFO);
    $RotateHandler->setFilenameFormat(
        '[lower_code]_{date}',
        'Y-m-d'
    );

    $logger->pushHandler(
        new FingersCrossedHandler(
            $RotateHandler,
            new ErrorLevelActivationStrategy(Logger::ERROR),
            0,
            true,
            true,
            Logger::INFO
        )
    );

    return $logger;
});

これで、いずれの修正を行った場合でも、[lower_code]が変更される形になりました。一応こんな感じで修正できますが、基本的にEC-CUBEのコアコードは触らないほうがいいですし、この問題も次期バージョンでは改修されるみたいです。 github.com 一次対応とプラグインジェネレーターがどう動いているかの確認という感じですね。

今日はここまで。