ページ 12

【解決済み】プラグインの導入判定

Posted: 2017年9月17日(日) 22:41
by にゃたま
こんばんは。

トリアコンタン様のScene_SoundTest等のプラグインがON状態(有効になっているかどうか)
を取得する方法が知りたいです。

var Imported = Imported || {};
Imported.YEP_MoveRouteCore = true;

ynfly様などはこのように「Inported.プラグイン名」で判定したりできますが
トリアコンタン様のプラグインにはそういった記述がないのでON状態の判定がどうするかわかりません。
ご存じの方いましたらご教授願えますでしょうか?

Re: プラグインの導入判定

Posted: 2017年9月17日(日) 22:44
by しぐれん
PluginManager.parameters()で該当するプラグインの名前を引っ張り出してチェックする方法があります。
読み込まれていなければundefinedが返ってきます。

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 00:38
by にゃたま
しぐれん様

しぐれん さんが書きました:PluginManager.parameters()で該当するプラグインの名前を引っ張り出してチェックする方法があります。
読み込まれていなければundefinedが返ってきます。



お返事ありがとうございます。

具体的にですがどのようなスクリプトにすればよろしいでしょうか?
自作プラグイン上からconsole.logでPluginManager.parameters()を見ようとすると
画像のようなエラーになります。

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 01:18
by しぐれん
PluginManager.parameters('プラグインから.jsを抜いた名前')でプラグイン自体のパラメータを取得します。
本来はプラグインパラメータを自分で使うための処理ですが、これで行けるかと。

具体的には以下のような処理です。

コード: 全て選択

var p = PluginManager.parameters('プラグインから.jsを抜いた名前');
if(p){
//読み込まれている時の処理
}


Re: プラグインの導入判定

Posted: 2017年9月18日(月) 21:22
by にゃたま
しぐれん様

返事が遅くなり申し訳ございません。

しぐれん さんが書きました:PluginManager.parameters('プラグインから.jsを抜いた名前')でプラグイン自体のパラメータを取得します。
本来はプラグインパラメータを自分で使うための処理ですが、これで行けるかと。


SceneSoundTest.jsがオフの状態で
以下のように自作プラグインに入れて実行してみましたら画像のようなエラーが表示されるようです。
エラー箇所はvar _Scene_SoundTest_create = Scene_SoundTest.prototype.create;の部分のようです。
SceneSoundTest.jsがオフにもかかわらずif(p){の部分を通り抜けてしまうようです。
これはサウンドテストのウィンドウを透明化したく入れたコードになります。
サウンドテストのプラグインがオフのとき画像のエラーが表示されてしまうのでこのエラーを消したいと思って
このような質問をさせていただきました。お手数おかけしてすみません。

コード: 全て選択

    var p = PluginManager.parameters('SceneSoundTest');
    if(p){
        var _Scene_SoundTest_create =  Scene_SoundTest.prototype.create;
        Scene_SoundTest.prototype.create  = function() {
             _Scene_SoundTest_create.call(this);
                this._helpWindow.opacity = 0;
                this._bgmListWindow.opacity = 0;
                this._bgmSettingWindow.opacity = 0;
        };
    }

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 21:29
by しぐれん
追加調査しました。
$pluginsという変数にすべてのプラグインが配列で入ってました。
$plugins[i].nameに名前が、$plugins[i].statusにON/OFFが入っているようです。

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 21:35
by にゃたま
しぐれん様

お返事ありがとうございます。

しぐれん さんが書きました:追加調査しました。
$pluginsという変数にすべてのプラグインが配列で入ってました。
$plugins[i].nameに名前が、$plugins[i].statusにON/OFFが入っているようです。


具体的にですがどのようなコードにすればよろしいでしょうか?
iとかどこからとってよいのかわかりません。

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 21:55
by しぐれん
$plugins[i]のiですが、これは配列の添え字という意味です。
省略せずに書くと以下のような内容です。

コード: 全て選択

for(var i=0;i<$plugins.length;++i){
   if($plugins[i].name ==='探したいプラグインの名前'){
   if($plugins[i].states){
   //プラグインがONの時の処理
   }
   }
}


Re: プラグインの導入判定

Posted: 2017年9月18日(月) 22:08
by にゃたま
しぐれん様

早速のご回答ありがとうございます。

しぐれん さんが書きました:

コード: 全て選択

for(var i=0;i<$plugins.length;++i){
   if($plugins[i].name ==='探したいプラグインの名前'){
   if($plugins[i].states){
   //プラグインがONの時の処理
   }
   }
}



forの下行に
console.log("name:"+$plugins[i].name+" states:"+$plugins[i].states);
を入れて確認したところONになっているものまでundefinedになっていました。
一度ご確認いただいでよろしいでしょうか?

追記
ひょっとしたら以下のようにfunction()の直下だからいけないのでしょうか?

コード: 全て選択

(function() {
for(var i=0;i<$plugins.length;++i){
   console.log("name:"+$plugins[i].name+"   states:"+$plugins[i].states);
   if($plugins[i].name ==='SceneSoundTest'){
     if($plugins[i].states){
     //プラグインがONの時の処理
     var _Scene_SoundTest_create =  Scene_SoundTest.prototype.create;
            Scene_SoundTest.prototype.create  = function() {
                 _Scene_SoundTest_create.call(this);
                    this._helpWindow.opacity = 0;
                    this._bgmListWindow.opacity = 0;
                    this._bgmSettingWindow.opacity = 0;
            };
     }   
   }
}

Re: プラグインの導入判定

Posted: 2017年9月18日(月) 22:52
by しぐれん
私の手元だとundefinedにならないのでわからないです。
ひとまず、名前だけ・statusだけ表示で試せませんか?