ページ 11

【解決済み】スキルの連続回数を変更するプラグイン

Posted: 2022年12月10日(土) 00:35
by akira57
行動主体がステート「双剣」だった場合、スキルの連続回数(通常は1)を2にするプラグインを作成しました。
戦闘中は問題なくプラグインが作動するのですが、戦闘以外のメニュー画面でアイテムを使用するなどのときに
TypeError
Cannot read property 'isStateAffected' of undefined
とエラー表示になってしまいます。おそらく、戦闘以外なのでBattleManager._subjectでひっかかるものと思われます。
 そこで、各攻撃スキルのメモ欄に<双剣>と記入の上で、プラグインに
if( this.item().meta.match(/双剣/) …①
の条件付きを加えてみれば、攻撃スキルなら戦闘中のみの使用のため上記のようなエラーは避けられるのではと思いきや、やはりエラーとなります。①の構文にミスがあるのかもしれません、メモ欄には他の文なども書かれているため、一部一致で「双剣」と書かれていた場合を条件としたいのでmatchを使用したいです。
 よい方法(プラグインの書き方)があれば教えていただけるとありがたいです。お願いいたします。


----以下プラグイン内容---------------------------------------------------------------------------------------------------
(function() {
var _Game_Action_numRepeats = Game_Action.prototype.numRepeats;
Game_Action.prototype.numRepeats = function() {
var number = _Game_Action_numRepeats.call(this);
return this.numRandRepeats(number);
};

Game_Action.prototype.numRandRepeats = function(number) {
var battler = BattleManager._subject; // 現在の行動主体
if(battler.isStateAffected(10)){ // ステート「双剣」のID=10
number = 2; // スキルの連続回数を2にする
}
return number;
}
})();

Re: スキルの連続回数を変更するプラグイン

Posted: 2022年12月10日(土) 03:10
by Plasma Dark
ツクマテの掲示板には、コードを見やすく貼るためのタグが用意されています。
書き込みフォーム上部の Code ボタンを押すことで挿入されるので、コードを貼る際には活用してみてください。
戦闘以外なのでBattleManager._subjectでひっかかるものと思われます。
お察しの通りです。実際には BattleManager._subject は戦闘中の限られたタイミングでのみ、行動の主体を表すオブジェクトが入り、それ以外ではnullになります。
戦闘中においても、プラグインからこれを直接参照するのは極力避けたほうが良いです。
(戦闘の流れを正しく把握して使わないと容易にバグりますし、戦闘の流れはとても複雑なので……)

ところで、Game_Actionは戦闘中に限らず、行動(スキルやアイテムの使用)を表すクラスです。
その行動の主体は同クラス内に定義されたsubjectメソッドで取得できます。

双剣ステートにかかっている場合に連続回数を問答無用で2にしたいのであれば、

コード: 全て選択

(() => {
  'use strict';

  const _Game_Action_numRepeats = Game_Action.prototype.numRepeats;
  Game_Action.prototype.numRepeats = function () {
    return this.subject().isStateAffected(10) ? 2 : _Game_Action_numRepeats.call(this);
  };
})();
これで十分です。

攻撃スキルを双剣扱いにするという意図であれば、メモ欄にタグとして記述すると良いでしょう。
<双剣> と書いた場合、 this.item().meta["双剣"] が真になります。

アイテムやスキルのデータオブジェクトにおける meta は、 DataManager.extractMetadata によって展開されます。
メモ欄の内容そのままが欲しい場合は this.item().note でも参照は可能ですが、タグとして記述して meta に展開してもらったほうが使い勝手は良いのではないかと思います。

Re: スキルの連続回数を変更するプラグイン

Posted: 2022年12月10日(土) 16:56
by akira57
 お早いご回答感謝申し上げます。
Game_Actionは戦闘中以外でもフィールド上での行動にも関わるクラスなんですね、だから
戦闘以外でアイテム・スキルを使用するとエラーになってしまうことが分かりました。
ありがとうございました。
おかげさまで無事、実装したい内容がかないました。
 プラグインは初めて作ってみたもので、何時間かけてもエラー続きで困っていたところでしたし、
教えて頂いたプログラム文、こんな短い文でやりたいことが実行できることに驚きました。
大変ありがとうございました。
 これからもプラグイン作成にはまりそうです。